db2 - 在 db2 中,为什么 python 脚本总是返回“无”,当我们分配“0”时,从 ibm_db.callproc 调用过程 SP_MEM_DAILY_TMS
问题描述
蟒蛇脚本:
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 输出:SP_MEM_DAILY_TMS 无 ZZ_TEST_RET2 9
为什么当我们分配“0”时它返回“无”。并使用 ibm_db.callproc 从 python 执行它
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
解决方案
linux 上的 python 2.7 和 python 3.6.9 以及 ibm_db 版本 3.0.1 都可以重现此行为。
作为一种解决方法,在您的存储过程中,使用 BIGINT 类型声明输出参数。然后 ibm_db 模块不会像对待 SMALLINT 和 INTEGER 那样将 0 视为无。
您可以在github上开票以获取更多信息。
推荐阅读
- r - 如何在自定义函数中包含逻辑检查
- python-3.x - 如何在列表的每个元素之间应用函数?
- angular - 我将角度材料升级到 7.2,我想使用徽章功能
- python - 尝试在 SQLAlchemy 上运行 Insert 语句时出现 CompileError
- javascript - 试图将正确的 json 数据发送到 Page。JavaScript Node.Js
- apollo - Apollo:使用具有不同查询深度的相同 objectID
- android - 在响应式扩展中使用 Flowable 时避免同池死锁
- ruby-on-rails - 将实例变量设置为仅等于特定模型参数
- angular - Angular 服务测试 - 如何返回预期值?
- python - ModuleNotFoundError:Python IDE 中没有名为“seaborn”的模块