【问题标题】:Assign value to multiple variables in subquery为子查询中的多个变量赋值
【发布时间】:2015-11-23 12:13:43
【问题描述】:

如何使用此查询获取值:

declare 
status varchar2(4);
Num number:=0;
begin
select (SELECT  MAX(a),b from table Where (id=2) group by b) into Num from dual;
end

我必须将两个列值都分配给声明的变量。以这种方式编写查询以避免找不到数据异常。

注意:-考虑到此查询将为两列返回 1-1 值.....所以请忽略 太多行异常...

【问题讨论】:

  • 如果查询返回多条记录,则需要使用集合,请参见此处的示例stackoverflow.com/questions/33840685/…
  • 如果实际上没有要获取的数据,为什么您不想获得NO_DATA_FOUND 异常?
  • 一般来说,如果你发现自己写了一个钝的sql语句(比如上面的)只是为了避免不得不处理一个错误,那么你可能是在为自己做一根棍子。尝试维护此类代码的人(包括您自己!)会想知道您在编写它时的想法。
  • 如果您期望不止一行,您将需要一个集合。如果需要存储多个值,则需要另一个变量。
  • 另外,一旦您获得查询结果,您将如何处理它们?

标签: oracle plsql oracle11g plsqldeveloper


【解决方案1】:

您的查询将返回错误消息:值太多。内联选择只能返回 1 个值,不能返回 2 个。 要解决这个问题,可以这样写:

declare
   v_max number;
   v_b   table.b%type;
begin
   select max(a)
         ,b
     into v_max
         ,v_b
     from table
    where id = 2
    group by b;
   -- do something with the selected values

exception
   when no_data_found then
   -- do something when no record with ID=2 is available.

end;

但整个事情有点令人费解,因为选择是在 ID=2 上,这表明这是一个主键列,最多只会返回 1 行。

【讨论】:

  • Rene:感谢您的回答。但是,我们将在 where 子句中添加更多条件。因此,它只会返回单行。我们对此很确定...
猜你喜欢
  • 2015-01-27
  • 2017-11-29
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多