【发布时间】:2017-07-26 14:29:30
【问题描述】:
我想将动态 sql 查询中的行收集到 pl/sql 行中。问题是查询是动态构建的,我不确定所有列都会在那里。结果集基于我的数据库中的一个表(示例中的 t1)+ 一个附加列(示例中的 sid)。动态创建这种记录类型并从动态 sql 中获取记录似乎是不可能的。
PLS-00597:INTO 列表中的表达式“t_row”类型错误
是否可以通过其他方式做到这一点?
请注意代码已被简化以方便阅读:
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 表吗?无论如何,您应该使用 rec_type 中的 t_row.sid
-
@Frank 我更新了 DBMS_OUTPUT 行,以更清楚地表明我想访问 t1 表中的任何列(因此 rec_type 中的 t1%ROWTYPE)。