sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLはカスタムデータ型の関数を返します

    これはうまくいくはずです。 enum 問題はないはずです。 Postgres9.1および9.2でテスト済み

    CREATE TYPE building_code AS ENUM ('IT','EMS','HSB','ENG');
    CREATE TEMP TABLE venue (id int PRIMARY KEY, building_code building_code);
    INSERT INTO venue VALUES (1, 'ENG');
    
    CREATE OR REPLACE FUNCTION room_code(_id int) --!
      RETURNS building_code AS 
    $func$
    SELECT building_code FROM venue v WHERE v.id = $1 -- !
    $func$ LANGUAGE SQL;
    
    SELECT * FROM room_code(1);
    

    除く ...

    • 9.2より前のバージョン 位置(数値)パラメータのみを使用できます ($1 )SQL関数内(plpgsql関数とは異なります)。
      9.2 +内 列名が優先されるため、WHERE 元のコードの句は常にTRUEであり、すべての行が修飾されます。ただし、関数はSETOF building_codeを返さないため、最初の行のみを返します。 。
      パラメーターの名前を変更するか、位置パラメーターを使用するか、できれば両方を使用します。
      競合するパラメーター名を使用する必要がある場合は、関数名を使用してパラメーターを修飾することにより、設定をオーバーライドできます。いいね:

      ... WHERE v.id = room_code.id
      
    • タイプ名を列名として使用しないでください。

    • roomCodeのような引用符で囲まれていない大文字と小文字が混在する名前は使用しないでください 、二重引用符で囲まない限り、小文字に折りたたまれます:"roomCode"

    -> SQLfiddle 3つのバリエーションで




    1. SQLServerのVARBINARY列にByte[]を挿入するにはどうすればよいですか

    2. SQLServerエージェントアラート

    3. MyBatisを使用してOracleで最後の挿入IDを取得するにはどうすればよいですか?

    4. グループ別のSQLServer累積合計