我想知道是否有任何方法在PL / SQL过程的声明中包含if语句。 E.g:
procedure testing (no IN NUMBER, name IN VARCHAR2) IS
if no = 0 then
cursor c is
select * from table where name = name;
else
cursor c is
select * from table where name = name;
end if;
BEGIN
--work with cursor c
END testing;
这或多或少是它的用意。
答案 0 :(得分:1)
不,您只能在声明部分中进行变量声明和初始化。
您可以使用游标变量(REF CURSOR
类型)并从可执行块中打开游标:
procedure testing (no IN NUMBER, name IN VARCHAR2) IS
TYPE YOUR_CURSOR_TYPE IS REF CURSOR;
c YOUR_CURSOR_TYPE;
BEGIN
--work with cursor c
if no = 0 then
OPEN c FOR
select * from table where name = name;
else
open c FOR
select * from table where name = name;
end if;
... do something with c
END testing;
根据select
子句的列,您必须决定使用强类型或弱类型的游标变量。
答案 1 :(得分:0)
如果C是引用游标,你可以打开它来从表中选择*或从表中选择名称,但它的意图不够明确,因为你应该有可能在两种情况下处理不同的字段列表
Oracle的示例:http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/sqloperations.htm#BABFEJED