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语句,查出来的是一个集合还是一个值??
这个查询的是一条记录还是一个数据集?
如果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 过程已成功完成。