2015-03-23 2 views
0

Я создаю хранимую процедуру, которая примет массив или запись в качестве аргумента.ОШИБКА: ошибка синтаксиса на или рядом с «сайтом» в PostgreSQL

CREATE TYPE site AS(
    siteid integer, 
    packageid integer, 
    status text 
); 

CREATE OR REPLACE FUNCTION packageinfo(IN 
info site[] 
)RETURNS VARCHAR AS $$ 
DECLARE 
    info_element site; 
BEGIN 
    FOREACH info_element IN ARRAY info 
    LOOP 
     INSERT INTO sitepackage(
      siteid, 
      packageid, 
      status 
     ) VALUES(
      info_element.siteid, 
      info_element.packageid, 
      info_element.status 
     ); 
    END LOOP; 
    RETURN 'OK'; 
END; 
$$ LANGUAGE sql; 

Но это дает ОШИБКА: ошибка синтаксиса или вблизи «сайта» ЛИНИЯ 11: info_element сайт;

ответ

0

С помощью оператора language SQL вы определяете свою функцию как функцию SQL. Блок DECLARE является частью структуры функций PL/pgSQL, поэтому вам необходимо создать функцию с помощью LANGUAGE plpgsql.

Более подробную информацию из документации:

Смежные вопросы