cx_Oracle CREATE TABLE AS返回ORA-01036:非法的变量名/编号(cx_

2019-09-28 17:35发布

我想CREATE TABLE AS上的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语句,完美的作品。 此外,当使用CREATE TABLE AS上SQLPLUS声明其正常运行。

有没有具体的语法CREATE TABLE AS在cx_Oracle中使用? 试图找到这样的例子,但没有发现至今。

Answer 1:

您是关在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()


文章来源: cx_Oracle CREATE TABLE AS returns ORA-01036: illegal variable name/number