2

たとえば、MyBatisマッパーにpostgresテーブル用に次のものがあります。

    <select id="selectValues" parameterType='int' resultType="SomeType">
        select foo from bar where baz=#{qux}
    </select>

SomeType値のリストをテーブルから返すことができます。しかし、トリガーを使用して、返されたリストが空であるかどうかを確認し、空の場合はnull値を指定します。おそらく次のようになります。

CREATE TRIGGER mytrigger AFTER select ON bar FOR EACH STATEMENT EXECUTE PROCEDURE trigger_after_select ();

CREATE FUNCTION trigger_after_select () RETURNS trigger AS ' 
BEGIN 
if (select count(*) from bar)=0
then return NULL; 
...

私は正しい方向に進んでいるのだろうか、そして誰かがトリガーの残りの部分がどのように見えるかを教えてくれるだろうか(最初が適切に見えるかどうか)。アドバイスは役に立ちます、アドバイスに感謝します。

4

1 に答える 1

3

Postgresには「SELECT」トリガーはありません。

SQLを次のように変更した場合:

select foo from bar where baz=#{qux}
union all
select null where not exists (select 1 from bar where baz=#{qux})

その後、同じ効果が得られます。列にその値を持つ行がない場合は、NULL値を返しますbaz

(免責事項:MyBatisがわからないので、そのようなステートメントを指定できるかどうかわかりません)

于 2012-05-21T21:48:37.717 に答える