如何直接在postgresql中执行存储过程?

Posted

技术标签:

【中文标题】如何直接在postgresql中执行存储过程?【英文标题】:How to execute a stored procedure directly in postgresql? 【发布时间】:2014-04-25 13:03:13 【问题描述】:

我已经创建了一个类似的程序:

CREATE OR REPLACE FUNCTION insert_user_ax_register(
   user_name character varying(50), 
   password character varying(300), 
   role_id character varying(10), 
   created_dt date, 
   status boolean, 
   email character varying(50), 
   join_date character varying(30), 
   phone_no bigint, 
   client_address character varying(200), 
   full_name character varying(100), 
   financial_year character varying(10)) 
RETURNS void 
AS $BODY$ 
declare 
begin 
  INSERT INTO ax_register(user_name,password,role_id,created_dt,status,email,join_date,phone_no,client_address,full_name,financial_year) 
  VALUES (user_name,password,role_id,now(),true,email,join_date,phone_no,client_address,full_name,financial_year); 
end 
$BODY$ 
LANGUAGE plpgsql VOLATILE

并尝试像这样执行它:

SELECT * from insert_user_ax_register('debasrita','debasrita','client001',now(),'t','abc@gmail.com',now(),'ctc','debasrita','2014-15',9090909090);

但它会引发以下错误:

错误:函数 insert_user_ax_register(unknown, unknown, unknown, timestamp with time zone, unknown, unknown, timestamp with time zone, unknown, unknown, unknown, bigint) 不存在 SQL 状态:42883 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。 字符:16

请帮我解决这个问题。我是 pgsql 的新手,无法从谷歌找到任何解决方案。我正在使用pgsql 9.1.3

我可以知道实现目标的正确方法是什么吗?

【问题讨论】:

它仍然无法工作@a_horse_with_no_name 【参考方案1】:

错误消息告诉您需要查找的内容:

"没有函数匹配给定的名称和参数类型"

由于函数 name 似乎是正确的,它只能是您传递的参数。所以记下为哪个参数传递了哪个值:

'debasrita' --> 用户名字符变化(50) 'debasrita' --> 密码字符变化(300) 'client001' --> role_id 字符变化(10) created_dt 日期 --> now() 状态布尔值,--> 't' 电子邮件 varchar(50) --> 'abc@gmail.com' join_date varchar(30) --> now() phone_no bigint --> 'ctc' client_address varchar(200) --> 'debasrita' 全名 varchar(100) --> '2014-15' Financial_year varchar(10) --> 9090909090

因此您需要调整参数类型,例如将join_date 定义为日期,而不是varchar,或者调整您为每个参数传递的值。

最后你需要像这样调用函数:

SELECT insert_user_ax_register(...);

而不是select * from ...

【讨论】:

嘿谢谢!!你纠正了我的错误:) 但我必须说 select * from ... 也可以。【参考方案2】:

如果您使用 pgAdmintool,只需右键单击架构下的函数或存储过程,然后选择属性,然后选择参数。现在插入您想要插入的值。

【讨论】:

以上是关于如何直接在postgresql中执行存储过程?的主要内容,如果未能解决你的问题,请参考以下文章

JPA 和 PostgreSQL:如何调用具有 void 返回类型的存储过程?

PostgreSQL存储过程

如何在 PostgreSQL 13 中使用 INOUT 参数调用存储过程(不是函数)

如何查看PostgreSQL正在执行的SQL

为啥我在从 Java 批量执行 PostgreSQL 存储过程时收到错误消息,提示“未预期结果”?

如何在plsql中执行存储过程