PL / SQL中的游标

时间:2018-11-02 05:04:36

标签: oracle plsql cursor

我有 ORACLE airport_t ,其中的数据字段为

Rank,
Airport,
Location,
Country,
Code_IATA,
Code_ICAO,
Total_passenger,
Rank_change,
Percent_Change

我创建了具有单个列 AIRPORT 的表 AIRPORTS2017OO ,该表可以存储 airport_t 类型的对象。我在 Airport2017 表中有50行数据,可以使用光标将其插入表 AIRPORTS2017OO airport 列中。

我能够通过下面给出的光标在 airports2017 表中进行迭代,但是我不知道如何将数据插入 AIRPORTS2017OO 表中。

这是我从 airports2017 表中获取所有信息的解决方案

DECLARE
   rank1        NUMBER;
   airports1    VARCHAR2 (80);
   location1    VARCHAR (40);
   country1     VARCHAR (30);
   iata1        VARCHAR (3);
   icao1        VARCHAR (4);
   total_pass   NUMBER;
   rank_c       NUMBER;
   p_change     NUMBER;

   CURSOR display
   IS
      SELECT * FROM airports2017;
BEGIN
   OPEN display;

   LOOP
      FETCH display
         INTO rank1,
              airports1,
              location1,
              country1,
              iata1,
              icao1,
              total_pass,
              rank_c,
              p_change;

      IF display%FOUND
      THEN
         DBMS_OUTPUT.put_line (airports1);
      ELSE
         EXIT;
      END IF;
   END LOOP;

   CLOSE display;
END;
/

1 个答案:

答案 0 :(得分:1)

您知道自己可以做到:

INSERT INTO AIRPORTS2017OO select * from airports2017;

不是所有这些光标代码都正确吗?

无论如何,这是怎么做的:

DECLARE    
   a_data ARRAY;
   CURSOR display
   IS
      SELECT * FROM airports2017;
BEGIN
   OPEN display;

   LOOP
      FETCH display BULK COLLECT INTO a_data;

      FORALL i IN 1..a_data.COUNT
         INSERT INTO AIRPORTS2017OO VALUES a_data(i);

      IF display%FOUND
      THEN
         DBMS_OUTPUT.put_line (airports1);
      ELSE
         EXIT;
      END IF;
   END LOOP;

   CLOSE display;
END;
/