私はjdbcクライアントをpostgresqlデータベースと通信させています。JDBC からテーブルにデータを挿入するための準備済みステートメントを作成しますが、クエリの作成の時点で、クライアントはステートメント内に挿入するすべてのフィールドを認識していません。クエリを完了するために、起動する TRIGGER を記述しましたそのテーブルに挿入する前に、欠落している値を見つけ、クエリを実行し続けます。これはjdbcコードです:
String MY_INSERT = "INSERT INTO myTable VALUES(?, ?, ?, ?, ?, ?)";
PreparedStatement pstm = connection.PrepareStatement(MY_INSERT);
pstm5.setInt(1, 2562);
pstm5.setInt(2, 22);
pstm5.setInt(3, 0); //unknown value, set to zero
pstm5.setString(4, "a string");
pstm5.setInt(5, 0); //the other unknown value
これはトリガーコードです:
CREATE FUNCTION perform_() RETURNS trigger AS $myTrigger$
DECLARE
vend VARCHAR(20);
pre numeric(10,2);
BEGIN
SELECT field3, field5 FROM otherTable WHERE id = NEW.field2 INTO vend, pre;
NEW.field3 = vend;
NEW.field5 = pre;
RETURN NULL;
END;
$myTrigger$ LANGUAGE plpgsql;
CREATE TRIGGER myTrigger
BEFORE INSERT ON myTable
EXECUTE PROCEDURE perform_();
トリガーが起動すると、次のエラーが発生します。
Exception: JDBCClass error: ERROR: record "new" is not assigned yet
Details: The tuple structure of a not-yet-assigned record is indeterminate.
SELECT field3, field5 FROM otherTable WHERE id = NEW.field2 INTO vend, pre;
どういう意味ですか?jdbcコードでわかるように、新しいレコードが割り当てられています...