我正在尝试使用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中的查询工作正常!
答案 0 :(得分:0)
我建议您研究以下帖子: Python style - line continuation with strings?
基本上它说当你使用'''时,它会替换\ n中源代码中的换行符。
因此,可能的解决方案是使用双引号单个字符“与分隔符\一起用于新行。
E.g:
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;"