2016-12-13 16 views
0

は私がPostgreSQLでテーブルとユーザ定義レコードを作成するには?

create table x(
    x_id   number, 
    x_description VARCHAR2(40), 
    x_date   DATE 
) 

は、例えば、X名のPL/SQLテーブルは、それぞれ数や文字データや日付を保存する3つの列、でデータベーステーブルとしてモデル化されているOracleには、次の表を持っています。 SQL文を使用してPL/SQL表を操作することはできませんが、主キーは行に配列のようなアクセスを提供します。

declare 
    type tab_x is table of x%rowtype; 
    row x%rowtype; 
    list tab_x; 
begin 
    begin 
    list.delete; 
    exception 
    when collection_is_null then 
     list := tab_x(); 
    end; 

    row.observacion := 'Jorge'; 
    row.numero  := '1'; 
    row.fch_ins  := sysdate; 
    list.extend; 
    list(list.last) := row; 

    row.observacion := 'Andrea'; 
    row.numero  := '2'; 
    row.fch_ins  := sysdate; 
    list.extend; 
    list(list.last) := row; 

    row.observacion := 'Jose'; 
    row.numero  := '3'; 
    row.fch_ins  := sysdate; 
    list.extend; 
    list(list.last) := row; 

    row.observacion := 'Lucas'; 
    row.numero  := '4'; 
    row.fch_ins  := sysdate; 
    list.extend; 
    list(list.last) := row; 

    for i in list.first .. list.last loop 
    row := list(i); 
    dbms_output.put_line(row.x_id ||' - '|| row.x_description ||' - '|| row.x_date); 
    end loop; 

end; 

出力:

1 - ホルヘ - 13/12/16

2 - ホセ - 13/12/16

3 - アンドレア - 13/12/16

4 - Lucas - 13/12/16

私はこれをPostgreSQLでどうやって行うことができますか?

+0

それとも、あなたは 'RETURNSのSETOFのX '(またはそれ以上の明示的/カスタムを使用することができます'RETURNS TABLE')&[' RETURN NEXT'/'RETURN QUERY']で一時テーブルを避けることができます(https://www.postgresql.org/docs/9.6/static/plpgsql-control-structures.html#AEN65553) – pozs

答えて

0

AFAIK "table of"はpgには存在しませんが、一時テーブルを使用できます。通常のINSERT/UPDATE/DELETEコマンドを使用して作業します。また、%rowtypeは通常どおりそれらに作用します。テンポラリテーブルは、セッションが存在するまでのみ存在します。

プラス - 「dbms_output.put_line」がpgの「raise NOTICE」であることがわかります。匿名ブロック使用としてそれを実行するための

プラス「あなたのコードここに... $$ DO ... $$」

関連する問題