日期:2014-05-17  浏览次数:20769 次

请问:如何将一个过程的参数使用在过程中的查询语句中呢??
例如:
create   or   replace   procedure   test(p_table_name   varchar2)
as
      cursor   cur_a   is  
          select   *   from   p_table_name;
begin  


end   test;

这样编译会报错。说p_table_name   不是一个表名。。
请问如何编写这个过程啊。。

------解决方案--------------------
你得 把语句写在begin 里面
begin 上面是声明变量的
------解决方案--------------------
声明动态游标吧,就不会有那烦恼了
------解决方案--------------------
type t_sfc_trans is ref cursor;
楼上说的对 动态游标
v_sfc_trans t_sfc_trans;


begin

open v_sfc_trans for select * from .....
close v_sfc_trans;

end
------解决方案--------------------
s varchar2(100);
............
s:= 'select * from '||pSourceTable|| ' ';

open c_data for s
------解决方案--------------------
CREATE OR REPLACE PROCEDURE ll_02 (p_table_name in varchar2,p_cursor OUT sys_refcursor) IS
v_sql varchar2(50);
BEGIN
v_sql:= 'SELECT * from ' || p_table_name ;
OPEN p_cursor FOR
v_sql;
END ll_02;
/
------解决方案--------------------
create or replace procedure test(p_table_name varchar2) is
TYPE EmpCurTyp IS REF CURSOR;
c_tab_Cur EmpCurTyp;
cur_sql varchar2(2000);
begin
cur_sql := 'select * from ' ||p_table_name;
open c_tab_Cur for cur_sql;
......
end test;
------解决方案--------------------
我跑过的:
create or replace procedure table_data_copy(SourceTable in varchar2) is


type mycursor is ref cursor;
c_data mycursor;
/* cursor c_data is
select * from test3; */
v_temp b%rowtype;


begin
open c_data for 'select * from '||SourceTable;
loop
fetch c_data into v_temp; --注意这里语句的顺序
exit when c_data%notfound;
insert into b values v_temp; --跟你新学的。
end loop;
close c_data;
end table_data_copy;