テーブルAの行が更新または挿入された後に起動するトリガー設定があります。テーブルAを参照するテーブルBもありますが、分析したい別の列、ブール値もあります(したがって、この関数はのみ使用できますでUPDATE
)。
列にアクセスしようとすると:
SELECT col1 FROM B WHERE B.aID = NEW.ID;
この列col1
は常に NULL です。
どうしてこれなの?更新時にブール値を取得するにはどうすればよいですか?
テーブルAの行が更新または挿入された後に起動するトリガー設定があります。テーブルAを参照するテーブルBもありますが、分析したい別の列、ブール値もあります(したがって、この関数はのみ使用できますでUPDATE
)。
列にアクセスしようとすると:
SELECT col1 FROM B WHERE B.aID = NEW.ID;
この列col1
は常に NULL です。
どうしてこれなの?更新時にブール値を取得するにはどうすればよいですか?
ほとんどの場合、名前の競合が発生しています。パラメーター名 (IN
およびOUT
パラメーター) は、関数本体の (ほぼ) どこにでも表示され、修飾されていない列名よりも優先されます。col1
関数内で変数として宣言しましたか?
競合を回避するには、列名をテーブル修飾します。
SELECT b.col1 FROM tableb b WHERE b.aID = NEW.ID;
いずれにせよ、これは良い習慣です。
変数名にプレフィックスを付けることもお勧めです。これにより、通常はテーブルの列と競合しなくなります。のように: _col1
。