PL / SQL - 查询返回多个ROW

时间:2014-04-25 12:26:35

标签: plsql oracle-sqldeveloper

我使用plsql执行返回一组记录,然后根据结果更新此记录..我被卡住了......

因为我的SELECT语句返回超过1行。那么我该如何将所有行返回到VARIABLE中..因为我不断得到以下错误:PL / SQL:ORA-00947:没有足够的值

附件是代码片段。

BEGIN

-- Set Variables

v_ArchivedDate := '01-JAN-14'; -- Enter Variable
v_Results := '0';

-- This get current date/time minus 31 days ago
SELECT TO_CHAR(systimestamp-31, 'DD-MON-YY HH.MI.SS') INTO v_ArchivedDate 
FROM dual;


dbms_output.put_line('Date to Set Archived_At Column :' || ' ' || v_ArchivedDate); 

这是脚本似乎失败的上述错误

          SELECT * INTO v_results
          FROM message
          WHERE from_entity IN
          (SELECT entity_id FROM user_info
          WHERE UPPER(directory_auth_id) = 'USER100');

我是plsql的新手,所以在mo的学习曲线上......

所以我需要选择某种GROUPSET / ARRAY等等。不确定。

谢谢你的期待。 Boardman

1 个答案:

答案 0 :(得分:0)

假设您的消息表有列文本,您可以使用以下内容:

DECLARE
 TYPE t_results IS TABLE OF VARCHAR2(50) INDEX BY pls_integer;
 v_results t_results;
BEGIN
SELECT text BULK COLLECT INTO v_results
          FROM message
          WHERE from_entity IN
          (SELECT entity_id FROM user_info
          WHERE UPPER(directory_auth_id) = 'USER100');
FOR i IN v_results.FIRST .. v_results.LAST
LOOP
   dbms_output.put_line(v_results(i));
END LOOP;
END;