2013-05-29 39 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)'代替。 –