2009-07-21 13 views
0

データベースの列を更新しようとしていますが、実行時に列を指定する必要があります。たとえば、表の場合:実行時に指定された更新DB列

| PKEY | ColumnA | ColumnB | ColumnC |

PKEYごとに特定の列を更新するストアドプロシージャを作成します。そのようなもの:

updateColumn(pkey、c​​olumnName、Value);

これは簡単にjava/JDBCなどを使用して行うことができますが、これはストアドプロシージャである必要があります。

また、そのOracleデータベース

答えて

1

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; 

私はSQLのリスクを軽減するために、COLUMNNAMEは表の列の一つであることを確認するためのチェックを追加します注入。

1

動的SQLが実際にあなたの答えです。 SQL文を構築して実行することで、SQLインジェクションの問題を避けることができます。ここでは、SQL Serverで動作する手順の概要を示します。 Oracleにターゲットを変更する必要があります。私は主キーと値の型を推測しました。

最小限の変更でのOracle PL/SQLにDaveのPROCの変換
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) 
関連する問題