在过程中插入时,如何从查询末尾消除这个sql错误?

k75qkfdt  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(283)

不知道这是否可能,但我得到一个奇怪的错误在我的查询结束。知道为什么吗?
代码如下:

  1. 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)
  2. LANGUAGE plpgsql
  3. AS $$
  4. DECLARE s_user_id INT;
  5. DECLARE p_user_id INT;
  6. BEGIN
  7. IF p_name = NULL AND team_id = NULL THEN
  8. s_user_id = (SELECT MAX(user_id) FROM spectator) + 1;
  9. INSERT INTO spectator (user_id, given_name, family_name, password, email, date_of_birth)
  10. VALUES (s_user_id, g_name, f_name, u_password, u_email, u_dob);
  11. ELSE
  12. p_user_id = (SELECT MAX(user_id) FROM player) + 1;
  13. INSERT INTO player (user_id, given_name, family_name, password, email, date_of_birth, player_name, team_id)
  14. VALUES (p_user_id, g_name, f_name, u_password, u_email, u_dob, u_name, team_id);
  15. END;
  16. $$;

错误:语法错误在“;”处或附近第15行:结束;^sql状态:42601字符:727

hrysbysz

hrysbysz1#

你需要终止 IF 对账单 END IF; . 同时检查变量 NULL ,你需要 IS NULL 而不是 = NULL .

  1. 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)
  2. LANGUAGE plpgsql
  3. AS $$
  4. DECLARE s_user_id INT;
  5. DECLARE p_user_id INT;
  6. BEGIN
  7. IF p_name IS NULL AND team_id IS NULL THEN
  8. s_user_id = (SELECT MAX(user_id) FROM spectator) + 1;
  9. INSERT INTO spectator (user_id, given_name, family_name, password, email, date_of_birth)
  10. VALUES (s_user_id, g_name, f_name, u_password, u_email, u_dob);
  11. ELSE
  12. p_user_id = (SELECT MAX(user_id) FROM player) + 1;
  13. INSERT INTO player (user_id, given_name, family_name, password, email, date_of_birth, player_name, team_id)
  14. VALUES (p_user_id, g_name, f_name, u_password, u_email, u_dob, u_name, team_id);
  15. END IF; --> here
  16. END;
  17. $$;

如果正确缩进代码,这种类型的错误更容易发现。

展开查看全部

相关问题