简体   繁体   English

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

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

Not sure if this is even possible but im getting a weird error at the end of my query.不确定这是否可能,但我在查询结束时遇到了一个奇怪的错误。 Any idea why?知道为什么吗?

Here is the code:这是代码:

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;
$$;

ERROR: syntax error at or near ";"错误:“;”处或附近的语法错误LINE 15: END;第 15 行:结束; ^ SQL state: 42601 Character: 727 ^ SQL state:42601 字符:727

You need to terminate the IF statement with END IF;您需要使用END IF;来终止IF语句; . . Also to check a variable against NULL , you need IS NULL rather than = NULL .此外,要对照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;
$$;

This types of errors are easier to spot if you properly indent the code.如果您正确缩进代码,则更容易发现此类错误。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何摆脱 PL/SQL 程序中的编译错误? - How to get rid of compilation error in PL/SQL procedure? C#和SQL Server:如何通过使用C#调用存储过程来从SQL表中获取值? - C# and SQL Server: How do I get values from my SQL Table, by calling my stored procedure with C#? 如何摆脱 SQL 结果中的 null 值导致 java? - How do I get rid of null values in my SQL results in java? SQL存储过程-如何获取行并在过程中使用它? - SQL Stored Procedure - how do I get a row and use it inside my procedure? 编写此查询时,如何摆脱此多余的grouping_id列? - How do I get rid of this extra grouping_id column when writing this query? 在SQL中使用CASE语句时,如何删除额外的“分组依据”列? - How do I get rid of extra “group by” column in when using a CASE statement in SQL? SQL:如何更改查询以获得以下结果? - SQL: How do I change my query to get the following result? 如何在sql语句中循环存储过程 - How do I loop through a stored procedure within a sql statement 如何从C#应用程序中获取要在我的SQL数据库上运行的SELECT日期查询? - How do I get a SELECT date query to run on my SQL database from C# application? 执行搜索查询时,如何将日期从sql数据库返回到netbeans jdatechooser? - How do i get Date back from sql Database to netbeans jdatechooser when i execute search query?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM