PL / SQL如果在声明内部

时间:2012-08-27 11:50:07

标签: if-statement plsql header declaration plsqldeveloper

我想知道是否有任何方法在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;

这或多或少是它的用意。

2 个答案:

答案 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子句的列,您必须决定使用强类型或弱类型的游标变量。

Cursor Variables

答案 1 :(得分:0)

请原谅,没有正确地阅读这个问题。你不能在BEGIN之前做IF。

如果C是引用游标,你可以打开它来从表中选择*或从表中选择名称,但它的意图不够明确,因为你应该有可能在两种情况下处理不同的字段列表

Oracle的示例:http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/sqloperations.htm#BABFEJED