【发布时间】:2015-12-12 17:54:32
【问题描述】:
我正在尝试打印我们不知道列名的多表行。我从一天开始就在尝试这个,我想出了这个程序,但出现错误“必须声明 emp_dummy_col”。请帮帮我。 谢谢。
create or replace procedure sp_display
as
CURSOR cur_emp is select EMP_ID,EMP_NAME,DEPT_IT,DOJ,LOCATION from employee;
emp_rows cur_emp%rowtype;
type emp_table is table of emp_rows%type;
emp_dummy_table emp_table;
CURSOR cur_col is select column_name from user_tab_cols where table_name ='EMPLOYEE';
emp_row cur_col%rowtype;
type emp_table1 is table of emp_row%type;
emp_dummy_col emp_table1;
begin
open cur_emp;
fetch cur_emp bulk collect into emp_dummy_table;
close cur_emp;
open cur_col;
fetch cur_col bulk COLLECT into emp_dummy_col;
close cur_col;
for i in 1..emp_dummy_table.count
loop
for j in 1..emp_dummy_col.count
loop
DBMS_OUTPUT.PUT_LINE(emp_dummy_table(i).emp_dummy_col(j));
end loop;
end loop;
end;
【问题讨论】:
-
你真正想做什么?动态访问记录中的字段会很痛苦——您必须在字符串变量中动态构建整个 PL/SQL 块。我的猜测是,无论你真正想要完成什么,使用动态 SQL 比使用动态 PL/SQL 更容易。
-
所以可以做到。谢谢
-
您知道主 cur_emp 查询中的列 - 您明确选择了
EMP_ID和其他四个。为什么不明确地提及它们呢?如果您没有选择其他列,这些列将包含在您的 cur_col 查询中,但 emp_dummy_table 中将没有匹配字段,那么您希望这些列会发生什么?真的不清楚你为什么要这样做,而不仅仅是在 SQL 中查询表。 -
好的,@Alex Poole 明白了,但我不会选择特定列,而是将其设为 *,如果我想动态更改表名怎么办?上面的程序只是一个实验。