в db2, почему скрипт python всегда возвращает 'none', когда мы присваиваем '0' при вызове процедуры SP_MEM_DAILY_TMS из ibm_db.callproc - PullRequest
0 голосов
/ 19 марта 2020

python script:

import ibm_db
v_conn = ibm_db.connect("DATABASE=BLUDB;HOSTNAME=127.0.1.1;PORT=50000;PROTOCOL=TCPIP;   UID=bluadmin;PWD=Yugenreddy@1;", "", "")
v_id = 1 
v_aa = None 
v_ret = 99
v_stmt, v_id, v_aa, v_ret = ibm_db.callproc(v_conn,"SP_MEM_DAILY_TMS",(v_id,v_aa,v_ret))
print("SP_MEM_DAILY_TMS")
print(v_ret)
ibm_db.close(v_conn)

v_conn = ibm_db.connect("DATABASE=BLUDB;HOSTNAME=127.0.1.1;PORT=50000;PROTOCOL=TCPIP;                                                       UID=bluadmin;PWD=Yugenreddy@1;", "", "")
v_id = 1 
v_aa = None 
v_ret = 99
v_stmt, v_id, v_aa, v_ret = ibm_db.callproc(v_conn,"ZZ_TEST_RET2",(v_id,v_aa,v_ret))
print("ZZ_TEST_RET2")
print(v_ret)
ibm_db.close(v_conn)

python output: SP_MEM_DAILY_TMS None ZZ_TEST_RET2 9

почему возвращается «None», когда мы присваиваем «0». и выполнить его из python, используя ibm_db.callpro c

create or replace procedure ZZ_TEST_RET2(
IN I_QUEUE_PROC_ID BIGINT
,IN I_AAA_ID INTEGER
,OUT O_RETURN SMALLINT
)
 SPECIFIC ZZ_TEST_RET2
 P1:BEGIN
 DECLARE C_RET_OK SMALLINT CONSTANT 9;
 SET O_RETURN = C_RET_OK;
 RETURN;
 end"

CREATE OR REPLACE PROCEDURE SP_MEM_DAILY_TMS(
     IN  I_QUEUE_PROC_ID     BIGINT
    ,IN  I_EMPLR_ID          INTEGER
    ,OUT O_RETURN            SMALLINT
 )
BEGIN
 DECLARE C_RET_OK                SMALLINT     CONSTANT 0;
 SET O_RETURN = C_RET_OK;
RETURN;
END

1 Ответ

0 голосов
/ 19 марта 2020

Это поведение воспроизводимо для python 2.7 и python 3.6.9 и ibm_db версии 3.0.1 для linux.

В качестве обходного пути в ваших хранимых процедурах объявляйте выходные параметры с типом BIGINT. Тогда модуль ibm_db не будет обрабатывать 0 как none, как для SMALLINT и INTEGER.

Вы можете открыть тикет на github для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...