关于
oracle存储过程中使用变量作为表名
我现在想在存储过程中对一系列表进行操作,除了表名不同,操作都是相同的。怎样可以使用变量作为表名啊?
create or replace procedure case_to_province as
cursor cur is
select * from tableName
……
我就是想把这个tableName用变量来表示,这样我在调用存储过程的时候,只要换一下参数就可以了,而不用根据不同的表名,来写多个存储过程。
------解决方案--------------------
--动态游标
c sys_refcursor;
str varchar2(4000);
begin
str := 'select * from '||tbname;
open c for str;
--下面用显式调用,和游标一样。
end;
------解决方案--------------------
SQL code
CREATE OR REPLACE PROCEDURE p01(tabname IN VARCHAR2) AS
v_num NUMBER(10);
v_sql VARCHAR2(300);
BEGIN
v_sql:='select count(*) from '||tabname;
EXECUTE IMMEDIATE v_sql INTO v_num;
Dbms_Output.put_line('the total num is '||v_num);
END p01;
EXEC p01('user_sequences');
输出结果为:
the total num is 8