Функция для вставки данных в разные таблицы - PullRequest
0 голосов
/ 12 января 2019

У меня есть три таблицы в PostgreSQL:

CREATE TABLE organization (id int, name text, parent_id int);

CREATE TABLE staff (id int, name text, family text, organization_id int); 

CREATE TABLE clock(id int, staff_id int, Date date, Time time);

Мне нужна функция, которая получает все поля этих таблиц в качестве входных данных (всего 8), а затем вставляет эти входные данные в соответствующие поля таблиц

Вот мой код:

CREATE FUNCTION insert_into_tables(org_name character varying(50), org_PID int, person_name character varying(50),_family character varying(50), org_id int, staff_id int,_date date, _time time without time zone) 
RETURNS void AS $$
BEGIN

INSERT INTO "Org".organisation("Name", "PID")
VALUES ($1, $2);
INSERT INTO "Org".staff("Name", "Family", "Organization_id")
VALUES ($3, $4, $5);
INSERT INTO "Org"."Clock"("Staff_Id", "Date", "Time")
VALUES ($6, $7, $8);

END;
$$ LANGUAGE plpgsql;

select * from insert_into_tables('SASAD',9,'mamad','Imani',2,2,1397-10-22,'08:26:47')

Но данные не вставлены. Я получаю ошибку:

ОШИБКА: функция insert_into_tables (неизвестно, целое, неизвестно, неизвестно, целое, целое, целое, неизвестно) не существует

ЛИНИЯ 17: выберите * из insert_into_tables ('SASAD', 9, 'mamad', 'Imani', 2 ... ^

СОВЕТ: ни одна функция не соответствует заданному имени и типу аргумента. Возможно, вам придется добавить явные приведения типов.

Где я ошибся?

1 Ответ

0 голосов
/ 12 января 2019

Это потому, что второй последний параметр объявлен как date, а не int. Вы забыли одинарные кавычки:

select * from insert_into_tables('SASAD',9,'mamad','Imani',2,2,<b>'</b>1397-10-22<b>'</b>,'08:26:47');

Без одинарных кавычек это интерпретируется как вычитание между 3 integer константами, что приводит к integer: 1397-10-22 = 1365.

Также исправьте свои идентификаторы: двойные кавычки сохраняют буквы в верхнем регистре, поэтому "Name" отличается от name и т. Д. См .:

...