Как передать типизированный массив в качестве аргумента в PostgreSQL? - PullRequest
0 голосов
/ 01 ноября 2018

Попытка передать типизированные объекты массива в качестве аргумента и ошибки.

Как я могу передать 2 объекта EmployeeType как массив в моем случае?

 1. SELECT employeeTester(row ( row (687678655453,'Yan','Burkov','Yan.Burkov1992@gmail.com','@_+Yan987pl'),row (897689768768,'Ludmila','Burkov','Ludmila.Burkov1967@gmail.com','+_@Ludmia87vb')));

ОШИБКА: функция employeetester (запись) не существует

 2. `SELECT employeeTester( row (687678655453,'Yan','Burkov','Yan.Burkov1992@gmail.com','@_+Yan987pl'),row (897689768768,'Ludmila','Burkov','Ludmila.Burkov1967@gmail.com','+_@Ludmia87vb'));`

ОШИБКА: функция employeetester (запись, запись) не существует

 3. `SELECT employeeTester(ARRAY [row(687678655453,'Yan','Burkov','Yan.Burkov1992@gmail.com','@_+Yan987pl'), row (897689768768,'Ludmila','Burkov','Ludmila.Burkov1967@gmail.com','+_@Ludmia87vb')]);`

ОШИБКА: функция employeetester (запись []) не существует

 CREATE OR REPLACE FUNCTION employeeTester(employees EmployeeType[]) RETURNS text [] AS $$

    DECLARE counter SMALLINT = 0; emp EmployeeType; errors text [];


    BEGIN

        FOREACH emp IN ARRAY employees LOOP

                RAISE NOTICE 'Employee data %',emp;

        END LOOP;

        RETURN errors;

    END;


$$ LANGUAGE plpgsql;

Работа с одним типизированным объектом:

CREATE OR REPLACE FUNCTION employeeTester(employees EmployeeType) RETURNS text [] AS $$

    errors text [];


    BEGIN

        RAISE NOTICE 'Employee id %',employees.emp_id;
        RAISE NOTICE 'Employee FirstName %',employees.firstname;
        RAISE NOTICE 'Employee LastName %',employees.lastname;
        RAISE NOTICE 'Employee Email %',employees.email;
        RAISE NOTICE 'Employee Password %',employees.e_password;

        RETURN errors;

    END;


 $$ LANGUAGE plpgsql;

Результат:

[2018-11-01 08:13:08] [00000] Employee id 687678655453
[2018-11-01 08:13:08] [00000] Employee FirstName Yan
[2018-11-01 08:13:08] [00000] Employee LastName Burkov
[2018-11-01 08:13:08] [00000] Employee Email Yan.Burkov1992@gmail.com
[2018-11-01 08:13:08] [00000] Employee Password @_+Yan987pl

1 Ответ

0 голосов
/ 01 ноября 2018

Если вы хотите передать массив записей, позвоните вот так.

select empTester(ARRAY[row(687678655453,'Yan','Burkov','Yan.Burkov1992@gmail.com','@_+Yan987pl')
 ,row(687678653,'sen','Burkov','Sen.Burkov1992@gmail.com','@_+Sen987pl')]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...