2

我想知道是否有任何方法可以在 PL/SQL 过程的声明中使用 if 语句。例如:

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;

这或多或少是它的本意。

4

2 回答 2

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

光标变量

于 2012-08-27T14:12:34.740 回答
0

对不起,没有正确阅读问题。你不能在 BEGIN 之前做 IF 。

如果 C 是引用游标,您可以为 select * from table 或 select name from table 打开它,但它的意图还不够清楚,因为您应该有可能在这两种情况下处理不同的字段列表。

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

于 2012-08-27T12:37:09.310 回答