看看PLSQL User's Guide and Reference.pdf的第十章中有讲解(8i)。
下面用SQL*Plus作了些演示:
[php]
scott@ORCL>set autoprint on
scott@ORCL>variable l_table_name varchar2(30)
scott@ORCL>variable l_cur refcursor
scott@ORCL>exec :l_table_name := 'emp';
PL/SQL procedure successfully completed.
L_TABLE_NAME
--------------------------------
emp
scott@ORCL>exec open :l_cur for 'select * from ' || :l_table_name;
PL/SQL procedure successfully completed.
L_TABLE_NAME
--------------------------------
emp
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
7369 SMITH CLERK 7902 1980-12-17 800 20
7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
7521 WARD SALESMAN 7698 1981-02-22 1250 500 30
7566 JONES MANAGER 7839 1981-04-02 2975 20
7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30
7698 BLAKE MANAGER 7839 1981-05-01 2850 30
7782 CLARK MANAGER 7839 1981-06-09 2450 10
7839 KING PRESIDENT 1981-11-17 5000 10
7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30
7900 JAMES CLERK 7698 1981-12-03 950 30
7902 FORD ANALYST 7566 1981-12-03 3000 20
7934 MILLER CLERK 7782 1982-01-23 1300 10
12 rows selected.
scott@ORCL>exec :l_table_name := 'dept'
PL/SQL procedure successfully completed.
L_TABLE_NAME
--------------------------------
dept
scott@ORCL>exec open :l_cur for 'select * from ' || :l_table_name;
PL/SQL procedure successfully completed.
L_TABLE_NAME
--------------------------------
dept
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
scott@ORCL>
[/php]