Python调用z/OS平台DB2存储过程遇CLI0150E错误,求有效SET SCHEMA语句格式
Python调用z/OS平台DB2存储过程遇CLI0150E错误,求有效SET SCHEMA语句格式
我来帮你搞定这个问题!你之前肯定是把SQL的SET SCHEMA语句直接当Python代码写了,这难怪会报语法错——Python本身不认识SQL指令,得通过ibm_db提供的接口来执行这条SQL才行。
给你两个靠谱的解决方案,先看你要的SET SCHEMA正确执行方式:
方法一:通过ibm_db.exec_immediate执行SET SCHEMA
在你建立好数据库连接conn之后,用ibm_db.exec_immediate()来运行SET SCHEMA语句,代码示例如下:
# 先确保conn是已经成功建立的DB2连接对象 # 替换成你的存储过程实际所在的schema名称,注意z/OS DB2默认是大写 target_schema = "YOUR_SCHEMA_NAME" # 执行SET SCHEMA语句 ibm_db.exec_immediate(conn, f"SET SCHEMA = {target_schema}") # 之后再调用存储过程就会自动使用这个schema了 stmt, hp_id, user_id, first_string, first_code, second_string, second_code, reason = ibm_db.callproc(conn, 'SP_DEN_PRV_GET_PROVIDER_PRACTICE_NAME', (hp_id, user_id, first_string, first_code, second_string, second_code, reason) )
如果你的schema名称里有特殊字符,也可以用静态写法避免字符串格式化的问题:
ibm_db.exec_immediate(conn, "SET SCHEMA = YOUR_SCHEMA_NAME")
方法二:直接在存储过程名前指定schema前缀(更稳妥)
其实还有个更直接的办法,不用单独执行SET SCHEMA,在调用callproc的时候直接给存储过程加上完整的schema限定名就行,比如:
stmt, hp_id, user_id, first_string, first_code, second_string, second_code, reason = ibm_db.callproc(conn, 'YOUR_SCHEMA_NAME.SP_DEN_PRV_GET_PROVIDER_PRACTICE_NAME', (hp_id, user_id, first_string, first_code, second_string, second_code, reason) )
这个方法绕开了设置schema的环节,直接精准定位到目标存储过程,在z/OS DB2环境下有时候反而更可靠,你可以试试。
另外提醒你注意:z/OS平台的DB2对象名(包括schema、存储过程)默认是大写的,所以你写的时候一定要和实际创建的名称大小写一致,别用小写或者混合大小写,不然也会找不到对象。
备注:内容来源于stack exchange,提问作者Dutch58
相关产品推荐
相关产品推荐

