PARSE

PARSE プロシージャは、SQLコマンドまたはSPLブロックを解析します。SQLコマンドがDDLコマンドの場合、すぐに実行され、 EXECUTE 関数を実行する必要はありません。

PARSE(<c> INTEGER, <statement> VARCHAR2, <language_flag> INTEGER)

Parameters

c

開いているカーソルのカーソルID。

statement

解析するSQLコマンドまたはSPLブロック。SQLコマンドはセミコロンターミネータで終了してはなりませんが、SPLブロックにはセミコロンターミネータが必要です。

language_flag

Oracle構文との互換性のために提供される言語フラグ。 DBMS_SQL.V6, DBMS_SQL.V7 または DBMS_SQL.native を使用します。このフラグは無視され、すべての構文はEDBAdvancedServer形式であると想定されます。

Examples

次の匿名ブロックは、 job という名前のテーブルを作成します。DDLステートメントは PARSE プロシージャによってすぐに実行され、別の EXECUTE ステップを必要としないことに注意してください。

DECLARE
    curid           INTEGER;
BEGIN
    curid := DBMS_SQL.OPEN_CURSOR;
    DBMS_SQL.PARSE(curid, 'CREATE TABLE job (jobno NUMBER(3), ' ||
        'jname VARCHAR2(9))',DBMS_SQL.native);
    DBMS_SQL.CLOSE_CURSOR(curid);
END;

以下は、 job テーブルに2つの行を挿入します。

DECLARE
    curid           INTEGER;
    v_sql           VARCHAR2(50);
    v_status        INTEGER;
BEGIN
    curid := DBMS_SQL.OPEN_CURSOR;
    v_sql := 'INSERT INTO job VALUES (100, ''ANALYST'')';
    DBMS_SQL.PARSE(curid, v_sql, DBMS_SQL.native);
    v_status := DBMS_SQL.EXECUTE(curid);
    DBMS_OUTPUT.PUT_LINE('Number of rows processed: ' || v_status);
    v_sql := 'INSERT INTO job VALUES (200, ''CLERK'')';
    DBMS_SQL.PARSE(curid, v_sql, DBMS_SQL.native);
    v_status := DBMS_SQL.EXECUTE(curid);
    DBMS_OUTPUT.PUT_LINE('Number of rows processed: ' || v_status);
    DBMS_SQL.CLOSE_CURSOR(curid);
END;

Number of rows processed: 1
Number of rows processed: 1

次の匿名ブロックは、 DBMS_SQL パッケージを使用して、2つの INSERT ステートメントを含むブロックを実行します。ブロックの終わりには終了セミコロンが含まれていますが、前の例では、個々の INSERT ステートメントには終了セミコロンがありません。

DECLARE
    curid           INTEGER;
    v_sql           VARCHAR2(100);
    v_status        INTEGER;
BEGIN
    curid := DBMS_SQL.OPEN_CURSOR;
    v_sql := 'BEGIN ' ||
               'INSERT INTO job VALUES (300, ''MANAGER''); '  ||
               'INSERT INTO job VALUES (400, ''SALESMAN''); ' ||
             'END;';
    DBMS_SQL.PARSE(curid, v_sql, DBMS_SQL.native);
    v_status := DBMS_SQL.EXECUTE(curid);
    DBMS_SQL.CLOSE_CURSOR(curid);
END;