ROWID作为PL/SQL中的参数

gre*_*fox 2 oracle plsql stored-procedures rowid ora-00904

我正在尝试创建一个帮助器存储过程来保存重复的代码.

我编写了以下存储过程,它接受表名,status_id和ROWID.

PROCEDURE sp_update_stage_status(p_table_name IN VARCHAR2,
                                 p_status_id IN NUMBER,
                                 p_rowid IN ROWID)
AS
BEGIN       
  execute immediate 'UPDATE ' || p_table_name
                 || ' SET STATUS_ID = ' || p_status_id 
                 || ' WHERE ROWID = ' || p_rowid;       
END;
Run Code Online (Sandbox Code Playgroud)

但是每当我执行它时,我得到以下内容.

ORA-00904: "AAATQEAAEAAAAHEAAB": invalid identifier
ORA-06512: at "OBR_DEV.PKG_COMMON", line 32
ORA-06512: at "OBR_DEV.PKG_DIRECTORY", line 449
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

Mr.*_*ama 7

rowid在没有引用的情况下直接删除了in 的内容.

您的查询变为WHERE ROWID = AAATQEAAEAAAAHEAABrowid列与AAATQEAAEAAAAHEAAB列进行比较.
它应该是WHERE ROWID = 'AAATQEAAEAAAAHEAAB'.在动态SQL中添加一些引号,你应该没问题.

或者更好的是,使用绑定变量而不用担心引用:

EXECUTE IMMEDIATE 
  'UPDATE ' || p_table_name || ' SET status_id = :status WHERE rowid = :seek_rowid'
  USING p_status_id, p_rowid;
Run Code Online (Sandbox Code Playgroud)