将单个值与 Oracle PL/SQL 中存储在游标中的值列表进行比较



如果我得到的VALUE大于游标中的每个值,我想执行插入语句。请看以下内容:

我得到了一个非常标准的光标,其中包含日期值列表:

set REF_CUR cursor for select BIRTHDAY from PEOPLE_TABLE where school='middle';
IF VALUE>ALL(REF_CUR)
   insert something into something;
END IF;

所以我知道这个游标只包含一列BIRTHDAY,其中有许多行,我想知道它们是否都大于VALUE,我无法使ALL工作。

您可能无法以这种方式成功使用ALL函数,可能会收到以下错误:

PLS-00204:函数或伪列">ALL"只能在 SQL 语句中使用

但你不需要它。我建议您使用max功能:

select max(BIRTHDAY)
  into l_max_birthday 
  from PEOPLE_TABLE 
 where school='middle';
if VALUE > l_max_birthday then
  insert something into something;
end if;

您可以在一个insert ... select ...语句中做到这一点:

insert into something (...)
select <some values>
  from PEOPLE_TABLE 
 where school = 'middle'
having VALUE > max(BIRTHDAY);

如果VALUE超过BIRTHDAY列的最大值,则此SELECT语句返回 1 行,该行将立即插入。否则,查询返回 0 行,将插入 0 行。

<some values>可以是静态值或变量,而不仅仅是PEOPLE_TABLE列。

类似的技术允许您在需要时插入几行。

最新更新