2009-07-21 66 views
0

我试图更新数据库中的列,但需要在运行时指定列。例如,给定表格:更新在运行时指定的数据库列

| PKEY | ColumnA | ColumnB | ColumnC |

我想写一个存储过程,将更新每个PKEY给定的列。如:

updateColumn(pkey,columnName,Value);

这可以很容易地使用java/JDBC等,但这需要是一个存储过程。

另外,它的一个Oracle数据库

回答

1

转换戴夫的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的风险注射。

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)