我创建了以下sp
create or replace PROCEDURE RM_SUPPORT_SCRIPTS_V2
(
V_TABLENAME IN USER_TABLES.table_name%type
, V_SETCOLNAME IN NVARCHAR2
, V_SETVALUE IN NVARCHAR2
, V_WHERECOLNAME IN NVARCHAR2
, V_WHEREKEYVALUE IN NVARCHAR2
, USER_ID IN NVARCHAR2
)
IS
BEGIN
EXECUTE IMMEDIATE
'UPDATE '||DBMS_ASSERT.simple_sql_name(V_TABLENAME)
||' SET :1 = :2, update_by_userid = :3, UPDATE_DATE = SYSDATE'
||' WHERE :4 = :5 '
using V_SETCOLNAME, V_SETVALUE, USER_ID, V_WHERECOLNAME, V_WHEREKEYVALUE;
END RM_SUPPORT_SCRIPTS_V2;
但当我从execute语句调用它时
EXEC RM_SUPPORT_SCRIPTS_V2 (USERS_TABLE, USER_ID,ORTEGALUX,USER_ID,TESTED,FX);
我得到以下错误
错误报告-
ora-06550:第1行,第31列:
pls-00357:此上下文中不允许表、视图或序列引用“users\u table”
ora-06550:第1行,第7列:
pl/sql:忽略语句
655000000-“行%s,列%s:\n%s”
- 原因:通常是pl/sql编译错误。
- 行动:
有人知道为什么会这样吗?我曾尝试在每个表、列的调用中使用简单的逗号,但仍然失败。
谢谢您。
1条答案
按热度按时间nxowjjhe1#
错误来自调用,而不是过程。您正在传递字符串,因此需要引用它们:
但是您不能将绑定变量用于列名,您需要在中连接这些变量,就像使用表名一样。
尽管您可能也希望为这些添加Assert检查。