0

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东西起作用。

4

2 回答 2

2

您可能无法以这种方式成功使用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;
于 2018-01-09T14:08:32.927 回答
0

您可以在一个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.

如果需要,类似的技术允许您插入多行。

于 2018-01-09T15:31:13.857 回答