2011-07-12 10 views
2

私は、既存のSQL Server 2005 DBをPostgreSQL 9.0 DBに変換する途中です。SQL ServerトリガーをPostgreSQLに変換するトリガー関数のトリガーの問題

これまでのところすべてうまくいきます。 SQLトリガをPostgreSQLに変換したいのですが、トリガ機能に問題があります。

PostgreSQLの構文でtempテーブルinsertedを実装する方法がわかりません。 SQL Serverではinsertedテーブルは存在しますが、PostgreSQLでは存在しません。何か案は?

私のコード(PostgreSQLの):

ここ
CREATE OR REPLACE FUNCTION func_co_insert() 

    RETURNS trigger AS 

$BODY$begin 

    declare 

    aa bigint; 

begin 

    select aa = co_id from inserted; 

    update com03 set co_creationdate = CURRENT_TIMESTAMP, 

    co_creationby = USER where co_id = aa; 

end; 

end; 

SQL Server 2005のコードのトリガー本体のコード

begin 

    declare @aa bigint; 

    select @aa = se_id from inserted; 

    update server set se_creationdate = CURRENT_TIMESTAMP , se_creationby = USER where se_id = @aa; 

end; 

おかげ

クリス

答えて

3

デフォルトのPostgreSQLは行レベルのトリガです(SQL Serverとは対照的に、文レベルのトリガ)ので、選択する「挿入」テーブルは必要ありません。

新しい値と古い値は、キーワードnewold(挿入トリガーには存在しません)を使用してアクセスできます。

あなたのケースでは文では、単に次のようになります。

update com03 
     set co_creationdate = CURRENT_TIMESTAMP, 
     co_creationby = CURRENT_USER 
    where co_id = new.co_id; 

「挿入から選択」する必要はありません。

これは、テーブルcom03に対してではなく、が発砲していないことを前提としています。 com03のためのあなたのトリガが起動した場合(あなたが私たちに教えてくれなかった)、そしてそれはさらに簡単:詳細については

new.co_creationdate := current_timestamp; 
    new.co_creationby := current_user; 

のマニュアルを参照してください。http://www.postgresql.org/docs/current/static/plpgsql-trigger.html

ページでもない例が含まれていること正確にあなたが達成しようとしている

+0

thxはうまく動作します! – user840167