PLEG选择BEGIN块中的查询

时间:2014-11-13 04:13:15

标签: oracle plsql

CREATE OR REPLACE PROCEDURE validate_date
AS

strABC DATE;
strDummy VARCHAR2(20);

CURSOR C_Example IS SELECT * from dummytable;

BEGIN    

    FOR R_Example IN C_RetNxWeek LOOP
      strABC := R_RetNxWeek.something;
      strDummy := R_RetNxWeek.something;

    END LOOP;


      IF (something < something) THEN 

      ELSE
         strDummy:= SELECT * FROM sometable WHERE something = something;  <-----alternative to do this?

      END IF;       
 END validate_date;

我有一个非常基本的存储过程模板,如上所述,我有一个游标将从表中选择一些记录,在BEGIN块的IF ELSE语句中,我希望通过选择一个表来检查数据,因为我不能把光标放在BEGIN块中,我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

无法按照您的说明存储select语句结果, 它应该通过

完成

应该使用INTO条款,请参阅https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/returninginto_clause.htm

答案 1 :(得分:0)

不需要显式游标,请使用CURSOR FOR LOOP。我不知道您的要求,因为我认为可以使用普通SQL来完成。但是,如果您确实想使用PL/SQL,则可以使用BULK COLLECTFORALL

关于SELECT,您需要在INTO中使用PL/SQL条款。

SQL> DECLARE
  2    eno       NUMBER;
  3    STR_DUMMY VARCHAR2(20);
  4  BEGIN
  5    FOR i IN
  6    (SELECT * FROM emp
  7    )
  8    LOOP
  9      eno := i.empno;
 10      dbms_output.put_line(eno);
 11    END LOOP;
 12    SELECT ENAME INTO STR_DUMMY FROM EMP WHERE EMPNO = 7788;
 13    dbms_output.put_line(STR_DUMMY);
 14  END;
 15  /
7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934
SCOTT

PL/SQL procedure successfully completed.

SQL>