可以"进入"语句将多个结果写入列类型变量?

时间:2017-07-27 19:35:25

标签: sql oracle plsql

我有一个声明如下变量的函数:

FUNCTION functionName((input_value) IN INTEGER) RETURN INTEGER IS

...
value_key_in   (database_name)(table_name).value_key%type;

并使用此Select语句写入此值:

select value_key
into value_key_in
from (table)
where (Conditions);

如果(条件)为Value_Key返回多个有效结果,则" value_key_in"能把它们全部拿走吗?

2 个答案:

答案 0 :(得分:1)

select into会抛出TOO_MANY_ROWS错误。如果要存储选择查询的多个结果,请使用游标。

例如:open cur_values for select value_key from (table) where (Conditions);

将包含与选择查询匹配的所有记录。

答案 1 :(得分:0)

没有

如果您希望从查询中获取更多记录,则可以使用循环结果集或BULK COLLECT子句。

使用BULK COLLECT,您可以将更多记录提取到PL / SQL集合中。

请参阅以下示例(来自this OTN article)并注意l_employees数据类型:

PROCEDURE process_all_rows
IS
   TYPE employees_aat 
   IS TABLE OF employees%ROWTYPE
      INDEX BY PLS_INTEGER;
   l_employees employees_aat;
BEGIN
   SELECT *
   BULK COLLECT INTO l_employees
      FROM employees;

   FOR indx IN 1 .. l_employees.COUNT 
   LOOP
       analyze_compensation 
      (l_employees(indx));
   END LOOP;
END process_all_rows;

另见本文:Bulk Processing with BULK COLLECT and FORALL