Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Parsing file SQL dengan PL/SQL dan DML/DDL menggunakan cx_Oracle dengan python

Dimungkinkan untuk mengeksekusi beberapa pernyataan pada saat yang sama tetapi itu semi-retas. Anda perlu membungkus pernyataan Anda dan menjalankannya satu per satu.

>>> 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()
>>>

Seperti yang telah Anda catat, ini tidak menyelesaikan masalah titik koma, yang tidak ada jawaban mudahnya. Seperti yang saya lihat, Anda memiliki 3 opsi:

  1. Tulis parser yang terlalu rumit, yang menurut saya bukan pilihan yang baik sama sekali.

  2. Jangan jalankan skrip SQL dari Python; memiliki kode dalam skrip SQL terpisah sehingga penguraiannya mudah, dalam file Python terpisah, tertanam dalam kode Python Anda, dalam prosedur di database... dll. Ini mungkin opsi pilihan saya.

  3. Gunakan subprocess dan panggil skrip seperti itu. Ini adalah opsi paling sederhana dan tercepat tetapi tidak menggunakan cx_Oracle sama sekali.

    >>> 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. Cari tahu Karyawan yang absen selama 3 hari berturut-turut

  2. Membuat Formulir di APEX untuk mengatur Variabel dalam Query untuk Laporan Interaktif

  3. Konversikan Varchar2 ke array Char di Oracle

  4. Bagaimana cara mengeksekusi skrip Oracle sql melalui kode java

  5. Tabel database Oracle dalam tampilan grid