所有
我对存储过程一般都很新,但我特别在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()
调用上述存储过程时,我得到:
根据this article(查看示例7-1),USING
关键字应替换:1
中编号的占位符(v_strSQL
),其值应存储在{{ 1}}。但是,我一直收到无效的表错误。我猜这是因为v_tab
由于某种原因无法用值替换占位符,但我不确定为什么会这样。有谁知道我在这里做些蠢事吗?
我在Oracle 10g数据库上运行它&使用PL / SQL Developer。
答案 0 :(得分:1)
USING子句仅用于绑定变量(即在select语句中使用列名的位置),而不是表名。典型用法如下:
Select col1 from table1 where col2 = :a
如果要使用变量表名,请使用以下内容:
v_tab := 'ex.emp';
v_strSQL := 'SELECT * FROM ' || v_tab;
EXECUTE IMMEDIATE v_strSQL;