2013-05-29 40 views
0

这是我的表PostgreSQL函数UNKOWN参数

CREATE TABLE pago 
(
    codigo serial NOT NULL, 
    codigocaja integer NOT NULL, 
    codigotarjeta integer, 
    codigocheque integer, 
    formapago character varying(1) NOT NULL, 
    tipocomp character varying(1) NOT NULL, 
    importetotal money NOT NULL, 
    fecha date NOT NULL, 
    codigoalumno integer NOT NULL, 
    codigodeposito integer, 
    vigencia boolean NOT NULL DEFAULT true, 
    descripcion character varying(200), 
    CONSTRAINT "PK_CodigoPago" PRIMARY KEY (codigo), 
    CONSTRAINT "FK_CodigoAlumno" FOREIGN KEY (codigoalumno) 
     REFERENCES alumno (codigoalumno) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION, 
    CONSTRAINT "FK_CodigoCaja" FOREIGN KEY (codigocaja) 
     REFERENCES caja (codigo) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION, 
    CONSTRAINT "FK_CodigoCheque" FOREIGN KEY (codigocheque) 
     REFERENCES cheque (codigo) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION, 
    CONSTRAINT "FK_CodigoDeposito" FOREIGN KEY (codigodeposito) 
     REFERENCES deposito (codigo) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION, 
    CONSTRAINT "FK_CodigoTarjeta" FOREIGN KEY (codigotarjeta) 
     REFERENCES tarjeta (codigo) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION, 
    CONSTRAINT "UN_CodigoPago" UNIQUE (codigo) 
) 
WITH (
    OIDS=FALSE 
); 
ALTER TABLE pago 
    OWNER TO postgres; 

,这是我对加入新行

CREATE OR REPLACE FUNCTION fn_inspagar(vcodcaja integer, vcodtarjeta integer, vcodcheque integer, vformapago character varying, vtipocomp character varying,vimporte money ,vfecha date, vcodal integer, vcoddeposito integer,vdesc character varying) 
    RETURNS void AS 
$BODY$ 
begin 

INSERT INTO pago(codigocaja,codigotarjeta,codigocheque,formapago,tipocomp,importetotal,fecha,codigoalumno,codigodeposito,descripcion) 
VALUES (vcodcaja,vcodtarjeta,vcodcheque,vformapago,vtipocomp,vimporte,vfecha,vcodal,vcoddeposito,vdesc); 

end; 
$BODY$ 
    LANGUAGE plpgsql VOLATILE 
    COST 100; 

和功能,当我执行这样

select * from fn_inspagar(1,2,null,'T','B',200,'2013-01-01',196,0,'matricula') 

功能结果我有以下

错误:没有existe lafunciónfn_inspagar(整数,整数,整数,未知,未知,整数,未知,整数,整数,未知)

+1

你的问题结束时的实际问题... – IMSoP

+0

对不起!现在更新! – MitoCode

+0

'fn_inspagar()'vs'fn_inspago()'。 (看起来像一个错字) – wildplasser

回答

2

因为钱的类型不是一个'平凡的转换',你需要投在你的例子中,当调用该函数时,值为money(否则PostgreSQL赋予整数转换的优先级)。

工作例如:

select * from fn_inspagar(1,2, null, 'T', 'B',CAST (200 as money) , '2013-01-01' ,196,0, 'matricula') 

这里看看让PostgreSQL上如何处理的函数签名更多的信息:我想你已经错过了

+0

谢谢!你解决了我的问题!非常感谢! – MitoCode

+2

链接到[版本8.1实际上是非目标](http://www.postgresql.org/support/versioning/)。 [我解决了它](http://meta.stackexchange.com/questions/108714/best-way-to-reference-the-postgresql-manual)。 –

+0

@MitoCode:请记住,许多可靠的消息来源会建议完全避免使用'CURRENCY'数据类型,并提倡使用'NUMERIC(p,s)'代替。 –