在更新期间使用varchar2值作为列名

时间:2014-04-03 19:07:56

标签: sql oracle

我试着四处寻找,但没有运气。我的问题如下:

我有一个程序,作为输入提供列名和列值。这些将用于更新表中的记录。

我正在尝试实现以下更新声明:

UPDATE EXAMPLE_TABLE SET p_i_column_name = p_i_column_value WHERE ID = p_i_id;

当然我知道这是不正确的,但我想知道是否有办法让更新语句知道哪个列要通过varchar2值更新。

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用动态SQL

BEGIN
  EXECUTE IMMEDIATE 'UPDATE example_table ' || 
                      ' SET ' || p_i_column_name || ' = :1 ' ||
                    ' WHERE id = :2'
    USING p_i_column_value, p_i_id;
END;

但请注意,使用动态SQL通常会大大增加代码的复杂性并大幅降低其可支持性。您正在将编译时错误转换为运行时错误,例如,您无法自动跟踪依赖关系,您通常需要记录正在某处执行的SQL语句以便跟踪错误等。如果您不喜欢在编译时不知道你正在更新什么列,看起来很可能通过修改你的数据模型来提供更好的服务。