请问:如何将一个过程的参数使用在过程中的查询语句中呢??
例如:
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;