2016-12-13 3 views
0

У меня есть следующие таблицы в OracleКак создать таблицы и пользовательские записи в PostgreSQL?

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

Например, PL/SQL таблица имен х моделируется в виде таблицы базы данных с тремя колонками, которые хранят номерные и символьные данные и даты соответственно. Хотя вы не можете использовать операторы 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

Или, вы можете использовать 'ВОЗВРАТ 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 работает на них, как обычно. Таблица Temp живет только до тех пор, пока сессия не существует.

Плюс - вы, вероятно, знаете, что «dbms_output.put_line» является «raise NOTICE» на стр.

Plus, чтобы запустить его использование в качестве анонимного блока «DO $$ ... вот код ... $$»