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

Deb*_*ebs 8 postgresql php-pgsql

我创建了一个过程,如:

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
Run Code Online (Sandbox Code Playgroud)

并试图像这样执行它:

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

但它会引发以下错误:

错误:函数insert_user_ax_register(未知,未知,未知,带时区的时间戳,未知,未知,带时区的时间戳,未知,未知,未知,bigint)不存在SQL状态:42883提示:没有函数匹配给定的名称和参数类型.您可能需要添加显式类型转换.性格:16

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

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

a_h*_*ame 11

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

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

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

'debasrita'                 --> user_name character varying(50)
'debasrita'                 --> password character varying(300)
'client001'                 --> role_id character varying(10)
created_dt date             --> now()
status boolean,             --> 't'
email varchar(50)           --> 'abc@gmail.com'
join_date varchar(30)       --> now()       << first error: now() is not a character constant
phone_no bigint             --> 'ctc'       << second error: 'ctc' is not a bigint
client_address varchar(200) -->  'debasrita'
full_name varchar(100)      --> '2014-15'
financial_year varchar(10)  --> 9090909090  << third error: 9090909090  is not a character literal 

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

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

SELECT insert_user_ax_register(...);
Run Code Online (Sandbox Code Playgroud)

而不是 select * from ...