2009-07-21 23 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) 
相關問題