PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

tipo definito dall'utente come parametri di input nella funzione PostgreSQL

Per chiamare la funzione da una query SQL, devi eseguire il cast dei parametri nel tuo tipo personalizzato come nell'esempio seguente.

select form_insertion(array[
    cast(row('Form 1', 1, current_date, 1, current_date, 'This is form 1', 
        array[
            cast(row('section-1', 'Section One', 1) as section),
            cast(row('section-2', 'Section Two', 2) as section),
            cast(row('section-3', 'Section Three', 3) as section)
        ]
    ) as form_details),
    cast(row('Form 2', 2, current_date, 1, current_date, 'This is form 2', 
        array[
            cast(row('section-2', 'Section Two', 2) as section),
            cast(row('section-3', 'Section Three', 3) as section)
        ]
    ) as form_details),
    cast(row('Form 3', 1, current_date, 1, current_date, 'This is form 3', 
        array[
            cast(row('section-1', 'Section One', 1) as section),
            cast(row('section-3', 'Section Three', 3) as section)
        ]
    ) as form_details)
])

Nota che gli array PostgreSQL non hanno una proprietà .COUNT. Puoi scorrere un array per intervallo di indici con array_superiore funzione:

for i IN 1..array_upper(formdetails, 1)
LOOP 
   -- your code here
END LOOP;

Da PostgreSQL 9.1, puoi usare l'istruzione FOREACH per scorrere l'array:

create or replace function form_insertion(formdetails form_details[])
    returns varchar as $$
declare
    detail form_details;
    sec section;
begin
    foreach detail in array formdetails
    LOOP 
       RAISE NOTICE '%', detail.formName;

       foreach sec in array detail.sections
       LOOP
         raise NOTICE '%', sec.sectionName;
       END LOOP;
    END LOOP;
    return '';
end;$$
    language plpgsql;