将数据插入不同表的功能

时间:2019-01-12 06:57:03

标签: postgresql sql-insert sql-function

我在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 :(得分:1)

这是因为倒数第二个参数声明为date,而不是int。您忘记了单引号:

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

没有单引号,这被解释为3个integer常数之间的减法,从而产生integer1397-10-22 = 1365

还可以修改标识符:双引号保留大写字母,因此"Name"name等不同。请参见: