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块中,我怎么能这样做?
答案 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 COLLECT
和FORALL
。
关于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>