एक ही समय में कई कथनों को निष्पादित करना संभव है, लेकिन यह अर्ध-हैकी है। आपको अपने बयानों को लपेटना होगा और उन्हें एक-एक करके निष्पादित करना होगा।
>>> 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()
>>>
जैसा कि आपने नोट किया है कि यह अर्ध-बृहदान्त्र समस्या का समाधान नहीं करता है, जिसके लिए कोई आसान उत्तर नहीं है। जैसा कि मैंने देखा आपके पास 3 विकल्प हैं:
-
एक अधिक जटिल पार्सर लिखें, जो मुझे नहीं लगता कि यह एक अच्छा विकल्प है।
-
पायथन से SQL स्क्रिप्ट निष्पादित न करें; कोड को अलग-अलग SQL स्क्रिप्ट में रखें ताकि पार्सिंग आसान हो, एक अलग पायथन फ़ाइल में, आपके पायथन कोड में एम्बेडेड, डेटाबेस में एक प्रक्रिया में ... आदि। यह शायद मेरा पसंदीदा विकल्प है।
-
subprocess
का उपयोग करें और स्क्रिप्ट को इस तरह बुलाओ। यह सबसे आसान और तेज़ विकल्प है लेकिनcx_Oracle
. का उपयोग नहीं करता है बिल्कुल।>>> 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 >>>