php-pgsql-如何在postgresql中直接执行存储过程



我创建了一个过程,如:

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(未知、未知、未知,带时区的时间戳、未知、不知道、带时区的时间表、未知、不明、不知道,bigint)不存在SQL状态:42883提示:没有任何函数与给定的名称和参数类型匹配。您可能需要添加显式类型强制转换。字符:16

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

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

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

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

由于函数name看起来是正确的,它只能是您正在传递的参数。因此,记下为哪个参数传递的值:

"debasrita"-->user_name字符变化(50)"debasrita"-->密码字符变化(300)"client001"-->role_id字符变化(10)created_dt日期-->now()状态布尔值,-->'t'电子邮件varchar(50)-->'abc@gmail.com'join_ date varchar(30)-->now()<lt;第一个错误:now()不是字符常量phone_no bigint->'ctc'<lt;第二个错误:"ctc"不是bigintclient_address varchar(200)-->'debasritafull_name varchar(100)-->'2014-15'financial_ year varchar(10)->9090909090<lt;第三个错误:9090909090不是字符文字

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

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

SELECT insert_user_ax_register(...);

而不是select * from ...

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

相关内容

  • 没有找到相关文章

最新更新