Обновить столбец БД, указанный во время выполнения - PullRequest
0 голосов
/ 21 июля 2009

Я пытаюсь обновить столбец в базе данных, но столбец должен быть указан во время выполнения.Например, с учетом таблицы:

|PKEY |Колонка А |Колонка B |ColumnC |

Я хочу написать хранимую процедуру, которая будет обновлять данный столбец для PKEY.Например:

updateColumn (pkey, columnName, Value);

Это легко сделать с помощью java / JDBC и т. Д., Но это должна быть хранимая процедура.также, это база данных Oracle

Ответы [ 3 ]

3 голосов
/ 21 июля 2009

Вы должны посмотреть на динамический SQL.

Хорошее место для начала - Немедленно выполнить и Руководство разработчика приложений Oralce

1 голос
/ 22 июля 2009

Преобразование процесса Дэйва в 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 голос
/ 21 июля 2009

Динамический 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...