2014-10-01 6 views
1

я искал для этого без особой удачи ... Я надеюсь, что вы можете мне помочь ...Postgresql Ошибка 42883 при выполнении пользовательской функции

Это мой PL/функция PGSQL:

CREATE OR REPLACE FUNCTION crearempresa(
    _id_empresa integer DEFAULT NULL::integer, 
    _ci_rif character varying DEFAULT NULL::character varying, 
    _nombre character varying DEFAULT NULL::character varying, 
    _persona_contacto character varying DEFAULT NULL::character varying, 
    _telefono_movil character varying DEFAULT NULL::character varying, 
    _telefono_oficina character varying DEFAULT NULL::character varying, 
    _fax character varying DEFAULT NULL::character varying, 
    _email character varying DEFAULT NULL::character varying, 
    _email_alterno character varying DEFAULT NULL::character varying, 
    _direccion character varying DEFAULT NULL::character varying, 
    _tipoempresa character varying DEFAULT NULL::character varying, 
    _cod_usuario integer DEFAULT NULL::integer, 
    _estado_registro integer DEFAULT NULL::integer 
) 
    RETURNS character varying AS 
$BODY$ 
    DECLARE 
     retorno character varying; 
    BEGIN 
     IF _id_empresa = 0 THEN 
      _id_empresa = NULL; 
     END IF; 
     IF (select id_empresa from empresa where id_empresa = _id_empresa) is null THEN 
      IF (Select MAX(id_empresa) from empresa) is null THEN 
       _id_empresa = 1; 
      ELSE 
       _id_empresa = (Select MAX(id_empresa) + 1 from empresa); 
      END IF; 
      insert into empresa (
       id_empresa,ci_rif,nombre,persona_contacto,telefono_movil,telefono_oficina,fax,email, 
       email_alterno,direccion,id_tipo_empresa,cod_usuario,fecha_creacion,fecha_actualizacion,estado_registro) 
      values (
       _id_empresa,_ci_rif,_nombre,_persona_contacto,_telefono_movil,_telefono_oficina,_fax,_email,    
       _email_alterno,_direccion,_tipoempresa,_cod_usuario,CURRENT_DATE,CURRENT_DATE,_estado_registro); 
      retorno = '1';  
     ELSE 
      Update empresa 
       set ci_rif = _ci_rif,    
        nombre = _nombre,    
        persona_contacto = _persona_contacto,    
        telefono_movil = _telefono_movil,   
        telefono_oficina = _telefono_oficina,    
        fax = _fax,   
        email = _email,   
        email_alterno = _email_alterno,   
        direccion = _direccion,  
        id_tipo_empresa = _tipoempresa, 
        cod_usuario = _cod_usuario,   
        fecha_actualizacion = CURRENT_DATE,   
        estado_registro = _estado_registro 
      where id_empresa = _id_empresa; 
      retorno = '2'; 
     END IF;     
     RETURN retorno; 
    END; 
$BODY$ 
LANGUAGE plpgsql VOLATILE COST 100; 

Это было создано в порядке, потому что я могу видеть функцию внутри «функций» папка, в pgAdminIII:

enter image description here

я, когда я пытаюсь проверить функцию с помощью:

select crearempresa (1,'a','f','a','b','c','d','e','f','g',4,1,1); 

Я получаю следующее сообщение об ошибке:

ERROR: no existe la función crearempresa(integer, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, integer, integer, integer) 
LINE 1: select crearempresa (1,'a','f','a','b','c','d','e','f','g',4... 
      ^
HINT: Ninguna función coincide en el nombre y tipos de argumentos. Puede ser necesario agregar conversión explícita de tipos. 
********** Error ********** 

ERROR: no existe la función crearempresa(integer, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, integer, integer, integer) 
SQL state: 42883 
Hint: Ninguna función coincide en el nombre y tipos de argumentos. Puede ser necesario agregar conversión explícita de tipos. 
Character: 8 

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

Надеется, что вы можете помочь мне понять это ...

Спасибо заранее!

ответ

4

Типы аргументов не совпадают.

Вашего последние три аргумента в вызове функций являются целыми числами:

4,1,1); 

но функция ожидает, что третий-из-последнего аргумента быть varchar:

_tipoempresa character varying DEFAULT NULL::character varying, 
_cod_usuario integer DEFAULT NULL::integer, 
_estado_registro integer DEFAULT NULL::integer 

Поскольку PostgreSQL поддерживает функцию с одно и то же имя и разные аргументы, он не может сказать, хотите ли вы вызвать эту функцию с разными аргументами или какую-либо другую функцию с тем же именем, которая отсутствует в текущей базе данных. Вот почему он сообщает об ошибке так, как она делает.

+0

Это была настоящая ошибка! Я меняю его на целое, и он сработал! Спасибо Крейг Рингер! Когда я это сделал, было почти полночь, и я не мог видеть эту ошибку! XD –

Смежные вопросы