我有两个类似的查询用于工作研究,我正在尝试使用布尔变量来决定运行哪一个。
问题:
为了保存变量,我想我需要使用PL / SQL块,这似乎要求我定义结果集的每一列并批量收集到结果集中。我将此设置为我的同事的模板,其中大多数人只知道非常基本的SQL,所以我不能要求他们定义新的列。
有没有办法允许他们设置布尔变量并在PL / SQL块之外运行相应的SQL查询?有没有更好的方法呢?
我到目前为止(不起作用):
Declare Submit_Denied_Lines Boolean;
Begin Submit_Denied_Lines := True; --or false depending on their needs
If Submit_Denied_Lines = False Then
GOTO Qry_Status_X;
Else
GOTO Qry_Resolution;
END IF;
END;
<<Qry_Status_X>>
(The Status_X query)
GOTO The_End;
<<Qry_Resolution>>
(The Resolution query)
<<The_End>>
备注:
如果我要求的是不可能的,我会发布两个SQL文件供他们使用,并留下关于哪一个适用于哪种情况的说明。
感谢您的帮助。
答案 0 :(得分:0)
你遗失了很多信息。它是相同的选择,但具有不同的标准? (where子句)或完全不同的
这是一种完全不同的方法。 这是可以运行的
declare
submit_denied_lines boolean := true;
begin
if submit_denied_lines then
for i in (select 'Status_X' as t from dual) loop
dbms_output.put_line (i.t);
end loop;
else
for i in (select 'Qry_Resolution' as t from dual) loop
dbms_output.put_line (i.t);
end loop;
end if;
end;
如果select子句相同但where子句不同,那么这是一个这是可运行的
declare
submit_denied_lines boolean := true;
test char (1);
begin
/* can't use boolean in the SQL engine */
if (submit_denied_lines) then
test := '1';
else
test := '0';
end if;
for i
in (select *
from user_objects
where (user_objects.object_type = 'TABLE' and test = '1') or (user_objects.object_type = 'VIEW' and test = '0')) loop
dbms_output.put_line (i.object_name);
end loop;
end;