Python 使用SQL*PLUS从cx\U Oracle内部复制?
我们需要在两个Oracle数据库模式之间复制记录 我们可以使用SQL*PLUS COPY命令手动执行此操作: 但是,如果可能的话,我们希望使用cx_Oracle实现自动化(我们还需要做一些其他事情,例如SSH交互,因此需要使用Python和cx_Oracle) 但是,如果我尝试在cx_Oracle内部执行COPY,它似乎不喜欢以下命令:Python 使用SQL*PLUS从cx\U Oracle内部复制?,python,sql,oracle,sqlplus,cx-oracle,Python,Sql,Oracle,Sqlplus,Cx Oracle,我们需要在两个Oracle数据库模式之间复制记录 我们可以使用SQL*PLUS COPY命令手动执行此操作: 但是,如果可能的话,我们希望使用cx_Oracle实现自动化(我们还需要做一些其他事情,例如SSH交互,因此需要使用Python和cx_Oracle) 但是,如果我尝试在cx_Oracle内部执行COPY,它似乎不喜欢以下命令: Traceback (most recent call last): File "<stdin>", line 1, in <modul
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
cx_Oracle.DatabaseError: ORA-00900: invalid SQL statement
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
cx_Oracle.DatabaseError:ORA-00900:无效的SQL语句
我猜这是因为COPY是一个SQL*PLUS特定命令,而不是标准SQL规范的一部分
无论如何,有没有办法让COPY命令(或任何其他SQL*加上特定扩展)在cx_Oracle下工作
我相信可以使用INSERT INTO…SELECT来实现类似的功能,但是如果两个数据库位于不同的Oracle实例或主机上,并且我们并不总是拥有创建这些链接的权限,则需要一个数据库链接
干杯,
维克多在我看来,你有两个选择:
sqlplus
执行。在脚本中,您可以配置NLS
变量:
NLS_DATE_FORMAT = "\'DD.MM.YYYY HH24:MI:SS\'"
NLS_NUMERIC_CHARACTERS = "\'.,\'"
NLS_LANG = 'AMERICAN_AMERICA.CL8MSWIN1251'
,自动提交
AUTO_COMMIT = "OFF"
,无提示sqlplus
# silent sqlplus = "-s" silent off sqlplus = ""
silent_sqlplus = "-s"
出现错误时停止脚本或继续执行
WHENEVER = 'WHENEVER SQLERROR EXIT SQL.SQLCODE'.
-u指定用户名,例如SCOTT
-p指定密码,例如TIGER
-c为连接到oracle数据库指定connect_字符串(TNS别名)或easy connect字符串
-d指定用于执行sql脚本的目录
-l指定输出日志的日志文件
比如说
run_all_sql_dir.py -u scott -p tiger -c 192.168.0.166:1521/test -d C:\Users\Dmitry\PycharmProjects\count_char\sql -l log_sql.log
SQLPlus命令由SQLPlus解析和执行。因此,没有办法将它们与任何其他API一起使用。嗯,首先,换句话说,有没有办法实现与SQL*PLUS相同的功能(在不使用数据库链接的情况下跨数据库表记录复制?)将数据从数据库复制到Python,然后再复制回数据库将带来大量的网络流量。SQL*Plus COPY也是如此,所以请真正了解如何实现其他解决方案,如DB链接。如果您确实想使用Python,那么请确保检查并