cx_Oracle.DatabaseError: ORA-00922: missing or invalid option when trying to execute pl/sql using python
cx_Oracle.DatabaseError: ORA-00922: missing or invalid option when trying to execute pl/sql using python
AM 试图执行在 运行 时间构建的 PL/SQL 脚本,但得到
cx_Oracle.DatabaseError: ORA-00922: missing or invalid option
看起来像是脚本的格式问题,因为它显示为 STRING,但仍然不确定如何解决它。
下面是正在尝试的代码:
script = '''Set serveroutput on;
DECLARE
V_req pls_integer;
BEGIN
V_req := infomediary_nse.request(
p_inApp_id => 100,
p_inPayload => XMLTYPE(
'<tag>hello</tag>'
)
);
END;
/'''
dbconnection = cx_Oracle.connect(ConnectionString)
str, err = dbconnection.cursor().execute(script)
set serveroutput on
不是PL/SQL命令,而是SQL*Plus命令,所以你只能在SQL*PLus中使用它。
甚至最后的 /
也应该删除,因为它也是 SQL*Plus 特定的。
这应该有效:
script = '''DECLARE
V_req pls_integer;
BEGIN
V_req := infomediary_nse.request(
p_inApp_id => 100,
p_inPayload => XMLTYPE(
'<tag>hello</tag>'
)
);
END;'''
如果您使用 set serveroutput on
从 DBMS_OUTPUT
调用中获取结果,您可以查看 this.
例如,这个:
import cx_Oracle
conn = cx_Oracle.connect(..., ..., ...)
c = conn.cursor()
vSql = '''begin
dbms_output.put_line('Hello!');
end;
'''
c.callproc("dbms_output.enable")
c.execute(vSql)
statusVar = c.var(cx_Oracle.NUMBER)
lineVar = c.var(cx_Oracle.STRING)
while True:
c.callproc("dbms_output.get_line", (lineVar, statusVar))
if statusVar.getvalue() != 0:
break
print (lineVar.getvalue())
conn.close()
给出:
E:\Python>python testOracle.py
Hello!
AM 试图执行在 运行 时间构建的 PL/SQL 脚本,但得到
cx_Oracle.DatabaseError: ORA-00922: missing or invalid option
看起来像是脚本的格式问题,因为它显示为 STRING,但仍然不确定如何解决它。
下面是正在尝试的代码:
script = '''Set serveroutput on;
DECLARE
V_req pls_integer;
BEGIN
V_req := infomediary_nse.request(
p_inApp_id => 100,
p_inPayload => XMLTYPE(
'<tag>hello</tag>'
)
);
END;
/'''
dbconnection = cx_Oracle.connect(ConnectionString)
str, err = dbconnection.cursor().execute(script)
set serveroutput on
不是PL/SQL命令,而是SQL*Plus命令,所以你只能在SQL*PLus中使用它。
甚至最后的 /
也应该删除,因为它也是 SQL*Plus 特定的。
这应该有效:
script = '''DECLARE
V_req pls_integer;
BEGIN
V_req := infomediary_nse.request(
p_inApp_id => 100,
p_inPayload => XMLTYPE(
'<tag>hello</tag>'
)
);
END;'''
如果您使用 set serveroutput on
从 DBMS_OUTPUT
调用中获取结果,您可以查看 this.
例如,这个:
import cx_Oracle
conn = cx_Oracle.connect(..., ..., ...)
c = conn.cursor()
vSql = '''begin
dbms_output.put_line('Hello!');
end;
'''
c.callproc("dbms_output.enable")
c.execute(vSql)
statusVar = c.var(cx_Oracle.NUMBER)
lineVar = c.var(cx_Oracle.STRING)
while True:
c.callproc("dbms_output.get_line", (lineVar, statusVar))
if statusVar.getvalue() != 0:
break
print (lineVar.getvalue())
conn.close()
给出:
E:\Python>python testOracle.py
Hello!