当前位置: 首页 > 知识库问答 >
问题:

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

丌官积厚
2023-03-14

我创建了一个过程,如:

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

请问达到目的的正确方法是什么?

共有2个答案

陈俊郎
2023-03-14

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

晏沈义
2023-03-14

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

“没有函数与给定名称和参数类型匹配”

由于函数名称似乎正确,因此它只能是您正在传递的参数。因此,写下为哪个参数传递了哪个值:

'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定义为date,而不是varchar,或者调整为每个参数传递的值。

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

SELECT insert_user_ax_register(...);

而不是select*from

 类似资料:
  • 问题内容: 简而言之:我正在尝试在Entity Framework中运行Oracle存储过程(我知道这听起来很奇怪,但是在一般应用程序中使用Entity Framework,但是由于修改密钥的限制,EF无法处理此特定命令。值)。 过程具有一些参数(仅IN),并更新表中的值。我通过运行测试了它: 它工作正常。 我的参数定义如下: 我的查询是: 我正在尝试从C#代码执行它。即通过运行: 我收到错误OR

  • 问题内容: 如果我在SQL中创建一个存储过程并在BEGIN / END TRANSACTION中调用它(),那么此其他存储过程是否也属于事务? 我不知道它是否像C#中的try / catches一样工作。 问题答案: 是的,您在“开始事务”和“提交”(或“回滚”)之间进行的 所有操作都是 事务的一部分。

  • 作为Hibernate中BLOB值的后期创建钩子的替代方法,我认为数据库内触发器是更好的解决方案,因此我尝试编写以下触发器: 将与触发器一起使用,例如: 然而,我无法计算出构建语句的语法。 [2022-03-09 16:14:51][42601]ERROR:语法错误在或接近lo_oid [2022-03-09 16:14:51]位置:279 真的不可能像在其他语句中那样使用变量吗?

  • 我如何在服务器的另一个存储过程中执行SQL存储过程?我将如何传递第二个过程的参数。?

  • 问题内容: 我想使用Oracle SQL Developer异步执行存储过程很多次。 伪代码 存储过程的目的是进行一些插入。为了进行测试,我只想异步执行存储过程很多次。我不在乎任何返回值。 有没有一种 “简便”的 方法来做到这一点? 问题答案: 由于您要模拟N个会话,每个会话均调用该过程1000 / N次,因此我可能会执行类似的操作 本示例将启动10个会话,每个会话将快速连续执行该过程100次,前