如何将 is 的结果存储到 Oracle SQL 中的变量中

问题描述 投票:0回答:1

我需要将带有 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:

   ;
sql oracle variable-assignment
1个回答
0
投票

嗯,你有多种选择;这是其中一些。

样本数据(基于 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>
© www.soinside.com 2019 - 2024. All rights reserved.