cx_oracle 使用 keywordParameters 取回输入参数
cx_oracle get input parameters back with keywordParameters
我正在使用 cx_oracle 对我们的数据库进行 db proc 调用。我们必须严格避免位置参数,只在我们的数据库调用中使用命名参数。问题是文档提到了 -
Keyword parameters will be included after the positional parameters
and are not returned as part of the output sequence.
很明显我没有通过调用返回数据库输入参数。这些输入参数应该被更新,我需要在我对其他数据库过程的进一步调用中更新值。 cx-Oracle document
使用位置参数调用 1 -
output = connection.cursor()
result = cursor.callproc("get_some_data", ["name", cx_Oracle.Binary(), output ])
returns 包含更新的 input/output 参数值的列表。
呼叫 2
output = connection.cursor()
result = cursor.callproc("get_some_data", keywordParameters = {"input_1":"name", "input_2": cx_Oracle.Binary(), "output":output })
returns 空列表,光标输出可通过 output
变量获得。
有解决办法吗?
您可以访问 IN OUT 和 OUT 变量,并且知道为 IN 参数传递的内容。所以你可以做任何你想做的事情。
"""
create or replace procedure get_some_data(input_1 in varchar2, input_2 in out varchar2, output out sys_refcursor) as
begin
input_2 := input_1 || ' ' || input_2;
open output for select * from dual;
end;
/
show errors
"""
import cx_Oracle
import os
import sys
if sys.platform.startswith("darwin"):
cx_Oracle.init_oracle_client(lib_dir=os.environ.get("HOME")+"/Downloads/instantclient_19_8")
username = os.environ.get("PYTHON_USERNAME", "cj")
password = os.environ.get("PYTHON_PASSWORD", "cj")
connect_string = os.environ.get("PYTHON_CONNECTSTRING", "localhost/orclpdb1")
connection = cx_Oracle.connect(username, password, connect_string)
with connection.cursor() as cursor:
output = connection.cursor()
v = cursor.var(str)
v.setvalue(0,'Smith')
result = cursor.callproc("get_some_data", keywordParameters = {"input_1":"Fred", "input_2": v, "output":output })
print(v.getvalue())
for row in output:
print(row)
给出:
Fred Smith
('X',)
我正在使用 cx_oracle 对我们的数据库进行 db proc 调用。我们必须严格避免位置参数,只在我们的数据库调用中使用命名参数。问题是文档提到了 -
Keyword parameters will be included after the positional parameters and are not returned as part of the output sequence.
很明显我没有通过调用返回数据库输入参数。这些输入参数应该被更新,我需要在我对其他数据库过程的进一步调用中更新值。 cx-Oracle document
使用位置参数调用 1 -
output = connection.cursor()
result = cursor.callproc("get_some_data", ["name", cx_Oracle.Binary(), output ])
returns 包含更新的 input/output 参数值的列表。
呼叫 2
output = connection.cursor()
result = cursor.callproc("get_some_data", keywordParameters = {"input_1":"name", "input_2": cx_Oracle.Binary(), "output":output })
returns 空列表,光标输出可通过 output
变量获得。
有解决办法吗?
您可以访问 IN OUT 和 OUT 变量,并且知道为 IN 参数传递的内容。所以你可以做任何你想做的事情。
"""
create or replace procedure get_some_data(input_1 in varchar2, input_2 in out varchar2, output out sys_refcursor) as
begin
input_2 := input_1 || ' ' || input_2;
open output for select * from dual;
end;
/
show errors
"""
import cx_Oracle
import os
import sys
if sys.platform.startswith("darwin"):
cx_Oracle.init_oracle_client(lib_dir=os.environ.get("HOME")+"/Downloads/instantclient_19_8")
username = os.environ.get("PYTHON_USERNAME", "cj")
password = os.environ.get("PYTHON_PASSWORD", "cj")
connect_string = os.environ.get("PYTHON_CONNECTSTRING", "localhost/orclpdb1")
connection = cx_Oracle.connect(username, password, connect_string)
with connection.cursor() as cursor:
output = connection.cursor()
v = cursor.var(str)
v.setvalue(0,'Smith')
result = cursor.callproc("get_some_data", keywordParameters = {"input_1":"Fred", "input_2": v, "output":output })
print(v.getvalue())
for row in output:
print(row)
给出:
Fred Smith
('X',)