我想从动态sql查询中将行收集到pl/sql行中。问题是查询是动态构建的,我不确定所有列将在那里。结果集基于我DB中的表(示例中的t1)+一个附加列(示例中为sid)。似乎不可能动态创建此记录类型并从动态sql中将记录取出。动态构建记录类型以获取到
PLS-00597:表达式“t_row”在INTO列表是错误的类型
是有可能做到这一点任何其他方式?
请注意代码已被简化为方便阅读:
DECLARE
v_query_string VARCHAR2(32767 BYTE);
TYPE ref_cursor IS REF CURSOR;
cur ref_cursor;
TYPE rec_type IS RECORD (
sid number,
struct t1%ROWTYPE);
t_row rec_type;
BEGIN
--build v_query_string -> select sid,t1.a,t1.b,t1.c,t1.some_column_from_t1 from t1
OPEN cur FOR v_query_string;
LOOP
FETCH cur INTO t_row;
EXIT WHEN cur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(t_row.some_column_from_t1);
END LOOP;
CLOSE cur;
END;
你可以显示你的DDL表吗?无论如何,你应该使用** t_row.sid **这是在** rec_type ** – Frank
@Frank我更新了DBMS_OUTPUT行,以便更清楚地表明我想从t1表中访问任何列(因此t1_rec_type中的%ROWTYPE )。 – JochenDB