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

トランザクションコンテキストでのOracleストアドプロシージャ/関数のセマンティクス

    RESTRICT_REFERENCES を使用できます 関数がパッケージまたはデータベースの状態を読み取り/書き込みしないことを示します。

    CREATE PACKAGE t_pkg AS
       FUNCTION showup (msg VARCHAR2) RETURN VARCHAR2;
       PRAGMA RESTRICT_REFERENCES(showup, WNDS, RNDS);
    END t_pkg;
    /
    -- create the package body
    CREATE OR REPLACE PACKAGE BODY t_pkg AS
       FUNCTION showup (msg VARCHAR2) RETURN VARCHAR2 IS
        v_val varchar2(1);
       BEGIN
          select dummy into v_val from dual;
          RETURN v_val;
       END;
    END t_pkg;
    /
    

    以前は、SQLはそのような約束をしない限り関数を呼び出すことを許可しませんでしたが、その制限は解除されました。

    プロシージャと関数の差別化要因にしたいと思います。 PL / SQL関数でNO_DATA_FOUND例外が発生した場合、SQL文の呼び出しは失敗しません(データが見つからない場合はSQLエラーではないため)。したがって、オブジェクトがSQLから呼び出されるように特別に設計されていない限り、プロシージャを使用することを好みます。



    1. JDBCorg​​.postgresql.Driverをロードしているクラスが見つかりません

    2. Rails:データベース接続が利用できない場合にメンテナンスページを表示する

    3. 空のフィールドを無視して1つ以上のフィールドをmysqlデータベースに更新する方法は?

    4. 更新日+1年(mysql)