PLSQL Language Referenc-PL/SQL静态SQL-光标变量-光标变量作为宿主变量

光标变量作为宿主变量

宿主变量主要用于在PL/SQL存储存储子程序和它的客户端之间传递查询结果集。当光标变量为宿主变量的时候,PL/SQL和它的客户(宿主环境)共享存储查询结果集的SQL工作区指针。

为了把光标变量作为宿主变量,需要在宿主环境中声明光标变量,然后把它作为输入宿主变量(绑定变量)传递给PL/SQL。宿主光标变量兼容任何返回类型,即是弱类型的。

--光标变量作为Proc*C客户端程序中的宿主变量

EXEC SQL BEGIN DECLARE SECTION;

    SQL_CURSOR  generic_cv;  -- 声明宿主光标变量

    int         choice;      -- 选择

EXEC SQL END DECLARE SECTION;

EXEC SQL ALLOCATE :generic_cv;  -- 初始宿主光标变量

-- 将宿主光标变量传递给PL/SQL

/

EXEC SQL EXECUTE

BEGIN

  IF :choice = 1 THEN

    OPEN :generic_cv FOR SELECT * FROM employees;

  ELSIF :choice = 2 THEN

    OPEN :generic_cv FOR SELECT * FROM departments;

  ELSIF :choice = 3 THEN

    OPEN :generic_cv FOR SELECT * FROM jobs;

  END IF;

END;

END-EXEC;

当有任何光标变量指向它的时候,SQL工作区仍然是可访问的,即使是从一个范围向另一个范围。例如上例中,Proc*C程序传递宿主光标变量到嵌入的匿名PL/SQL块中。在块运行之后,光标变量仍然指向SQL工作区。

如果在客户端有PL/SQL引擎,则从客户端调用服务器没有限制。例如,可以客户端声明一个宿主光标变量,然后打开从服务器端打开和获取它,然后从客户端打开和获取它。也可以通过在PL/SQL匿名块中的一个往返中打开和关闭多个宿主光标变量,来降低网络流量。

--在宿主环境中的PL/SQL匿名块

BEGIN

    OPEN :emp_cv FOR SELECT * FROM employees;

    OPEN :dept_cv FOR SELECT * FROM departments;

    OPEN :loc_cv FOR SELECT * FROM locations;

END;

PL/SQL匿名块运行之后,光标变量仍然指向SQL工作区,所以客户端程序可以使用它。当客户端程序不再需要这些光标变量的时候,可以使用PL/SQL匿名块来关闭它们。

--宿主环境中的匿名PL/SQL

BEGIN

    CLOSE :emp_cv;

    CLOSE :dept_cv;

    CLOSE :loc_cv;

END;

这个技术对于在Oracle Form中产生多块窗体非常有用。

BEGIN

    OPEN :c1 FOR SELECT 1 FROM DUAL;

    OPEN :c2 FOR SELECT 1 FROM DUAL;

    OPEN :c3 FOR SELECT 1 FROM DUAL;

END;

注意 :如果从 OCI 客户端绑定宿主光标变量到 PL/SQL ,则除非在相同的服务器调用中打开它,否则不能在服务器端从它获取。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17013648/viewspace-1122898/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/17013648/viewspace-1122898/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值