Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

अजगर में cx_Oracle का उपयोग करके PL/SQL और DML/DDL के साथ SQL फ़ाइल को पार्स करें

एक ही समय में कई कथनों को निष्पादित करना संभव है, लेकिन यह अर्ध-हैकी है। आपको अपने बयानों को लपेटना होगा और उन्हें एक-एक करके निष्पादित करना होगा।

>>> 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 विकल्प हैं:

  1. एक अधिक जटिल पार्सर लिखें, जो मुझे नहीं लगता कि यह एक अच्छा विकल्प है।

  2. पायथन से SQL स्क्रिप्ट निष्पादित न करें; कोड को अलग-अलग SQL स्क्रिप्ट में रखें ताकि पार्सिंग आसान हो, एक अलग पायथन फ़ाइल में, आपके पायथन कोड में एम्बेडेड, डेटाबेस में एक प्रक्रिया में ... आदि। यह शायद मेरा पसंदीदा विकल्प है।

  3. 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
    >>>
    



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या Oracle के सरल कार्यों पर प्रशासन के लिए कठिन होने के दावे सही हैं? क्या इसके लिए गुणवत्तापूर्ण व्यवस्थापक ऐप्स नहीं हैं?

  2. नेटवर्क एडेप्टर कनेक्शन स्थापित नहीं कर सका - Oracle 11g

  3. लूप के लिए यह सरल क्वेरी चाहते हैं

  4. SID के बजाय सेवा नाम का उपयोग करके Oracle से कैसे जुड़ें?

  5. चर की जाँच करते समय गलत प्रकार की ओरेकल अभिव्यक्ति