Có thể thực hiện nhiều câu lệnh cùng một lúc nhưng hơi khó. Bạn cần phải kết hợp các câu lệnh của mình và thực hiện từng câu một.
>>> import cx_Oracle
>>>
>>> a = cx_Oracle.connect('schema/[email protected]')
>>> curs = a.cursor()
>>> SQL = (("""create table tmp_test ( a date )"""),
... ("""insert into tmp_test values ( sysdate )""")
... )
>>> for i in SQL:
... print i
...
create table tmp_test ( a date )
insert into tmp_test values ( sysdate )
>>> for i in SQL:
... curs.execute(i)
...
>>> a.commit()
>>>
Như bạn đã lưu ý, điều này không giải quyết được vấn đề dấu chấm phẩy, không có câu trả lời dễ dàng. Như tôi thấy, bạn có 3 lựa chọn:
-
Viết một trình phân tích cú pháp quá phức tạp, mà tôi không nghĩ là một lựa chọn tốt chút nào.
-
Không thực thi các tập lệnh SQL từ Python; có mã trong các tập lệnh SQL riêng biệt để việc phân tích cú pháp dễ dàng, trong một tệp Python riêng biệt, được nhúng trong mã Python của bạn, trong một thủ tục trong cơ sở dữ liệu ... v.v ... Đây có lẽ là tùy chọn ưa thích của tôi.
-
Sử dụng
subprocess
và gọi script theo cách đó. Đây là tùy chọn đơn giản và nhanh nhất nhưng không sử dụngcx_Oracle
ở tất cả.>>> import subprocess >>> cmdline = ['sqlplus','schema/[email protected]','@','tmp_test.sql'] >>> subprocess.call(cmdline) SQL*Plus: Release 9.2.0.1.0 - Production on Fri Apr 13 09:40:41 2012 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Connected to: Oracle Database 11g Release 11.2.0.1.0 - 64bit Production SQL> SQL> CREATE TABLE FOO(id number); Table created. SQL> SQL> BEGIN 2 INSERT INTO FOO VALUES(1); 3 INSERT INTO FOO VALUES(2); 4 INSERT INTO FOO VALUES(3); 5 END; 6 / PL/SQL procedure successfully completed. SQL> CREATE TABLE BAR(id number); Table created. SQL> SQL> quit Disconnected from Oracle Database 11g Release 11.2.0.1.0 - 64bit Production 0 >>>