繁体   English   中英

Python cx_Oracle无效选项

[英]Python cx_Oracle invalid option

我正在尝试使用Python来创建表并插入一些值

cur = con.cursor()

remove_table = '''
BEGIN
   EXECUTE IMMEDIATE 'DROP TABLE {}';
EXCEPTION
   WHEN OTHERS THEN
      IF SQLCODE != -942 THEN
         RAISE;
      END IF;
END;
'''
create_table_workclasses = '''
CREATE TABLE WORKCLASSES (
WORKCLASSES_NAME VARCHAR2(32) NOT NULL
)
'''
insert_workclasses = '''
INSERT ALL
INTO WORKCLASSES VALUES ('Private');
INTO WORKCLASSES VALUES ('Selfemp-inc')
INTO WORKCLASSES VALUES ('Federal-gov')
SELECT * FROM dual;
'''

cur.execute(remove_table.format('WORKCLASSES'))
cur.execute(create_table_workclasses)
cur.execute(insert_workclasses)

cur.close()
con.close()

得到一个错误

cur.execute(create_table_workclasses)
cx_Oracle.DatabaseError: ORA-00922: missing or invalid option

问题是SQL Developer中的查询工作得很好!

我建议你研究以下帖子: Python样式 - 用字符串继续行?

基本上它说当你使用'''时,它会替换源代码中的换行符\\ n。

所以可能的解决方案是使用双引号单个字符“与分隔符\\一起用于新行。

例如:

remove_table = "BEGIN \
EXECUTE IMMEDIATE 'DROP TABLE {}'; \
  EXCEPTION WHEN OTHERS \
  THEN IF SQLCODE != -942 THEN \
    RAISE; \
  END IF; \
END;"

如果你是空间宽松的,请考虑新线路开头的空格。 它们也会添加到最终的字符串中

以防万一还有另一种方法可以保持代码缩进但使用更多的分隔符和引号。

remove_table = "BEGIN " \
"EXECUTE IMMEDIATE 'DROP TABLE TEST';" \
"  EXCEPTION WHEN OTHERS " \
"    THEN IF SQLCODE != -942 THEN " \
"      RAISE;" \
"    END IF;" \
"END;"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM