3

MySQL では、単一の @ を使用してセッション変数へのアクセスを作成できます。初期化の例:

set @myVar = true;

このコードを含むいくつかのトリガー:

if (@myVar is not true) then
  execute something

Oracle 10g で同等のものは何ですか?

4

3 に答える 3

6
SQL> EXEC DBMS_SESSION.SET_CONTEXT('CLIENTCONTEXT', 'myvar', 'myvalue');

PL/SQL procedure successfully completed

SQL> SELECT SYS_CONTEXT('CLIENTCONTEXT', 'myvar') FROM dual;

SYS_CONTEXT('CLIENTCONTEXT','M
--------------------------------------------------------------------------------
myvalue
于 2009-02-09T19:47:33.480 に答える
2

パッケージのグローバル変数は、おそらく同じトリックを行います。

CREATE OR REPLACE PACKAGE foo as
  myVar BOOLEAN;
END foo;


CREATE OR REPLACE PACKAGE BODY foo AS
  BEGIN
    MyVar := true;
END foo;


BEGIN
  If foo.myVar THEN 
    dbms_output.put_line ('MyVar is True');
  end if;
END;

SYS_CONTEXT よりもパッケージを使用する利点は、カプセル化が得られることです。

于 2009-02-09T19:47:25.383 に答える
0

バインド変数を使用しないのはなぜですか? SQL プラスの場合:

variable SOME_NUMBER number
exec :SOME_NUMBER := 10

PL/SQL プロシージャが正常に完了しました

if :SOME_NUMBER = 10 then
   do something;
end if;
/

あらゆる種類の Oracle データ型で機能します。

于 2009-02-11T05:37:33.233 に答える