我试图更新数据库中的列,但需要在运行时指定列。例如,给定表格:更新在运行时指定的数据库列
| PKEY | ColumnA | ColumnB | ColumnC |
我想写一个存储过程,将更新每个PKEY给定的列。如:
updateColumn(pkey,columnName,Value);
这可以很容易地使用java/JDBC等,但这需要是一个存储过程。
另外,它的一个Oracle数据库
我试图更新数据库中的列,但需要在运行时指定列。例如,给定表格:更新在运行时指定的数据库列
| PKEY | ColumnA | ColumnB | ColumnC |
我想写一个存储过程,将更新每个PKEY给定的列。如:
updateColumn(pkey,columnName,Value);
这可以很容易地使用java/JDBC等,但这需要是一个存储过程。
另外,它的一个Oracle数据库
转换戴夫的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的风险注射。
你应该看看动态SQL。
一个良好的开端是Execute Immediate和the Oralce Application Developer's Guide
动态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)