Firebird数据库
Firebird数据库语言参考-上下文函数
2022-06-23 10:19:36


升级说明:请阅读!
在的早期版本中作为外部函数 (UDF) 实现的大量函数,Firebird已逐步重新实现为内部(内置)函数。如果某些外部函数与数据库中声明的内置名称相同,它将保留在那里并将覆盖.
任何同名的内部函数。要使内部函数可用,您需要删除 UDF,或使用 ALTER EXTERNAL函数 来更改 UDF 的声明名称。

 

用于处理上下文变量的函数

注意
RDB$GET_CONTEXT及其对应的RDB$SET_CONTEXT实际上是预先声明的UDF。它们被列出
这里作为内部函数,因为它们始终存在 - 用户不必做任何事情来使它们可用。
有效:DSQL、PSQL * 作为声明的 UDF,它应该在 ESQ 中可用

说明:从SYSTEM、USER_SESSION和USER_TRANSACTION其中一个命名空间中检索上下文变量的值。


语法:
RDB$GET_CONTEXT ('', '')
  ::= SYSTEM | USER_SESSION | USER_TRANSACTION
  ::= 区分大小写的字符串,最多 80 个字符。

表 8.3.RDB$GET_CONTEXT 函数参数

结果类型:VARCHAR(255)
命名空间:命名空间USER_SESSION和USER_TRANSACTION命名空间初始为空。用户可以
使用RDB$SET_CONTEXT()在其中创建和设置变量,并使用RDB$GET_CONTEXT()取得它们。
SYSTEM命名空间是只读的。它包含许多预定义的变量,如下表所示。

 

表 8.4.SYSTEM 命名空间中的上下文变量

返回值和错误行为:如果给定命名空间中存在轮询变量,则将返回其值
作为字符串,最大长度255 个。如果命名空间不存在,或者您尝试访问不存在的变量
在 SYSTEM 命名空间中,将引发错误。如果轮询其他命名空间之一中不存在的变量,
返回 NULL。命名空间和变量名称必须以单引号、区分大小写、非 NULL 的形式的字符串。
例子

select rdb$get_context('SYSTEM', 'DB_NAME') from rdb$database
New.UserAddr = rdb$get_context('SYSTEM', 'CLIENT_ADDRESS');
insert into MyTable (TestField)
 values (rdb$get_context('USER_SESSION', 'MyVar'))
参阅: RDB$SET_CONTEXT()

 


注意
RDB$SET_CONTEXT及其对应的RDB$GET_CONTEXT实际上是预先声明的UDF。它们被列出
这里作为内部函数,因为它们始终存在 - 用户不必做任何事情来制作它们
可用。
内置函数和变量

有效:DSQL,PSQL * 作为声明的UDF,它应该在ESQL中可用
说明:在其中一个用户可写命名空间中创建、设置或取消设置变量,USER_SESSION和
USER_TRANSACTION。
语法:
RDB$SET_CONTEXT ('', '', | NULL)
  ::= USER_SESSION | USER_TRANSACTION
  ::= A case-sensitive string of max. 80 characters
  ::= A value of any type, as long as it's castable to a VARCHAR(255)

表 8.5 . RDB$SET_CONTEXT Function Parameters

结果类型:整数
命名空间:USER_SESSION和USER_TRANSACTION命名空间最初为空。用户可以

 

使用RDB$SET_CONTEXT()在其中创建和设置变量,并使用RDB$GET_CONTEXT()检索它们。这个
USER_SESSION上下文绑定到当前连接。USER_TRANSACTION变量仅存在于它们已被设置的事务中。当事务结束时,上下文和定义的所有变量
在其中被销毁。

返回值和错误行为:如果变量在调用之前已存在,则函数返回 1,反之则返回0
。要从上下文中移除变量,请将其设置为 NULL。如果给定的命名空间不存在,则错误为
提出。命名空间和变量名称都必须以单引号、区分大小写、非 NULL 字符串的形式输入。
例子:
select rdb$set_context('USER_SESSION', 'MyVar', 493) from rdb$database
rdb$set_context('USER_SESSION', 'RecordsFound', RecCounter);
select rdb$set_context('USER_TRANSACTION', 'Savepoints', 'Yes')
 from rdb$database

注意:
• 任何单个上下文中的最大变量数为 1000。
• 所有USER_TRANSACTION变量都将在回滚保留(请参阅回滚选项)或回滚到 SAVEPOINT 不变的情况下继续存在,无论它们在事务中的哪个时间点被设置。
• 由于其类似UDF的性质,RDB$SET_CONTEXT可以像void函数一样调用,而无需
分配结果,如上面的第二个示例所示。常规内部函数不允许这种类型的使用

参阅: RDB$GET_CONTEXT()

 

本文档中文版由海钛瑞OA办公系统研发团队翻译制作,转载请在开始处标明来自于http://www.hitai.com.欢迎交流。