如果我得到的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
列。
类似的技术允许您在需要时插入几行。