Запись содержимого локальной переменной обратно в столбец набора результатов? - PullRequest
0 голосов
/ 11 февраля 2009

Можно ли с помощью хранимой процедуры извлечь целочисленное значение столбца из набора результатов в локальную переменную, манипулировать им там и затем записать обратно в столбец набора результатов?

Если так, как будет выглядеть синтаксис?

Ответы [ 4 ]

1 голос
/ 11 февраля 2009

Что-то в следующих строках должно сработать.

DECLARE @iSomeDataItem INT

SELECT @iSomeDataItem = TableColumName
FROM TableName
WHERE ID = ?

--Do some work on the variable
SET @iSomeDataItem = @iSomeDataItem + 21 * 2

UPDATE TableName
    SET TableColumName = @iSomeDataItem
WHERE ID = ?

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

0 голосов
/ 19 февраля 2009

Спасибо за ответы, я пошел другим путем и решил проблему без использования процедуры. Основная проблема заключалась в том, чтобы вычислить дату с использованием различных значений столбцов, а затем преобразовать значения столбцов в правильный формат. Решил это, используя большие операторы "case - when" в select.

Еще раз спасибо ...: -)

0 голосов
/ 11 февраля 2009

Почему бы просто не выполнить манипуляции в операторе обновления? Вам не нужно загружать его в переменную, манипулировать им, а затем сохранять.

update TableName
SET TableColumnName=TableColumnName + 42 /* or what ever manipulation you want */
WHERE ID = ?

также

@iSomeDataItem + 21 * 2

совпадает с:

@iSomeDataItem + 42

Идея функции является ненужным дополнительным шагом, если большинство из перечисленного не верны:

1) вам нужно будет использовать этот расчет во многих местах 2) расчет сложный 3) расчет может измениться

0 голосов
/ 11 февраля 2009

То, что вы ищете, вероятно, больше похоже на пользовательскую функцию, которая может использоваться в SQL, как и любая другая встроенная функция.

Не уверен, как это работает в DB2, но для Oracle это будет примерно так:

Create or replace Function Decrement (pIn Integer) 
return Integer
Is
Begin
  return pIn - 1;
end;

Вы можете использовать это в SQL, например,

Select Decrement (43)
From Dual;

должен вернуть «окончательный ответ» (42).

Надеюсь, это поможет.

...