0

テーブルAの行が更新または挿入された後に起動するトリガー設定があります。テーブルAを参照するテーブルBもありますが、分析したい別の列、ブール値もあります(したがって、この関数はのみ使用できますでUPDATE)。

列にアクセスしようとすると:

SELECT col1 FROM B WHERE B.aID = NEW.ID;

この列col1は常に NULL です。

どうしてこれなの?更新時にブール値を取得するにはどうすればよいですか?

4

1 に答える 1

3

ほとんどの場合、名前の競合が発生しています。パラメーター名 (INおよびOUTパラメーター) は、関数本体の (ほぼ) どこにでも表示され、修飾されていない列名よりも優先されます。col1関数内で変数として宣言しましたか?

競合を回避するには、列名をテーブル修飾します。

SELECT b.col1 FROM tableb b WHERE b.aID = NEW.ID;

いずれにせよ、これは良い習慣です。

変数名にプレフィックスを付けることもお勧めです。これにより、通常はテーブルの列と競合しなくなります。のように: _col1

于 2012-08-29T07:02:58.367 に答える