【问题标题】:Oracle : Update data甲骨文:更新数据
【发布时间】:2018-05-06 11:18:58
【问题描述】:

如何使用这些过程参数更新数据。

 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 语句。

PL/SQL: ORA-00904: "p_column: 无效标识符。

有什么想法吗?

【问题讨论】:

    标签: oracle sql-update plsqldeveloper


    【解决方案1】:

    为此,您需要动态 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,因此如果您传递字符串或数字,它将正常工作。对于datetimestamp 类型,您应该特别注意传递正确的格式。尤其是如果您传递字符串(而不是日期),以避免由于隐式转换而导致的错误。

    【讨论】:

      【解决方案2】:

      我不知道您的book 表结构,但是您的程序中发生的错误显示给您:

      PL/SQL:SQL 语句被忽略:您试图执行无效的 PLSQL 代码块(如存储过程或函数),但发生编译错误。

      Oracle / PLSQL: ORA-06550 Error Message

      PL/SQL: ORA-00904: "p_column: invalid identifier : 您试图执行包含无效列名或列名丢失的 SQL 语句。这通常发生在您在 SELECT 语句中引用无效别名时.

      Oracle / PLSQL: ORA-00904 Error Message

      【讨论】:

        猜你喜欢
        • 2017-01-24
        • 1970-01-01
        • 2010-10-18
        • 1970-01-01
        • 2013-06-19
        • 1970-01-01
        • 2013-12-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多