ROWID 作为 PL/SQL 中的参数
ROWID as Parameters in PL/SQL
我正在尝试创建一个辅助存储过程以节省重复代码。
我编写了以下采用 table 名称、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 = 'AAATQEAAEAAAAHEAAB'
。在您的动态 SQL 中添加一些引号,您应该没问题。
或者更好的是,使用绑定变量,不用担心引用:
EXECUTE IMMEDIATE
'UPDATE ' || p_table_name || ' SET status_id = :status WHERE rowid = :seek_rowid'
USING p_status_id, p_rowid;
您正在将 p_rowid
声明为 rowid
类型,您必须将 p_rowid
声明为 varchar2(18)
。
PROCEDURE sp_update_stage_status(
p_table_name IN VARCHAR2,
p_status_id IN NUMBER,
p_rowid IN VARCHAR2(18)
) AS
BEGIN
execute immediate 'UPDATE ' || p_table_name || ' SET STATUS_ID = ' || p_status_id || ' WHERE ROWID = ' || p_rowid;
END;
我正在尝试创建一个辅助存储过程以节省重复代码。
我编写了以下采用 table 名称、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 = 'AAATQEAAEAAAAHEAAB'
。在您的动态 SQL 中添加一些引号,您应该没问题。
或者更好的是,使用绑定变量,不用担心引用:
EXECUTE IMMEDIATE
'UPDATE ' || p_table_name || ' SET status_id = :status WHERE rowid = :seek_rowid'
USING p_status_id, p_rowid;
您正在将 p_rowid
声明为 rowid
类型,您必须将 p_rowid
声明为 varchar2(18)
。
PROCEDURE sp_update_stage_status(
p_table_name IN VARCHAR2,
p_status_id IN NUMBER,
p_rowid IN VARCHAR2(18)
) AS
BEGIN
execute immediate 'UPDATE ' || p_table_name || ' SET STATUS_ID = ' || p_status_id || ' WHERE ROWID = ' || p_rowid;
END;