我正在尝试更新数据库中的列,但是需要在运行时指定该列。例如,给出表:
| PKEY | ColumnA | ColumnB | ColumnC |
我想编写一个存储过程,它将根据PKEY更新给定列。如:
updateColumn(pkey,columnName,Value);
这可以使用java / JDBC等轻松完成,但这需要是一个存储过程。
也是一个Oracle数据库
答案 0 :(得分:3)
您应该研究动态SQL。
一个好的起点是Execute Immediate和the 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注入的风险。