在触发器中,我有以下SQL行:
select p.place
into place
from places p
where p.prime_commodity = p_Comm;
for x in (select * from some_table s where s.place = place)
这将返回中的每一行
some_table
,不按“位置”过滤任何内容,并遗漏了一些应该在那里的行。
不过,这工作得很好:
for x in (select * from some_table s where s.place = 'ABC')
例子:
some_table
:
地点
|
原地
|
InsState
|
*
|
*
|
A.
|
*
|
基础知识
|
A.
|
基础知识
|
*
|
D
|
基础知识
|
基础知识
|
A.
|
代码:
select '*'
into place
from places p
where p.prime_commodity = p_Comm -- doesn't matter, select '*' into place will select only '*',
select listagg(s.place || ' ' || s.insplace || ' ' || s.insstate, chr(10)) within group (order by txt)
into dummy from some_table s
where s.place = place; -- <-- doesn't work
raise_application_error(-20001,place || chr(10) || dummy); -- only for debugging in trigger
预期:
*
* * A
* ABC A
实际结果:
*
* * A
* ABC A
ABC * D
ABC ABC A
(无论如何,所有行,“where s.place=place”都可以注释,结果甚至不会改变)
它能修好吗?我错过了什么?难道那个地方是“*”符号吗?是否因为某种原因,oracle将其用作触发器内的“任何”符号?
在正常的SQL窗口中,它的任何一个都像它应该的那样工作,只有在触发器中它才会做这种恶作剧。
在我使用之前:
CONTINUE when x.place <> place;
在for循环开始时,但现在它没有返回一些应该返回的行,结果如下
*
* * A <- wheres "* ABC A" row?
ABC * D
ABC ABC A
我也试过:
select *
from some_table s
where s.place = place
在触发器中
预期:s.place=place的行
结果:所有行