我想了解如何根据作为过程输入接收的表名动态创建记录类型。
例如:
PROCEDURE xxtest(p_table_name IN VARCHAR2)
IS
TYPE t_test_type IS TABLE OF p_table_name%ROWTYPE;
v_test_type t_test_type;
BEGIN
NULL;
END;
答案 0 :(得分:0)
如果我在你家,我会尝试做类似的事情。
create table test_table (f1 number, f2 number);
insert into test_table (f1,f2) values (0,1);
insert into test_table (f1,f2) values (2,3);
select * from test_table
declare
PROCEDURE xxtest(p_table_name IN VARCHAR2) IS
vSql varchar2(4000);
BEGIN
vSql := 'declare ';
vSql := vSql || 'TYPE t_test_type IS TABLE OF '||p_table_name||'%ROWTYPE; ';
vSql := vSql || 'v_test_type t_test_type; ';
vSql := vSql || 'begin ';
vSql := vSql || 'select a1.f1, a1.f2 ';
vSql := vSql || 'bulk collect into v_test_type ';
vSql := vSql || 'from '||p_table_name||' a1; ';
vSql := vSql || 'for i in v_test_type.first..v_test_type.last ';
vSql := vSql || 'loop ';
vSql := vSql || 'dbms_output.put_line(v_test_type(i).f1||'' ''||v_test_type(i).f1); ';
vSql := vSql || 'end loop; ';
vSql := vSql || 'end; ';
dbms_output.put_line(vSQL);
execute immediate vSQL;
END;
begin
xxtest('test_table');
end;
但是实际上我花了将近一个小时,这对面试来说确实是一个糟糕的问题...
可能是他们不想与您合作吗?:)