Проблема с синтаксисом на Postgresql
На постгри только начала работать. Борюсь с синтаксисом. Пишу запрос ниже
DO $$
declare
v_class_code varchar(12);
v_class_name varchar(128);
v_firms_id varchar(12) ;
v_right_flags int ;
begin
update quik.classes
set class_name = 'Test'
where id = 1
returning class_code, class_name, firms_id, right_flags into v_class_code, v_class_name, v_firms_id, v_right_flags;
select v_class_code, v_class_name, v_firms_id, v_right_flags
end;
$$ LANGUAGE plpgsql;
Выдается ошибка ERROR: syntax error at end of input LINE 15: $$ LANGUAGE plpgsql; ^ SQL state: 42601 Character: 376
Что не так?
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
- Язык обычно указывается в начале, а не в конце. Анонимный блок - это не процедура. Впрочем, так можно, это не ошибка.
- Зачем нужны переменные и RETURNING, если результат нигде не будет использован?
- То же самое - о финальном недописанном SELECT. Да и в принципе SELECT в выходной поток в анонимном блоке - не бывает.
CREATE TABLE classes (
class_code VARCHAR(12),
class_name VARCHAR(128),
firms_id VARCHAR(12),
right_flags INT,
id INT
);
INSERT INTO classes VALUES
('code 1', 'class name 1', 'firm 1', 1, 1),
('code 2', 'class name 2', 'firm 2', 2, 2),
('code 3', 'class name 3', 'firm 3', 3, 3);
DO $$
/*
declare
v_class_code varchar(12);
v_class_name varchar(128);
v_firms_id varchar(12) ;
v_right_flags int ;
*/
begin
update classes
set class_name = 'Test'
where id = 1
/* returning class_code, class_name, firms_id, right_flags into v_class_code, v_class_name, v_firms_id, v_right_flags */ ;
-- select v_class_code, v_class_name, v_firms_id, v_right_flags
end
$$ LANGUAGE plpgsql;
SELECT * FROM classes;
class_code | class_name | firms_id | right_flags | id |
---|---|---|---|---|
code 2 | class name 2 | firm 2 | 2 | 2 |
code 3 | class name 3 | firm 3 | 3 | 3 |
code 1 | Test | firm 1 | 1 | 1 |