SQL IBM DB2(Windows 10)不读取结束; (存储过程)

时间:2017-09-30 11:30:28

标签: sql stored-procedures db2

我的存储过程出现此错误。我的ibm db2似乎没有阅读END IF;语句。

我使用Windows 10作为我的db2。

错误讯息:

  

SQL0104N意外的令牌" END @"发现在" _Details)"之后。预期   令牌可能包括:" END IF"。

我的代码:

CREATE PROCEDURE SeatPricing (IN seat_num varchar(2), ticket_id varchar(10))
BEGIN 
    IF seat_num LIKE 'A_' THEN
    UPDATE Ticket_Details 
    SET seat_price = 500.00
    WHERE ticket_id = (SELECT ticket_id
                       FROM Ticket_Details);
    UPDATE Ticket 
    SET seat_price = 500.00
    WHERE ticket_id = (SELECT ticket_id
                       FROM Ticket);
  ELSE 
    UPDATE Ticket_Details
    SET seat_price = 300.00
    WHERE ticket_id = (SELECT ticket_id
                       FROM Ticket_Details);
    UPDATE Ticket
    SET seat_price = 300.00
    WHERE ticket_id = (SELECT ticket_id
                       FROM Ticket);
    END IF;
 END@
 /

2 个答案:

答案 0 :(得分:2)

您的存储过程存在多个问题:

  1. @到最后
  2. 您不使用ticket_id进入更新
  3. 您更新所有表格,不需要您的位置。执行此操作时:“其中id = id(当您执行ticket_id =(SELECT ticket_id FROM Ticket)时)”我认为您接受所有的机票ID。
  4. 如果您执行相同的查询但只更改一个参数,则应该只是这样。
  5. 将价格列纳入Ticket_Details表和票证表是错误的,但它可能是一个选择......价格可能会同时变为票证表而不是Ticket_Details表(它是一个上下文问题)。
  6. 我建议这段代码:

    CREATE PROCEDURE SeatPricing (IN seat_num varchar(2),IN ticketid varchar(10))
    BEGIN 
    DECLARE VALUETOSET decimal(5, 2);
    
    IF seat_num LIKE 'A_' THEN
        SET VALUETOSET= 500.00 ;
    ELSE
        SET VALUETOSET= 300.00 ;
    END IF ;
    
    UPDATE Ticket_Details SET seat_price = VALUETOSET and ticket_id = ticketid;
    
    UPDATE Ticket SET seat_price = VALUETOSET and ticket_id = ticketid;
    
    END
    

答案 1 :(得分:0)

  

错误消息:SQL0104N发现了一个意外的令牌“END @”   “_细节)”。预期的代币可能包括:“END IF”。

请务必参阅 creating procedure 的语法。您需要使用可选END <procedure-name>结束您的程序。

但是,您最后使用了END@ENDEND SeatPricing

  

END - 结束块的必需关键字。 您可以选择   指定程序的名称