引用游标提取到具有不同列的行

时间:2017-05-13 10:29:47

标签: oracle cursor

我在获取引用光标时遇到问题。

假设我有“c_cursor SYS_REFCURSOR”的引用游标变量,引用游标将包含以下列的行

columnA | columnB | columnC
测试123 ABC

我有这个行类型变量“r_table TestTable%rowtype”
此行类型具有columnA,columnB和具有额外列的列C.所以它就像这样。
columnA | columnB | columnC | columnD | columnE | columnF

所以我想做的是创建一个行,其中从光标值中取出columnA,B和C,其余列给出一些硬编码值

loop
   fetch c_cursor into r_table -- but with extra value hard coded
end loop;

所以我期待的最终结果是

  columnA | columnB | columnC | columnD | columnE | columnF
测试123 ABC一些编码vlues



列A,B和C在参考光标和行类型中是相同的。

我应该创建某种时间变量来保存参考光标的值,然后将值传递到最后一行?我认为效率不高



你们能不能给我一些好主意呢?

感谢

1 个答案:

答案 0 :(得分:0)

Oracle安装程序

CREATE TABLE testTable ( A, B, C, D, E ) AS
  SELECT 'A', 1, DATE '2017-01-01', 123.2, 'DEF' FROM DUAL UNION ALL
  SELECT 'B', 2, DATE '2017-01-02', 456.5, 'GHI' FROM DUAL;

<强> PL / SQL

SET SERVEROUTPUT ON;
DECLARE
  TYPE abc_type IS RECORD(
    A testTable.A%TYPE,
    B testTable.B%TYPE,
    C testTable.C%TYPE
  );

  CURSOR c_cursor IS
    SELECT A, B, C FROM testTable;

  r_table TestTable%ROWTYPE;
  abc     ABC_TYPE;
BEGIN
  OPEN c_cursor;
  LOOP
    FETCH c_cursor INTO abc;
    EXIT WHEN c_cursor%NOTFOUND;
    r_table.A := abc.A;
    r_table.B := abc.B;
    r_table.C := abc.C;
    r_table.D := 789.7; -- Some hard-coded value
    r_table.E := 'JKL'; -- Some hard-coded value
    DBMS_OUTPUT.PUT_LINE(
      r_table.A||','||r_table.B||','||r_table.C||','||r_table.D||','||r_table.E
    );
  END LOOP;
  CLOSE c_cursor;
END;
/