簡體   English   中英

在過程中插入時,如何從查詢末尾消除此 SQL 錯誤?

[英]How do I get rid of this SQL error from the end of my query when inserting within a procedure?

不確定這是否可能,但我在查詢結束時遇到了一個奇怪的錯誤。 知道為什么嗎?

這是代碼:

CREATE OR REPLACE PROCEDURE NewUser (g_name VARCHAR, f_name VARCHAR, u_password VARCHAR, u_email VARCHAR, u_dob DATE, p_name VARCHAR, team_id INT)
LANGUAGE plpgsql
AS $$
DECLARE s_user_id INT;
DECLARE p_user_id INT;
BEGIN
IF p_name = NULL AND team_id = NULL THEN 
    s_user_id = (SELECT MAX(user_id) FROM spectator) + 1;
    INSERT INTO spectator (user_id, given_name, family_name, password, email, date_of_birth)
    VALUES (s_user_id, g_name, f_name, u_password, u_email, u_dob);
ELSE 
    p_user_id = (SELECT MAX(user_id) FROM player) + 1;
    INSERT INTO player (user_id, given_name, family_name, password, email, date_of_birth, player_name, team_id)
    VALUES (p_user_id, g_name, f_name, u_password, u_email, u_dob, u_name, team_id);
END;
$$;

錯誤:“;”處或附近的語法錯誤第 15 行:結束; ^ SQL state:42601 字符:727

您需要使用END IF;來終止IF語句; . 此外,要對照NULL檢查變量,您需要IS NULL而不是= NULL

CREATE OR REPLACE PROCEDURE NewUser (g_name VARCHAR, f_name VARCHAR, u_password VARCHAR, u_email VARCHAR, u_dob DATE, p_name VARCHAR, team_id INT)
LANGUAGE plpgsql
AS $$
DECLARE s_user_id INT;
DECLARE p_user_id INT;
BEGIN
    IF p_name IS NULL AND team_id IS NULL THEN 
        s_user_id = (SELECT MAX(user_id) FROM spectator) + 1;
        INSERT INTO spectator (user_id, given_name, family_name, password, email, date_of_birth)
        VALUES (s_user_id, g_name, f_name, u_password, u_email, u_dob);
    ELSE 
        p_user_id = (SELECT MAX(user_id) FROM player) + 1;
        INSERT INTO player (user_id, given_name, family_name, password, email, date_of_birth, player_name, team_id)
        VALUES (p_user_id, g_name, f_name, u_password, u_email, u_dob, u_name, team_id);
    END IF;   --> here
END;
$$;

如果您正確縮進代碼,則更容易發現此類錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM