Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Phân tích cú pháp tệp SQL với PL / SQL và DML / DDL bằng cx_Oracle trong python

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:

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

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

  3. 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ụng cx_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
    >>>
    



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. nhận danh sách được phân tách bằng dấu phẩy gần 'xx.yy' không hợp lệ với dbms_utility.comma_to_table

  2. ORA-12505, TNS:người nghe hiện không biết về SID được cung cấp trong bộ mô tả kết nối

  3. Tạo lại Oracle Databse từ các tệp .dbf sau khi cài đặt lại Oracle Enterprise 11gR2

  4. Thư mục công việc của Bea Weblogic ở đâu

  5. Oracle Contains không hoạt động