2016-12-06 21 views
0

私は人の名前、姓、性別、生年月日、電子メールなどのすべての情報を含むPeopleテーブルを使用してデータベースを作成しました。この表の各行には、一連のpersonIDがあります。私はストアドプロシージャを作成しようとしているばかりで、入力したばかりの人の年齢を自動的に計算します。私はcurrvalを使用して最後に挿入されたpeopleIDを取得しようとしています。postgreSQLでcurrvalを使って年齢を計算する

これは私のストアドプロシージャです:

CREATE OR REPLACE FUNCTION PersonAge (peopleID INT) 
RETURNS INTERVAL AS 
$$ 
DECLARE 
birthday date := (SELECT People.dateOfBirth 
     FROM People 
     ); 
BEGIN 
RETURN age(birthday); 
END; 
$$ 
LANGUAGE plpgsql 

これが私のトリガーです:

CREATE TRIGGER CalculateAge 
AFTER INSERT OR UPDATE ON People 
FOR EACH ROW 
EXECUTE PROCEDURE PersonAge(SELECT currval(‘people_id_seq’)); 

これは私がINSERT文でそれを実装しようとしたとき、私は取得していますエラーです:

ERROR: syntax error at or near "currval" 
LINE 5: EXECUTE PROCEDURE PersonAge(SELECT currval('people_id_seq')... 
             ^
********** Error ********** 

ERROR: syntax error at or near "currval" 
SQL state: 42601 
Character: 116 
+0

トリガ機能?... –

+0

は、私が具体的にどのような要素私はここに必要とするように私は少し混乱していと思います。私はトリガーにはかなり新しいです。 – user5959738

+0

確かに。私はあなたのために読んだドキュメントを拾った - 私の答えを見て –

答えて

-1

サポートされていない方法で引数を渡します。r ead docs

機能は、それ トリガーをCREATEに指定されたいくつかの引数を受信することを期待しても引数なしで宣言されなければならない。なお - 以下に説明するように、そのような 引数がTG_ARGVを介して渡されています。

TG_ARGV テキストの[]

データ型配列; CREATE TRIGGER ステートメントからの引数インデックスは0からカウントされます。無効なインデックス(0未満または はtg_nargs以上)はNULL値になります。

(強調鉱山)引数で

+0

これは、 'CREERT TRIGGER CalculateAge'を発行したときに' currval( 'people_id_seq') 'の値をTG_ARGVで利用可能にし、' INSERT'や 'UPDATE'で実行しなかったときに有効にします。私は著者が何をしたいのか分かりません。 –

関連する問題