我需要将带有 ID 的选择查询的结果存储到变量中并在稍后使用它。 我已经尝试过这个:
DECLARE
CURSOR commit_ids IS
SELECT COMMIT_ID FROM JV_COMMIT WHERE COMMIT_DATE < (CURRENT_TIMESTAMP - INTERVAL '5' day);
但是我收到以下错误:
SQL Error [6550] [65000]: ORA-06550: line 3, column 80:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
;
嗯,你有多种选择;这是其中一些。
样本数据(基于 Scott 的
EMP
表):
SQL> SELECT * FROM jv_commit;
COMMIT_ID ENAME COMMIT_DAT
---------- ---------- ----------
7369 SMITH 17.12.1980
7499 ALLEN 20.02.1981
7521 WARD 22.02.1981
SQL> SET SERVEROUTPUT ON
SQL>
SQL> DECLARE
2 CURSOR commit_ids IS
3 SELECT commit_id
4 FROM jv_commit
5 WHERE commit_date < (CURRENT_TIMESTAMP - INTERVAL '5' DAY);
6
7 commit_ids_r commit_ids%ROWTYPE;
8 --
9 t_commit_ids SYS.odcinumberlist;
10 --
11 rc SYS_REFCURSOR;
12 l_commit_id jv_commit.commit_id%TYPE;
13 BEGIN
14 DBMS_OUTPUT.put_line ('CURSOR ------');
15
16 FOR commit_ids_r IN commit_ids
17 LOOP
18 DBMS_OUTPUT.put_line (commit_ids_r.commit_id);
19 END LOOP;
20
21 --
22
23 DBMS_OUTPUT.put_line ('COLLECTION -----');
24
25 SELECT commit_id
26 BULK COLLECT INTO t_commit_ids
27 FROM jv_commit
28 WHERE commit_date < (CURRENT_TIMESTAMP - INTERVAL '5' DAY);
29
30 FOR i IN t_commit_ids.FIRST .. t_commit_ids.LAST
31 LOOP
32 DBMS_OUTPUT.put_line (t_commit_ids (i));
33 END LOOP;
34
35 --
36
37 DBMS_OUTPUT.put_line ('REF CURSOR -----');
38
39 OPEN rc FOR SELECT commit_id
40 FROM jv_commit
41 WHERE commit_date < (CURRENT_TIMESTAMP - INTERVAL '5' DAY);
42
43 LOOP
44 FETCH rc INTO l_commit_id;
45
46 EXIT WHEN rc%NOTFOUND;
47 DBMS_OUTPUT.put_Line (l_commit_id);
48 END LOOP;
49 END;
50 /
CURSOR ------
7369
7499
7521
COLLECTION -----
7369
7499
7521
REF CURSOR -----
7369
7499
7521
PL/SQL procedure successfully completed.
SQL>