Oracle 动态解析到引用游标

Oracle 动态解析到引用游标,oracle,plsql,Oracle,Plsql,我试图动态解析游标的值,如下所示 create or replace PROCEDURE test( PI_JANUS_ID IN VARCHAR2, PO_dummy out Types.CursorType )AS PO_ACTUALCUROSR Types.CursorType; cur_row tab%ROWTYPE; val1 varchar2(100); val2 varchar2(200); BEGIN open PO_ACTUALCUROSR for select * from

我试图动态解析游标的值,如下所示

create or replace
PROCEDURE test(
PI_JANUS_ID IN VARCHAR2,
PO_dummy out Types.CursorType
)AS
PO_ACTUALCUROSR Types.CursorType;
cur_row tab%ROWTYPE;
val1 varchar2(100);
val2 varchar2(200);
BEGIN
 open PO_ACTUALCUROSR for select * from tab;

  LOOP
    FETCH PO_ACTUALCUROSR into cur_row;
    EXIT WHEN PO_ACTUALCUROSR%NOTFOUND;
    val1 := 'TNAME';
    SELECT 'cur_row.'||val1 INTO val2 FROM DUAL;
    dbms_output.put_line('Column Value ' || val2); 
  END LOOP ;
  CLOSE PO_ACTUALCUROSR;
END;
如果你看到了,我就给cur_row打电话。获取值,但在这里,我在变量(val1)中有列名。那么我将如何从游标中获取值

如果执行上面的块,我会看到“cur_row.TNAME”,但实际上我需要光标中的值

有没有办法做到这一点

非常感谢您的帮助。

就这样做吧

BEGIN
 open PO_ACTUALCUROSR for select * from tab;

  LOOP
    FETCH PO_ACTUALCUROSR into cur_row;
    EXIT WHEN PO_ACTUALCUROSR%NOTFOUND;
    val2 := cur_row.tname;
    dbms_output.put_line(val2);
  END LOOP ;
  CLOSE PO_ACTUALCUROSR;
end;

直接也会起作用

p、 s.你的变量

val2 varchar2(200);
不如

val2 tab.tname%type;
如果您说您需要在不知道列名的情况下动态地拉取列,那么您必须使用动态sql,并且当您使用pl/sql数组时,我们需要将其放入包规范中,以便我们可以引用它(因为您无法将仅pl/sql类型传递到动态sql中)

照办

BEGIN
 open PO_ACTUALCUROSR for select * from tab;

  LOOP
    FETCH PO_ACTUALCUROSR into cur_row;
    EXIT WHEN PO_ACTUALCUROSR%NOTFOUND;
    val2 := cur_row.tname;
    dbms_output.put_line(val2);
  END LOOP ;
  CLOSE PO_ACTUALCUROSR;
end;

直接也会起作用

p、 s.你的变量

val2 varchar2(200);
不如

val2 tab.tname%type;
如果您说您需要在不知道列名的情况下动态地拉取列,那么您必须使用动态sql,并且当您使用pl/sql数组时,我们需要将其放入包规范中,以便我们可以引用它(因为您无法将仅pl/sql类型传递到动态sql中)


我真的不明白这一点,因为val1和val2都是在过程中声明的局部变量(甚至没有参数),所以为什么它们不能直接包含在光标(PO_ACTUALCUROSR)操作的“SELECT*FROM tab”查询中呢,我的实际问题是我有一个游标,但只有当我从另一个表中选择列名时,我才知道在运行时从游标中选择哪一列。另外,要添加从中获取游标的源表,有550列。为什么不从DUAL将
SELECT cur_row.TNAME写入val2?我不太明白这一点,因为val1和val2都是在过程中声明的局部变量(甚至没有参数),所以为什么它们不能直接包含在光标(PO_ACTUALCUROSR)操作的“SELECT*FROM tab”查询中?这只是我给出的一个示例,我的实际问题是我有一个游标,但只有当我从另一个表中选择列名时,我才知道在运行时从游标中选择哪一列。另外,要添加从中获取游标的源表,有550列。为什么不从DUAL将
SELECT cur_row.TNAME写入val2?这是一个完美的答案。我的问题解决了。谢谢Tona这是一个完美的答案。我的问题解决了。非常感谢