oracle 多行语句怎么写,Oracle开发动态SQL3(处理多行查询语句)

动态SQL...干嘛弄得这么复杂呢?

使用EXECUTE

IMMEDIATE只能处理单行查询语句,为了动态地处理SELECT语句所返回的多行数据,需要使用OPEN-FOR,FETCH和CLOSE语句。

动态地处理SELECT语句返回多行数据步骤如下

定义游标变量>打开游标变量>循环提取数据>关闭游标变量

1.定义游标变量

因为动态地处理多行查询需要使用游标变量来完成,所以首先需要在定义部分定义游标变量

TYPE 游标变量类型 IS REF CURSOR;

游标变量名 游标变量类型;

2.打开游标变量

在定义了游标变量之后,就可以在执行部分使用OPEN-FOR语句来打开游标变量。当打开游标变量时,会执行游标变量所对应的SELECT语句,并将查询结果存放到游标结果集中。

OPEN 游标变量名 FOR 动态的SELECT语句

[USING bind_argument]

(bind_argument用于指定存放传递给动态SELECT语句值的变量。)

3.循环提取数据

在打开游标变量之后,查询结果已经被存放到游标结果集中。为了取得游标结果集中的所有数据,需要使用FEATH语句提取数据

4.关闭游标变量

CLOSE 游标变量名

5.多行查询示例

下面以动态输入部门号,显示特定部门的所有雇员名称和工资为例:

DECLARE

TYPE empcurtyp IS CURSOR;

emp_cv empcurtyp;

emp_record emp%ROWTYPE;

sql_stat VARCHAR(100);

BEGIN

sql_stat=:'SELECT * FROM emp WHERE deptno=:dno';

OPEN emp_cv FOR sql_stat USING &dno;

LOOP

FETCH emp_cv INTO emp_record;

EXIT WHEN emp_cv%NOTFOUND;

dbms_output.put_line('雇员名:'||emp_record.ename||'工资'||emp.record.sal);

END LOOP;

CLOSE emp_cv;

END;

/

输入dno的值:10

xxxxx

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值