2011-11-17 63 views
3

我函數是這樣的:PostgreSQL,函數使用?

CREATE OR REPLACE FUNCTION f_insert_account(usernames character varying, passwds 
character varying, identitass integer, jeniss smallint, statuss smallint, cnames 
character varying, unames character varying) 
RETURNS character varying AS 
$BODY$ 
DECLARE 
iduserx int4; 
usernamex varchar; 
er int2:=0; 
pesan varchar:=''; 
BEGIN 
insert into t_account(username,passwd,identitas,jenis,status,cname,uname) 
values(usernamex,f_encr(passwds),identitass,jeniss,statuss,cnames,unames); 
RETURN pesan; 
END; 
$BODY$ 
LANGUAGE 'plpgsql' VOLATILE; 
ALTER FUNCTION f_insert_account(usernames character varying, passwds character 
varying, identitass integer, jeniss smallint, statuss smallint, cnames character 
varying, unames character varying) OWNER TO postgres; 

GRANT EXECUTE ON FUNCTION f_insert_account(usernames character varying, passwds 
character varying, identitass integer, jeniss smallint, statuss smallint, cnames 
character varying, unames character varying) TO public; 

GRANT EXECUTE ON FUNCTION f_insert_account(usernames character varying, passwds 
character varying, identitass integer, jeniss smallint, statuss smallint, cnames 
character varying, unames character varying) TO postgres; 

然後我用的是這樣的:

select f_insert_account('dayat', 'dayat', 1, 1, 1, 'cname', 'uname') 

錯誤這樣總是出現: 錯誤:功能f_insert_account( 「未知」, 「未知」,整,整數,整數,「未知」,「未知」)不存在 SQL狀態:42883 提示:沒有函數與給定的名稱和參數類型匹配。您可能需要添加明確的類型轉換。 字符:8

爲什麼?

感謝名單,

Dayat

+1

您顯示創建'f_insert_account()',然後用'f_account_sp()'抱怨錯誤。請澄清。 –

回答

9

smallint數據類型是一個有點疑難雜症的,因爲你需要轉換這些:

select f_insert_account('dayat', 'dayat', 1, 1::smallint, 1::smallint, 'cname', 'uname') 

如果你想避免這種情況,我建議改變你函數定義使用普通的舊的integer類型。

+0

Thanx Mike,它的工作原理。 :) – dayat

+1

+1,很好。 –