Выполните INSERT INTO в PLPG SQL, используя переменные в качестве значений - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь создать функцию, которая добавляет запись с заданными переменными в качестве значений. Мой код:

CREATE OR REPLACE FUNCTION ADD_FILM(id INTEGER, t VARCHAR, y INTEGER, p REAL) RETURNS VARCHAR AS $$
DECLARE
    query VARCHAR;
BEGIN
    query = 'insert into films (id_film, title, year_production, price) values ('||id||','||t||','||y||','||p||')';
    EXECUTE query;
RETURN 'OK';
EXCEPTION
    WHEN UNIQUE_VIOLATION THEN
    RAISE NOTICE 'Incorrect ID, next available ID set';
    RETURN 0;
END;
$$ LANGUAGE PLPGSQL;
SELECT ADD_FILM(1,'aaa','2020','10');

Следующее выполнение функции заканчивается ошибкой. Что не так с синтаксисом?

ОШИБКА: столбец "aaa" не существует

Ответы [ 2 ]

1 голос
/ 23 марта 2020

Я бы предпочел сделать так:

CREATE OR REPLACE FUNCTION ADD_FILM(id INTEGER, t VARCHAR, y INTEGER, p REAL) RETURNS 
VARCHAR AS $$
BEGIN
    insert into films (id_film, title, year_production, price) values (id,t,y,p);
RETURN 'OK';
....
....

См. Ссылку: https://www.postgresqltutorial.com/postgresql-create-procedure/

И назовите ее:

CALL ADD_FILM(1,'aaa','2020','10');
0 голосов
/ 23 марта 2020

Другое возможное решение с EXECUTE:

create table films
(
 id_film int,
 title varchar,
 year_production int,
 price real 
);
CREATE TABLE
CREATE OR REPLACE FUNCTION ADD_FILM(id INTEGER, t VARCHAR, y INTEGER, p REAL) RETURNS VARCHAR AS $$
DECLARE
    query VARCHAR;
BEGIN
    query = 'insert into films (id_film, title, year_production, price) values ($1,$2,$3,$4)';
    EXECUTE query USING id, t, y, p; 
RETURN 'OK';
EXCEPTION
    WHEN UNIQUE_VIOLATION THEN
    RAISE NOTICE 'Incorrect ID, next available ID set';
    RETURN 0;
END;
$$ LANGUAGE PLPGSQL;
CREATE FUNCTION
SELECT ADD_FILM(1,'aaa','2020','10');
 add_film 
----------
 OK
(1 row)

select * from films;
 id_film | title | year_production | price 
---------+-------+-----------------+-------
       1 | aaa   |            2020 |    10
(1 row)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...