“Into”语句可以将多个结果写入列类型变量吗?
Posted
技术标签:
【中文标题】“Into”语句可以将多个结果写入列类型变量吗?【英文标题】:Can an "Into" statement write multiple results to a column type variable? 【发布时间】:2017-07-27 19:35:24 【问题描述】:我有一个函数声明一个像这样的变量:
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”是否能够保存所有结果?
【问题讨论】:
是的,有可能,什么 rdms? en.wikipedia.org/wiki/Relational_database_management_system oracle.com/technetwork/issue-archive/2013/13-mar/… @IlyaBursov 听起来好像不行:“如果 SELECT 语句标识要获取多行,Oracle 数据库将引发 TOO_MANY_ROWS 异常。”Using the Cursor FOR Loop
【参考方案1】:
select into 会抛出 TOO_MANY_ROWS 错误。如果要存储选择查询的多个结果,请使用游标。
例如:open cur_values for
select value_key
from (table)
where (Conditions);
将携带与选择查询匹配的所有记录。
【讨论】:
【参考方案2】:没有。
如果您希望从查询中获得更多记录,您可以使用循环结果集或 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。
【讨论】:
以上是关于“Into”语句可以将多个结果写入列类型变量吗?的主要内容,如果未能解决你的问题,请参考以下文章
PostgreSQL使用select into时有无STRICT关键字的区别