【发布时间】:2023-03-23 17:36:01
【问题描述】:
我一直在尝试很多方法来让它发挥作用。据我所知,我已经按照文档进行了操作,但这只是行不通。
各位有 Postgres 经验的人可以推荐一个修复方法吗?我将永远感激不尽。
我使用的是 1.18.1 版(2014 年 6 月 9 日,修订版:REL-1_18_1)
我的创建代码:
set search_path = PsychoProductions;
create or replace function fcn_insert_person(
-- person table
prm_role_id int,
prm_first_name text,
prm_last_name text,
prm_organization text,
prm_website text,
prm_default_billing_method_id text,
prm_active boolean,
-- address table
prm_address_type_id int,
prm_address text,
prm_city text,
prm_state text,
prm_zip_code text,
-- email table
prm_email_address text,
prm_email_type_id int,
-- phone table
prm_phone_number text,
prm_phone_type_id int
)
returns void as
$$
set search_patch = PsychoProductions;
insert into PsychoProductions.person (
role_id,
first_name,
last_name,
organization,
website,
default_billing_method_id,
active
)
values (
prm_role_id,
prm_first_name,
prm_last_name,
prm_organization,
prm_website,
prm_default_Billing_Method_ID,
prm_active
);
insert into PsychoProductions.address (
person_id,
address_type_id,
address,
city,
state,
zip_code
)
values (
( select currval('person_id_seq') ),
prm_address_type_id,
prm_address,
prm_city,
prm_state,
prm_zip_code
);
insert into email (
person_id,
email_address,
email_type_id
)
values (
( select currval('person_id_seq') ),
prm_email_address,
prm_email_type_id
);
insert into phone (
person_id,
phone_number,
phone_type_id
)
values (
( select currval('person_id_seq') ),
prm_phone_number,
prm_phone_type_id
);
-- end;
$$
language sql;
我的执行/调用代码:
set search_path = PsychoProductions;
select fcn_insert_person(
-- NOTE: DO NOT REMOVE QUOTATION MARKS
-- person table
3, -- customer
'firstname',
'lastname',
'organization',
'website',
2, -- net 30
True, -- active
-- address table
1, -- unique
'address',
'city',
'state',
'zip',
-- email table
'email',
1, -- business email
-- phone table
'phone',
1 -- mobile
);
错误:
ERROR: function fcn_insert_person(integer, unknown, unknown, unknown, unknown, integer, boolean, integer, unknown, unknown, unknown, unknown, unknown, integer, unknown, integer) does not exist
LINE 2: select fcn_insert_person(
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
********** Error **********
ERROR: function fcn_insert_person(integer, unknown, unknown, unknown, unknown, integer, boolean, integer, unknown, unknown, unknown, unknown, unknown, integer, unknown, integer) does not exist
SQL state: 42883
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Character: 45
【问题讨论】:
-
最后,两个答案都很好。 200_success 帮助我意识到我需要进行健全性检查,并且我发现我正在查看的架构设计是 my old version 而不是 my final version。 @PavelStehule 建议显式传递参数(我将开始这样做)以及使错误处理更容易的方法。我接受了 Pavel 的花时间来解释这一切。
-
1.18.1看起来像您的 pgAdmin 版本,而不是 Postgres。请修复。您将获得带有SELECT version()的 Postgres 版本。
标签: sql postgresql plpgsql