我在获取引用光标时遇到问题。
假设我有“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在参考光标和行类型中是相同的。
我应该创建某种时间变量来保存参考光标的值,然后将值传递到最后一行?我认为效率不高
你们能不能给我一些好主意呢?
感谢
答案 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;
/