gpt4 book ai didi

oracle - ROWID 作为 PL/SQL 中的参数

转载 作者:行者123 更新时间:2023-12-01 07:43:23 25 4
gpt4 key购买 nike

我正在尝试创建一个辅助存储过程以节省重复代码。

我编写了以下存储过程,它采用表名、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;

但是每当我执行它时,我都会得到以下结果。

ORA-00904: "AAATQEAAEAAAAHEAAB": invalid identifier
ORA-06512: at "OBR_DEV.PKG_COMMON", line 32
ORA-06512: at "OBR_DEV.PKG_DIRECTORY", line 449

我在这里做错了什么?

最佳答案

您直接将 rowid 的内容放入其中,而无需引用它。

您的查询变为 WHERE ROWID = AAATQEAAEAAAAHEAAB,它将 rowid 列与 AAATQEAAEAAAAHEAAB 列进行比较。
它应该是WHERE ROWID = 'AAATQEAAAEAAAAHEAAB'。在动态 SQL 中添加一些引号就可以了。

或者更好的是,使用绑定(bind)变量并且不用担心引用:

EXECUTE IMMEDIATE 
'UPDATE ' || p_table_name || ' SET status_id = :status WHERE rowid = :seek_rowid'
USING p_status_id, p_rowid;

关于oracle - ROWID 作为 PL/SQL 中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31542891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com