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

Stroredprocedureの実行中にエラーが発生する

    Nicholas Karasn​​ovが言うように、プロシージャ宣言と一致するように呼び出しの引数が必要です。この場合、OUTがあります パラメータなので、選択したデータを移動する場所が必要です。これは、sys_refcursorに対応するものです。 パラメータタイプ。

    SQL * Plusを使用してこれをテストしている場合は、 SQL*Plus変数 このために、それをバインド変数として渡し、print カーソルの内容を表示するコマンド:

    variable rc refcursor
    exec javao(1, :rc);
    print rc
    

    これはSQLDeveloperでも機能します。他のコードからプロシージャを呼び出すと、PL / SQLブロックまたは外部アプリケーション(jdbcなどを介して)で変数が宣言されます。 )、ただし、それらの詳細は、実行している内容によって異なります。

    Javaから呼び出すには、次のようにします。

    // get connection
    CallableStatement cStmt = conn.prepareCall("{ call javao(?, ?) }");
    cStmt.setInt(1, 1);
    cStmt.registerOutParameter(2, OracleTypes.cursor);
    cStmt.execute();
    ResultSet rSet = ((OracleCallableStatement) cStmt).getCursor(2);
    while (rSet.next())
    {
        // get columns from result set row and do something with the data
    }
    

    ...しかし、これは擬似コードに隣接しているため、ドキュメントを読んで空白を埋め(エラーを修正します。たとえば、Oracle固有のステートメントタイプが必要になる可能性があります)、オブジェクトのクローズとエラー処理をすべて追加する必要があります。その他の良いもの。




    1. チェコ語のPostgresql全文検索(デフォルトの言語設定なし)

    2. Oracleのアクセントと大文字と小文字を区別しないCOLLATEと同等

    3. 別のストアドプロシージャから参照カーソルに列を追加するストアドプロシージャを作成するにはどうすればよいですか?

    4. postgresで作成できるスキーマの数