【问题标题】:Can an "Into" statement write multiple results to a column type variable?“Into”语句可以将多个结果写入列类型变量吗?
【发布时间】: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”是否能够保存所有结果?

【问题讨论】:

标签: sql oracle plsql


【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-05
      • 2018-07-31
      • 2012-08-05
      • 1970-01-01
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多