我有一个名为myscript.sql的sql脚本,如下所示:
-- Comment that I have in my sql script.
MERGE INTO my_table i using
(select several_columns
from my_other_table f
where condition
) f on (my join conditions)
WHEN MATCHED THEN
UPDATE SET whatever;
COMMIT;
我尝试过从python调用它,方法与从SQL Developer工作表调用相同,即:
cursor().execute(r'''@"path_to_my_script\myscript.sql"''')
但它不起作用,将引发以下错误:
DatabaseError: ORA-00900: invalid SQL statement
我该如何执行脚本?
3条答案
按热度按时间eh57zj3b1#
在Oracle中,将多个语句作为单个命令传递是无效的(这有助于防止SQL注入攻击)。如果脚本包含多个语句,则不可能使用单个命令运行它。
如果脚本只有SQL语句(没有PL/SQL语句),则:
1.把脚本读成字符串。
1.在SQL语句终止符
;
上将字符串拆分为语句1.打开到数据库的连接。
1.关闭自动提交。
1.分别运行每条语句。
1.最后,可选地,
COMMIT
事务(在您的情况下,脚本包括COMMIT
作为最后一条语句)。如果您有PL/SQL语句,则需要检查每个语句是SQL还是PL/SQL,并分别以
;
或/
(在新行上)终止,然后相应地拆分字符串。/
终止SQL语句。如果要在脚本中包括PL/SQL语句,则最简单的方法是在新行中使用/
终止所有语句。这意味着对于SQL语句,您应仅包括/
,而不包括;
。对于PL/SQL语句,您应该使用END;
终止代码块,并包含最后一个;
,然后在新行中使用/
终止语句。)*smtd7mpg2#
您可以读取SQL文件的内容并将其传递给
execute()
方法。请看另一个问题及其答案,它们看起来非常相关:reading external sql script in python
j1dl9f463#