DECLARE
TYPE t IS RECORD (
col_name VARCHAR2 (100)
);
t_row t;
cname VARCHAR (100) := 'col_name';
BEGIN
t_row.col_name := 'col';
DBMS_OUTPUT.put_line ('out');
IF t_row.cname IS NULL THEN
DBMS_OUTPUT.put_line ('in');
END IF;
END;
第1行的错误
ORA-06550:第12行,第12栏:
PLS-00302:组件'CNAME'必须声明为
ORA-06550:第12行,第3栏:
PL / SQL:忽略语句
如何将动态列名分配给记录的类型变量?
答案 0 :(得分:2)
你可以用动态sql做到这一点:
为了使示例更简单,我将使您的类型成为架构对象(但基本上您不必 - 您也可以将它放在动态部分中)
create or replace type t is object(col_name varchar2(100));
/
然后你可以看一下这个脚本:
declare
t_row t;
cname varchar2(100) := 'col_name';
begin
t_row := new t('col');
execute immediate 'declare t_in t := :0; begin if t_in.' || cname ||
' is null then dbms_output.put_line(''in''); end if; end;'
using t_row;
end;
但是,我必须说,这是一个奇怪的要求......
答案 1 :(得分:1)
错误是因为record t
没有字段cname
,但是col_name
:
type t is record (
col_name varchar2(100)
);
在编译期间必须知道记录字段。
可以告诉我们你要解决的真正问题是什么?