【问题标题】:MySQL equivalent session variable for OracleOracle 的 MySQL 等效会话变量
【发布时间】:2009-02-09 19:34:23
【问题描述】:

在 MySQL 中,我可以使用单个 @ 创建访问会话变量。 初始化示例:

set @myVar = true;

一些包含此代码的触发器:

if (@myVar is not true) then
  execute something

Oracle 10g 中的等价物是什么?

【问题讨论】:

    标签: mysql oracle plsql session-variables


    【解决方案1】:
    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
    

    【讨论】:

      【解决方案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 的一个优点是您可以进行一些封装。

      【讨论】:

        【解决方案3】:

        为什么不直接使用绑定变量?在 SQL Plus 中:

        variable SOME_NUMBER number
        exec :SOME_NUMBER := 10
        

        PL/SQL 过程成功完成

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

        适用于任何类型的 Oracle 数据类型。

        【讨论】:

        • 该变量需要在其他地方的触发器中从 PL\SQL 外部访问。
        猜你喜欢
        • 2013-01-18
        • 2015-02-17
        • 2016-01-06
        • 1970-01-01
        • 2014-09-13
        • 1970-01-01
        • 1970-01-01
        • 2019-03-25
        • 1970-01-01
        相关资源
        最近更新 更多