CREATE OR REPLACE PROCEDURE test_proc ( tablename IN varchar2 ) IS filed_test varchar2(30):=''; VN_Field_Str varchar2(4000):= ''; CURSOR Cur_fieldsd IS select column_name from user_tab_columns where upper(table_name) = upper(tablename); BEGIN OPEN Cur_fieldsd; LOOP FETCH Cur_fieldsd INTO filed_test; EXIT WHEN Cur_fieldsd%NOTFOUND; VN_Field_Str := VN_Field_Str || filed_test || ','; end loop; CLOSE Cur_fieldsd; dbms_output.put_line(VN_Field_Str);
END test_proc;
游标中有多行数据, 你把它fetch到一个变量可定时不行的。 定义一个type 吧
游标定义必须放到说明的部分,而不能放到执行部分(即begin与end之间)
我有用 loop 循环,这个是没问题的。
我有见过放到begin end 存储过程 之间的游标,可以执行。
CREATE OR REPLACE PROCEDURE test_proc ( tablename IN varchar2 ) IS filed_test varchar2(30):=''; VN_Field_Str varchar2(4000):= '';
BEGIN declare CURSOR Cur_fieldsd IS select column_name from user_tab_columns where upper(table_name) = upper(tablename); begin OPEN Cur_fieldsd; LOOP FETCH Cur_fieldsd INTO filed_test; EXIT WHEN Cur_fieldsd%NOTFOUND; VN_Field_Str := VN_Field_Str || filed_test || ','; end loop; CLOSE Cur_fieldsd; end; dbms_output.put_line(VN_Field_Str);
END test_proc;call test_proc('T_BC_OtherExpenseBill');解决了,这样写就可以执行了,加多多一个begin end;语句块,不过还是要谢谢各位了。
在begin end 存储过程 之间的游标。 放在块里面的。 declare begin end;块里面才可以。
(
tablename IN varchar2
) IS
filed_test varchar2(30):='';
VN_Field_Str varchar2(4000):= ''; CURSOR Cur_fieldsd IS
select column_name
from user_tab_columns
where upper(table_name) = upper(tablename);
BEGIN OPEN Cur_fieldsd;
LOOP
FETCH Cur_fieldsd
INTO filed_test;
EXIT WHEN Cur_fieldsd%NOTFOUND;
VN_Field_Str := VN_Field_Str || filed_test || ',';
end loop;
CLOSE Cur_fieldsd; dbms_output.put_line(VN_Field_Str);
END test_proc;
你把它fetch到一个变量可定时不行的。
定义一个type 吧
我有用 loop 循环,这个是没问题的。
(
tablename IN varchar2
) IS
filed_test varchar2(30):='';
VN_Field_Str varchar2(4000):= '';
BEGIN declare CURSOR Cur_fieldsd IS
select column_name
from user_tab_columns
where upper(table_name) = upper(tablename);
begin
OPEN Cur_fieldsd;
LOOP
FETCH Cur_fieldsd
INTO filed_test;
EXIT WHEN Cur_fieldsd%NOTFOUND;
VN_Field_Str := VN_Field_Str || filed_test || ',';
end loop;
CLOSE Cur_fieldsd;
end;
dbms_output.put_line(VN_Field_Str);
END test_proc;call test_proc('T_BC_OtherExpenseBill');解决了,这样写就可以执行了,加多多一个begin end;语句块,不过还是要谢谢各位了。
在begin end 存储过程 之间的游标。
放在块里面的。
declare
begin
end;块里面才可以。