我在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')
但没有插入数据。我知道错误:
错误:函数插入TytoTyTABLE(未知、整数、未知、未知、整数、整数、整数、未知)不存在
第17行:从insert_into_tables('SASAD',9,'mamad','Imani',2。。。^
提示:没有函数与给定的名称和参数类型匹配。您可能需要添加显式类型转换。
我哪里做错了?
最佳答案
这是因为最后第二个参数声明为date
,而不是int
。你忘了单引号:
select * from insert_into_tables('SASAD',9,'mamad','Imani',2,2,'1397-10-22','08:26:47');
如果没有单引号,这将被解释为3个
integer
常量之间的减法运算,从而得到integer
:1397-10-22 = 1365
。还可以修复您的标识符:双引号保留大写字母,因此
"Name"
与name
等不同。请参见:Are PostgreSQL column names case-sensitive?
关于postgresql - 将数据插入不同表的功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54157429/