select po_no
into v_po_no
from po, po_det
where po_id = p_det_id
and (po_no = :block.po_no or po_no is null); --> this substitutes your IF
再一次:对我来说,不清楚po_no到底是什么(列?块字段?变量?),但这或多或少是您可能需要做的。
[编辑#2]
动态SQL:
declare
str varchar2(500);
result number;
begin
str := 'select po_no from po, po_det where po_id = p_det_id ' ||
case when po_no is not null then ' and po_no = :a'
end;
execute immediate str into result using :block.po_no;
end;
1条答案
按热度按时间pbpqsu0x1#
将
str
连接到查询的其余部分。注意前导空间(
AND
前面):你没有解释你将在哪里使用 * 动态WHERE子句 *;如果要筛选从数据块中提取的行,请考虑使用
SET_BLOCK_PROPERTY
内置及其ONETIME_WHERE
(或DEFAULT_WHERE
)属性(在Oracle Online Help system中了解有关它的详细信息)。[编辑]
我仍然不确定这个查询中的内容是什么,但是-对我来说-看起来好像你根本不需要
IF
,但是使用看起来像这样的查询:再一次:对我来说,不清楚
po_no
到底是什么(列?块字段?变量?),但这或多或少是您可能需要做的。[编辑#2]
动态SQL: