2015-04-29 37 views
0
CREATE OR REPLACE FUNCTION public.create_user(_name TEXT, _pass TEXT, _iconid INTEGER) 
RETURNS user_info 
LANGUAGE sql 
AS $$ 
DECLARE 
    _newid INTEGER; 
BEGIN 
    INSERT INTO users(name, password, iconid) VALUES (_name, crypt(_pass, gen_salt('bf')), _iconid); 
    SELECT _newid = currval(pg_get_serial_sequence('users', 'id')); 


    SELECT u.id, u.name, u.rating, t.name, i.path, i.name FROM users u 
    LEFT OUTER JOIN usertypes t ON t.id = u.typeid 
    LEFT OUTER JOIN usericons i ON i.id = u.iconid 
    WHERE u.id = _newid; 
END 
$$; 

我得到:爲什麼這個Postgres函數不正確?

ERROR: syntax error at or near "INTEGER" 
Line 6: _newid INTEGER; 
       ^

我肯定有我丟失的東西,但它一直很無奈,到目前爲止,因爲這些工具相比,幾乎所有其他主要的數據庫都不合格 - MySQL和SQL服務器,Oracle等。

回答

3

Why isn't this Postgres function correct?

因爲它不包含有效的SQL。它似乎包含plpgsql代碼。嘗試更改語言:

LANGUAGE plpgsql 
+0

現在函數創建,但執行時出現此錯誤:'select * from public.create_user('DerpDerp5678','password',1); 錯誤:查詢沒有結果數據的目標地址 提示:如果您想丟棄SELECT的結果,請改用PERFORM。 上下文:PL/pgSQL函數create_user(文本,文本,整數)第6行在SQL語句處爲' – MonkRocker

+0

將此標記爲答案,但 - 在此處無所謂。我厭倦了蹩腳的工具摔跤。回到mySQL裏,像EDITING A FUNCTION這樣神祕的角落案例任務並沒有隱藏在塵土飛揚的角落裏。 – MonkRocker

+0

您需要針對該錯誤的單獨問題。雖然它可能會重複。 – Flimzy

相關問題