Oracle 的 MySQL 等效会话变量

Posted

技术标签:

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

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

set @myVar = true;

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

if (@myVar is not true) then
  execute something

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

【问题讨论】:

【参考方案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 外部访问。

以上是关于Oracle 的 MySQL 等效会话变量的主要内容,如果未能解决你的问题,请参考以下文章

oracle和mysql的区别

mysql中会话和进程如何查询

Socket.io 1.0.5:如何保存会话变量?

JPA:如何设置 MySQL 会话变量?

根据从 MySQL 中提取的一个值创建 PHP 会话变量

将两个会话变量添加到 MYSQL 查询中