sql >> データベース >  >> RDS >> Oracle

Pythonでcx_Oracleを使用して、PL/SQLおよびDML/DDLでSQLファイルを解析します

    複数のステートメントを同時に実行することは可能ですが、それはややハッキーです。ステートメントをラップして、一度に1つずつ実行する必要があります。

    >>> 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. PythonからSQLスクリプトを実行しないでください。解析が簡単になるように、コードを個別の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. AJAXを使用して選択オプションの選択でPHPクエリを実行するにはどうすればよいですか?

    2. プロシージャMySQL5.5.xでSQLEXCEPTIONメッセージを取得する

    3. JPA Criteria API:mm / dd/yyyy形式で日付を取得する方法

    4. クライアントを分離するためのBugzillaの基本的な権限