更新在运行时指定的DB列

时间:2009-07-21 09:37:07

标签: sql oracle stored-procedures

我正在尝试更新数据库中的列,但是需要在运行时指定该列。例如,给出表:

| PKEY | ColumnA | ColumnB | ColumnC |

我想编写一个存储过程,它将根据PKEY更新给定列。如:

updateColumn(pkey,columnName,Value);

这可以使用java / JDBC等轻松完成,但这需要是一个存储过程。

也是一个Oracle数据库

3 个答案:

答案 0 :(得分:3)

您应该研究动态SQL。

一个好的起点是Execute Immediatethe Oralce Application Developer's Guide

答案 1 :(得分:1)

动态SQL确实是你的答案。您可以构建一个SQL语句然后执行它,确保您注意避免SQL注入问题。这是一个应该在SQL Server中运行的过程的大致轮廓。您需要重新定位到Oracle。我已经猜到了你的主键和价值的类型。

create proc updateColumn (@pkey int, @columnName varchar(64), @value int)
as
declare @cmd varchar(512)
set @cmd = 'update YOUR_TABLE set ' + @columnName + ' = ' + str(@value) +
    ' where KEY = ' + str(@pkey)
exec (@cmd)

答案 2 :(得分:1)

将dave的proc转换为Oracle PL / SQL,只需进行少量更改:

create procedure updateColumn (pkey int, columnName varchar2, value int) as
begin
execute immediate 'update YOUR_TABLE set ' ||
    columnName || ' = ' || TO_CHAR(value) ||
    ' where KEY = ' || TO_CHAR(pkey);
end;

我会添加一个检查以确保columnName是表中的一个列,以降低SQL注入的风险。

相关问题