Oracle
 sql >> база данни >  >> RDS >> Oracle

Анализирайте SQL файл с PL/SQL и DML/DDL с помощта на cx_Oracle в python

Възможно е да се изпълнят няколко изявления едновременно, но това е полу-хаки. Трябва да опаковате изразите си и да ги изпълните един по един.

>>> 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 скриптове от Python; имайте кода или в отделни SQL скриптове, така че анализът да е лесен, в отделен файл на Python, вграден във вашия код на Python, в процедура в базата данни... и т.н. Това вероятно е моята предпочитана опция.

  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 от AWS EC2 към AWS RDS, част 2

  3. SQL. Как да се направи препратка към съставен първичен ключ Oracle?

  4. как да използвате tns записи с драйвери за макромедия за Oracle

  5. Грешка на Oracle несъвместими типове данни:очакваният CHAR получи LONG