ex_oracle创建表AS返回ORA-01036:非法变量名/号



我正在尝试在Python 2.4.6上使用cx_Oracle创建表

以下代码:

    query = '''CREATE TABLE TMP_STATS_1 AS
    select NUM from INF_CARD where IMPORT_DATE between
    to_date(:datepass || ' 00:00:00','dd/mm/yyyy hh24:mi:ss') and
    to_date(:datepass || ' 23:59:59','dd/mm/yyyy hh24:mi:ss')'''
    curs.execute(query, datepass=datep)

返回: cx_Oracle。DatabaseError: ORA-01036:非法变量名/数

去掉CREATE TABLE TMP_STATS_1 AS,只留下SELECT语句,效果很好。另外,当在SQLPLUS上使用CREATE TABLE AS语句时,它可以正常运行。

在cx_Oracle中使用CREATE TABLE AS是否有任何特定的语法?

你最好在Oracle中创建一个可以创建你的表的过程,然后在Python中调用这个过程:

create or replace procedure my_pro(p_table_name in varchar2, p_date_pass in date) as
 q1 varchar2(4000);
begin
 q1 := 'CREATE TABLE '|| p_table_name ||' AS
 select NUM from INF_CARD where IMPORT_DATE between
 trunc('||p_date_pass||') and trunc('||p_date_pass||') + 1 - (1/24/60/60)';
 EXECUTE IMMEDIATE q1;
end;

,然后从Python调用这个过程:

import cx_Oracle
con = cx_Oracle.connect('###YourPath###')
cur = con.cursor()
cur.callproc('my_pro', ('TMP_STATS_1', datep))
cur.close()
con.close()

最新更新