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

9
我创建了一个类似这样的过程:
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不熟悉,无法从Google中找到任何解决方案。我正在使用pgsql 9.1.3 请问我实现目标的正确方法是什么?

它仍然不起作用 @a_horse_with_no_name - Debs
2个回答

16
错误信息告诉你需要查找什么:
“没有函数与给定的名称和参数类型匹配”
因为函数名称看起来是正确的,所以问题只能出在传递的参数上。因此,请写下每个参数传递的值:
'debasrita' --> user_name字符变长(50) 'debasrita' --> password字符变长(300) 'client001' --> role_id字符变长(10) created_dt日期 --> now() status布尔类型, --> 't' email varchar(50) --> 'abc@gmail.com' join_date varchar(30) --> now() << 第一个错误:now()不是字符常量 phone_no大整型 --> 'ctc' << 第二个错误:'ctc'不是大整型 client_address varchar(200) --> 'debasrita' full_name varchar(100) --> '2014-15' financial_year varchar(10) --> 9090909090 << 第三个错误:9090909090不是字符文字 因此,你需要调整参数类型,例如将join_date定义为日期而不是varchar,或者调整你为每个参数传递的值。
最后,你需要这样调用该函数:
SELECT insert_user_ax_register(...);

使用select * from ...不如...


1
嘿,谢谢!你纠正了我的错误 :) 但我必须说,select * from ... 也可以工作。 - Debs

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接