select priority into v_vpn_priority from djb_tab_vpnprcplnpriority where prcplnid =c1.prcplnid;
if (v_vpn_priority > 0) then
rd_prcpln.v_priority := v_vpn_priority;
end if;
根据上面这个例子:
select priority into v_vpn_priority from djb_tab_vpnprcplnpriority where prcplnid =c1.prcplnid;1、在执行完select语句,查出来的是一个集合还是一个值??
if (v_vpn_priority > 0) then
rd_prcpln.v_priority := v_vpn_priority;
end if;
根据上面这个例子:
select priority into v_vpn_priority from djb_tab_vpnprcplnpriority where prcplnid =c1.prcplnid;1、在执行完select语句,查出来的是一个集合还是一个值??
解决方案 »
- Oracle存储过程问题
- 如何动态调用exp命令?将导出文件名命名为当前时间。
- 在ms sql2000中用的case when 查询如果改为oracle该如何写?
- 一个字段里,部分中文正常,部分中文乱码,如何能将乱码的记录选出来?
- 我总是丢了分得不到回复,回复别人的问题又得不上分
- oracle数据库面试题(来抢分吧!)
- oracle9i导结构到powerdesigner11表或视图不存在
- 请教高手,我在sqlplus执行一个创建触发器的脚本,但却执行不到结束,那位能告诉我为什么?
- !!!数据库设计问题!!!
- 求救,关于ORALCE的批处理文件问题?
- 麻烦看下C#操作Blob出现的问题
- 求条统计成绩的sql
这个查询的是一条记录还是一个数据集?
如果priority 只是一个列值,并且条件where prcplnid =c1.prcplnid 可以确定查出的只是一条记录的话就是一个值,如果查出来的是多条记录,那就是一个结果集如果是结果集的话,rd_prcpln.v_priority := v_vpn_priority;
这一句就有问题了。好像需要用循环一条条处理。一般存储过程里都是一条条的处理的。
这种方式为隐式游标,要求返回一个值。如果返回多个值或者没有值,都会产生异常。当然,可以使用集合变量而返回多个值
SQL> set serveroutput on;
SQL>
SQL> DECLARE
2 --声明集合类型
3 TYPE t_arr IS TABLE OF VARCHAR2(20);
4 --声明集合变量
5 v_arr t_arr := t_arr();
6 BEGIN
7 --给集合变量赋值
8 SELECT ename BULK COLLECT INTO v_arr FROM emp;
9 --输出集合并量值
10 FOR i IN 1 .. v_arr.count LOOP
11 dbms_output.put_line(v_arr(i));
12 END LOOP;
13 END;
14 /
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLERPL/SQL 过程已成功完成。