0

ストアド プロシージャを使用して、結果セットから整数列の値をローカル変数にフェッチし、そこで操作してから結果セットの列に書き戻すことは可能ですか?

もしそうなら、構文はどのようになりますか?

4

4 に答える 4

1

次の行に沿った何かがうまくいくはずです。

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 = ?

この種の実装の欠点は、特定のレコードでのみ動作することですが、これはあなたが達成しようとしているものかもしれません.

于 2009-02-11T08:30:48.887 に答える
0

なぜupdateステートメント内で操作を行わないのですか?変数にロードして操作し、保存する必要はありません。

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

また、

@iSomeDataItem + 21 * 2

と同じです:

@iSomeDataItem + 42

次のほとんどが当てはまらない限り、関数のアイデアは不要な追加の手順です。

1)この計算は多くの場所で使用する必要があります2)計算は複雑です3)計算は変更される可能性があります

于 2009-02-11T19:02:33.080 に答える
0

あなたが探しているのは、おそらく、他の組み込み関数と同様に 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)を返す必要があります。

お役に立てれば。

于 2009-02-11T10:54:35.453 に答える