Database 执行自定义函数时出现Postgresql错误42883

Database 执行自定义函数时出现Postgresql错误42883,database,postgresql,plpgsql,Database,Postgresql,Plpgsql,我找这个没什么运气。。。我希望你能帮助我 这是我的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,

我找这个没什么运气。。。我希望你能帮助我

这是我的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中的“Functions”文件夹中看到函数:

当我尝试使用以下方法测试功能时:

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,1,1);
但函数期望最后一个参数的第三个为
varchar

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

因为PostgreSQL支持具有相同名称和不同参数的函数,所以它无法判断您是要使用不同参数调用此函数,还是当前数据库中缺少的其他同名函数。这就是它以这种方式报告错误的原因。

事实上就是这个错误!我把它改成整数,它就成功了!谢谢克雷格·林格!当我这样做的时候,几乎是午夜,我看不到这个错误!除息的