sql存储过程中的IF-else条件

sql存储过程中的IF-else条件,sql,oracle,Sql,Oracle,我正在尝试编译存储过程: create procedure checkFroud2(code IN varchar2, p_recordset OUT SYS_REFCURSOR) AS BEGIN OPEN p_recordset FOR if code='C' then select * from emp //dbms_output.putline('this is if block') else if code='F' then dbms_output.putline('this i

我正在尝试编译存储过程:

create 
procedure checkFroud2(code IN varchar2, p_recordset OUT SYS_REFCURSOR)
AS
BEGIN
OPEN p_recordset FOR

if code='C' then 
select * from emp
//dbms_output.putline('this is if block')
else if code='F' then
dbms_output.putline('this is else block')
else
dbms_output.putline('last else')
end if;
end checkFroud2;

但这显示了编译时错误。有人能告诉我问题出在哪里吗?

否则,如果不存在,请使用
ELSIF
,同时在
dbms\u output.putline('this is IF block')
使用
ELSIF
而不是
ELSE IF
之前删除
/
。通过使用
ELSE IF
您正在打开一个新的嵌套
IF
-块,您没有关闭它。

两个错误: 1为???为什么?? 2ELSIF和NOT ELSIF 三。在哪里

CREATE PROCEDURE CHECKFROUD2 ( CODE        IN   VARCHAR2,
                         P_RECORDSET         OUT SYS_REFCURSOR )
AS
BEGIN
    OPEN P_RECORDSET FOR SELECT * FROM DUAL;

    IF CODE = 'C'
    THEN
        SELECT * FROM EMP;
    ELSIF CODE = 'F'
    THEN
        DBMS_OUTPUT.PUTLINE ( 'this is else block' );
    ELSE
        DBMS_OUTPUT.PUTLINE ( 'last else' );
    END IF;
END CHECKFROUD2;

这是oracle 11g中的一个示例

CREATE OR REPLACE PROCEDURE PROC_EMP_CHECK 
(
  EMPNO1 IN NUMBER 
, EMPNO2 IN NUMBER 
) 
AS 
EMPONE_NOT_EXISTS EXCEPTION;
EMPTWO_NOT_EXISTS EXCEPTION;
BOTHEMP_NOT_EXISTS EXCEPTION;
EMPCOUNT1 NUMBER;
EMPCOUNT2 NUMBER;
BEGIN

  SELECT COUNT(1) INTO EMPCOUNT1 FROM EMPLOYEES WHERE EMPLOYEE_ID=EMPNO1;
  SELECT COUNT(1) INTO EMPCOUNT2 FROM EMPLOYEES WHERE EMPLOYEE_ID=EMPNO2;
  BEGIN
  IF( EMPCOUNT1=0 AND EMPCOUNT2=0)THEN 
    RAISE BOTHEMP_NOT_EXISTS;
  ELSIF ( EMPCOUNT1=0) THEN 
    RAISE EMPONE_NOT_EXISTS;
   ELSIF ( EMPCOUNT2=0) THEN 
    RAISE BOTHEMP_NOT_EXISTS;
    dbms_output.put_line('ELSE BLOCK');
   END IF; 
  END;

  EXCEPTION
  WHEN EMPONE_NOT_EXISTS THEN 
  dbms_output.put_line('EMP One not exit');
  WHEN EMPTWO_NOT_EXISTS THEN 
  dbms_output.put_line('EMP two not exit');
  WHEN BOTHEMP_NOT_EXISTS THEN 
  dbms_output.put_line('both not exit');
  WHEN OTHERS THEN 
  dbms_output.put_line(SQLERRM);
END PROC_EMP_CHECK;

你为什么要投反对票?你对问题或答案有什么问题吗?
CREATE
PROCEDURE checkFroud2(
          code IN VARCHAR2,
          p_recordset OUT SYS_REFCURSOR)
AS
BEGIN
     IF code='C' THEN
     dbms_output.put_line('this is if block');
     OPEN p_recordset FOR        
     SELECT * FROM emp;
     ELSIF code='F' THEN

     --you can open p_recordset with dummy as
     /*open p_recordset for select * from dual where 1 = 0; */
          dbms_output.put_line('this is else block');

     ELSE
     /*open p_recordset for select * from dual where 1 = 0; */
          dbms_output.put_line('last else');
     END IF;
END checkFroud2;
/

var o refcursor;
BEGIN
CHECKfroud2
('C',:o);

END;
/

PRINT O;
CREATE OR REPLACE PROCEDURE PROC_EMP_CHECK 
(
  EMPNO1 IN NUMBER 
, EMPNO2 IN NUMBER 
) 
AS 
EMPONE_NOT_EXISTS EXCEPTION;
EMPTWO_NOT_EXISTS EXCEPTION;
BOTHEMP_NOT_EXISTS EXCEPTION;
EMPCOUNT1 NUMBER;
EMPCOUNT2 NUMBER;
BEGIN

  SELECT COUNT(1) INTO EMPCOUNT1 FROM EMPLOYEES WHERE EMPLOYEE_ID=EMPNO1;
  SELECT COUNT(1) INTO EMPCOUNT2 FROM EMPLOYEES WHERE EMPLOYEE_ID=EMPNO2;
  BEGIN
  IF( EMPCOUNT1=0 AND EMPCOUNT2=0)THEN 
    RAISE BOTHEMP_NOT_EXISTS;
  ELSIF ( EMPCOUNT1=0) THEN 
    RAISE EMPONE_NOT_EXISTS;
   ELSIF ( EMPCOUNT2=0) THEN 
    RAISE BOTHEMP_NOT_EXISTS;
    dbms_output.put_line('ELSE BLOCK');
   END IF; 
  END;

  EXCEPTION
  WHEN EMPONE_NOT_EXISTS THEN 
  dbms_output.put_line('EMP One not exit');
  WHEN EMPTWO_NOT_EXISTS THEN 
  dbms_output.put_line('EMP two not exit');
  WHEN BOTHEMP_NOT_EXISTS THEN 
  dbms_output.put_line('both not exit');
  WHEN OTHERS THEN 
  dbms_output.put_line(SQLERRM);
END PROC_EMP_CHECK;