我有一个程序,作为输入提供列名和列值。这些将用于更新表中的记录。
我正在尝试实现以下更新声明:
UPDATE EXAMPLE_TABLE SET p_i_column_name = p_i_column_value WHERE ID = p_i_id;
当然我知道这是不正确的,但我想知道是否有办法让更新语句知道哪个列要通过varchar2值更新。
谢谢!
答案 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语句以便跟踪错误等。如果您不喜欢在编译时不知道你正在更新什么列,看起来很可能通过修改你的数据模型来提供更好的服务。