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

关于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