我試圖更新數據庫中的列,但需要在運行時指定列。例如,給定表格:更新在運行時指定的數據庫列
| 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)