全部,
一般来说,我对存储过程很陌生,但我特别在 Oracle 中苦苦挣扎。我已经创建了一个非常简单的示例来说明我要完成的工作,但这个简化版本仍然出现同样的错误。
示例存储过程如下:
CREATE OR REPLACE PROCEDURE ashish_test
AUTHID CURRENT_USER IS
BEGIN
DECLARE
v_tab VARCHAR2(50);
v_strSQL VARCHAR2(50);
BEGIN
v_strSQL := 'SELECT * FROM :1';
v_tab := 'ex.emp';
EXECUTE IMMEDIATE v_strSQL USING v_tab;
END;
END;
当我使用 调用上述存储过程CALL ashish_test()
时,我得到:
错误消息 http://web1.twitpic.com/img/12831839-06a3ea536df5d5a0a839eb83d9e59d25.4a3936b8-scaled.jpg
根据这篇文章(查看示例 7-1),USING
关键字应将其中的编号占位符 ( :1
)替换为v_strSQL
存储在 中的值v_tab
。但是,我不断收到无效表错误。我猜这是因为由于EXECUTE IMMEDIATE
某种原因无法用值替换占位符,但我不确定为什么会这样。有谁知道我是否在这里做一些愚蠢的事情?
我在 Oracle 10g 数据库上运行它并使用 PL/SQL Developer。