我正在尝试使用Python 2.4.6上的cx_Oracle来创建TABLE AS
以下代码:
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
的特定语法?试图找到这方面的例子,但到目前为止没有找到。
答案 0 :(得分:0)
最好在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()