Как выполнить хранимую процедуру прямо в 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','[email protected]',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

Могу ли я узнать, как правильно достичь моей цели?


person Debs    schedule 25.04.2014    source источник
comment
Все еще не работает @a_horse_with_no_name   -  person Debs    schedule 25.04.2014


Ответы (2)


Сообщение об ошибке сообщает вам, что вам нужно искать:

«Ни одна функция не соответствует заданному имени и типам аргументов»

Поскольку функция name кажется правильной, это могут быть только параметры, которые вы передаете. Итак, запишите, какое значение передается для какого параметра:

'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)           --> '[email protected]'
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(...);

а не select * from ...

person a_horse_with_no_name    schedule 25.04.2014
comment
Привет, спасибо !! Вы исправили мою ошибку :) Но я должен сказать, что select * from ... тоже работает. - person Debs; 26.04.2014

Если вы используете pgAdmintool, просто щелкните правой кнопкой мыши функцию или Stored Proc в схеме и выберите свойства, а затем параметры. Теперь вставьте значение, которое вы хотите вставить.

person Ankur Srivastava    schedule 10.01.2017