Oracle Rdb—有用的 SQL 脚本
从 SQL 脚本在 DCL 中保存符号

问题:有没有办法从个 SQL 脚本在 DCL 中保存符号?

回答有,但必须调用 VMS 运行时库函数来完成这项工作。这很简单,如下所示。

SQL> create procedure SET_SYMBOL
cont>     in  :symbol VARCHAR (255)
cont>         by descriptor,
cont>     in  :value_string VARCHAR (255)
cont>         by descriptor)
cont>     language SQL;
cont>     external
cont>         name LIB$SET_SYMBOL
cont>         location 'SYS$SHARE:LIBRTL.EXE'
cont>         language GENERAL
cont>         parameter style GENERAL
cont>     comment is 'Create a DCL symbol from SQL';
SQL>$
SQL> declare :my_value varchar (20);
SQL> begin set :my_value = 'Sample'; end;
SQL> begin call SET_SYMBOL ('MY_VALUE', :my_value); end;
SQL>
$ show symbol my_value
  MY_VALUE = "Sample"

     
在 SQL 中获取当前的进程 id

问题:有没有办法在 SQL 中获取当前的进程 id?

回答:有,可以创建一个外部过程和 SQL 函数来返回这一信息。外部过程可以调用 LIB$GETJPI 在 OUT 参数中返回进程标识,而 SQL 函数可以把信息作为函数结果返回。

每个例程都在 CREATE MODULE 语句内创建,这样 GRANT 和 DROP MODULE 就可以通过一个名字来使用组合函数。

请注意 BIND ON CLIENT SITE 子句是默认的而且必须被使用。否则 LIB$GETJPI 调用将会返回单独的外部例程服务器的进程 id。

寄送此页面
Printer View 打印机视图