我正在尝试编写一个简单的过程,该过程将表名和列作为参数,并仅打印结果。
这是我的代码:
SET SERVEROUTPUT ON;
CREATE OR REPLACE PROCEDURE TEST(TAB IN VARCHAR2, COLUMN IN VARCHAR2) IS
BEGIN
FOR REC IN (SELECT COLUMN FROM TAB) LOOP
DBMS_OUTPUT.PUT_LINE(REC.COLUMN);
END LOOP;
END;
/
然后我用:
EXECUTE TEST('CLIENTS2', 'NOMCLI');
问题是这总是返回:
NOMCLI
NOMCLI
NOMCLI
NOMCLI
NOMCLI
NOMCLI
NOMCLI
NOMCLI
NOMCLI
NOMCLI
NOMCLI
NOMCLI
NOMCLI
NOMCLI
NOMCLI
NOMCLI
NOMCLI
我的表不是空的,当我直接尝试执行查询时,它可以很好地工作。 请问这是什么问题?谢谢!
答案 0 :(得分:2)
过程输出正确。您的代码正在显式查询TAB
视图(已过时但仍可用于向后兼容),名为COLUMN
的参数是一个字符串常量,其值为'NOMCLI'
,因此查询将返回该常量TAB
中每一行的值。
PL / SQL使用编译时提供的代码进行编译,并且不应用任何隐式的运行时替换,仅因为评估某些变量可以给出数据库对象的名称。我很确定这样的方法是行不通的。如果需要动态代码,则必须对其进行显式编码。