1

Oracle のRETURNING INTO句の動作と同様に、OpenEdge SQL にセッション変数を格納する方法はありますか? 別の SELECT を実行しなくても INSERT を実行した後に、トリガーによって設定された列の値を使用できるようにする必要があります。

10.2Bを使用しています。SQL リファレンスと SQL 開発ハンドブックを見てきましたが、このようなものは見当たりませんでした。

4

2 に答える 2

1

PUBLISH と SUBSCRIBE を使用するのはどうですか? トリガーが必要な値を PUBLISH することであり、呼び出し元のプログラム/クラス/スーパー プロシージャの適切な場所でそれをサブスクライブした場合、必要な情報が得られます。これは、Oracle で行う方法ほどクリーンではありませんが、目的の場所に到達できる可能性があります。

コードが必要な場合は、提供できます...しかし、他の質問と回答のいくつかを閲覧した結果、それが必要になるとは思いません:-)

于 2012-06-12T03:57:34.723 に答える
0

そのような機能はなく、実行可能な回避策もありません。

実行不可能な回避策は、INSERTを実行するための特別なストアドプロシージャを作成することですが、INSERTコマンドは可変数のパラメーター(特に、どの列とデータを入力するか)を受け取るため、これは一般的な解決策ではありません。 、ストアドプロシージャには、固定数のパラメータが必要です。

クライアントのSQLエンジンへの一時的な接続に対応する特別なセッションIDを返すSQL関数が存在する場合、クライアントとトリガー/ストアドプロシージャは、事前に決定されたテーブルを要求キューとして使用して通信することができます(セッションIDをキーとして使用することにより)。残念ながら、ドキュメントによると、そのようなセッションIDはありません。

私の質問の根本的な使用例は、挿入されたIDをクライアントに通信するINSERTに自動インクリメントの主キーを実装する方法でした。これにより、クライアントにどちらかを強制する必要がなくなります。

  • PK自体に即時の価値を提供する
  • 更新しているテーブルに対応するシーケンスを提供します

残念ながら、サポートが不足しているため、上記のいずれかを提供するためにクライアントに制限を課す必要がありました(どちらかが不足している場合、コードは一連の<tablename>_id_seq存在を前提としています)。

于 2012-06-12T18:38:54.783 に答える