甲骨文:更新数据
Oracle : Update data
我如何使用这些过程参数更新数据。
1. p_id_book IN NUMBER;
2. p_column_name VARCHAR2;
3. p_value VARCAHR2;
如果我尝试这样更新:
CREATE OR REPLACE PROCEDURE uptade_book(p_id_book IN NUMBER,
p_column varchar2, p_value varchar2)
AS
begin
UPDATE book SET p_column = p_value WHERE id_book = p_id_book;
END;
发生这些错误:
PL/SQL: SQL Statement ignored.
PL/SQL: ORA-00904: "p_column: invalid identifier.
有什么想法吗?
我不知道你的 book
table 的结构,但是你的程序中发生了什么错误显示给你:
PL/SQL: SQL 语句被忽略:您试图执行无效的 PLSQL 代码块(如存储过程或函数),但发生了编译错误。
Oracle / PLSQL: ORA-06550 Error Message
PL/SQL: ORA-00904: “p_column: 无效标识符:您试图执行包含无效列名或列名丢失的 SQL 语句。这当您在 SELECT 语句中引用无效别名时通常会发生这种情况。
为此,您需要动态 sql。更新可能是 运行 EXECUTE IMMEDIATE
。对引用列名的参数使用 <column>%type
是一个好习惯。
CREATE OR replace PROCEDURE update_book(p_id_book book.id_book%TYPE,
p_column VARCHAR2,
p_value VARCHAR2)
AS
BEGIN
EXECUTE IMMEDIATE 'UPDATE book SET '||p_column||' = :p_value
WHERE id_book = :p_id_book'
USING p_value, p_id_book;
END;
这里需要注意的重要一点是,由于 p_value
被定义为 VARCHAR2
,因此如果您传递字符串或数字,它会正常工作。对于 date
和 timestamp
类型,您应该特别注意传递正确的格式。特别是如果您传递字符串(而不是日期),以避免由于隐式转换而导致的错误。
我如何使用这些过程参数更新数据。
1. p_id_book IN NUMBER;
2. p_column_name VARCHAR2;
3. p_value VARCAHR2;
如果我尝试这样更新:
CREATE OR REPLACE PROCEDURE uptade_book(p_id_book IN NUMBER,
p_column varchar2, p_value varchar2)
AS
begin
UPDATE book SET p_column = p_value WHERE id_book = p_id_book;
END;
发生这些错误:
PL/SQL: SQL Statement ignored.
PL/SQL: ORA-00904: "p_column: invalid identifier.
有什么想法吗?
我不知道你的 book
table 的结构,但是你的程序中发生了什么错误显示给你:
PL/SQL: SQL 语句被忽略:您试图执行无效的 PLSQL 代码块(如存储过程或函数),但发生了编译错误。
Oracle / PLSQL: ORA-06550 Error Message
PL/SQL: ORA-00904: “p_column: 无效标识符:您试图执行包含无效列名或列名丢失的 SQL 语句。这当您在 SELECT 语句中引用无效别名时通常会发生这种情况。
为此,您需要动态 sql。更新可能是 运行 EXECUTE IMMEDIATE
。对引用列名的参数使用 <column>%type
是一个好习惯。
CREATE OR replace PROCEDURE update_book(p_id_book book.id_book%TYPE,
p_column VARCHAR2,
p_value VARCHAR2)
AS
BEGIN
EXECUTE IMMEDIATE 'UPDATE book SET '||p_column||' = :p_value
WHERE id_book = :p_id_book'
USING p_value, p_id_book;
END;
这里需要注意的重要一点是,由于 p_value
被定义为 VARCHAR2
,因此如果您传递字符串或数字,它会正常工作。对于 date
和 timestamp
类型,您应该特别注意传递正确的格式。特别是如果您传递字符串(而不是日期),以避免由于隐式转换而导致的错误。