簡體   English   中英

mySQL存儲過程-游標錯誤

[英]mySQL Stored Procedure - Cursor error

我正在嘗試使用游標編寫mySQL過程以計算票價。 我傳入了stationid,然后找出了它們所在的區域。票價是設定值$ 1,每個進入的區域都需要$ 0.20。到目前為止,我運行的代碼是存在問題,但是游標未提取將值放入變量。

任何幫助將不勝感激。 謝謝

表格:

    DROP DATABASE IF EXISTS luasSystem;
    CREATE DATABASE luasSystem;
    USE luasSystem;

    CREATE TABLE IF NOT EXISTS line
    (
    line_id INT NOT NULL AUTO_INCREMENT,
    Line_colour CHAR(10) NOT NULL,
    PRIMARY KEY (line_id)
    )   ENGINE=InnoDB;

    CREATE TABLE IF NOT EXISTS zone
    (
    zone_id INT NOT NULL AUTO_INCREMENT,
    zone_name VARCHAR(20) NOT NULL,
        line INT NOT NULL,
    PRIMARY KEY (zone_id),
    FOREIGN KEY (line) REFERENCES line(line_id) ON UPDATE CASCADE ON DELETE RESTRICT
    )   ENGINE=InnoDB;

    CREATE TABLE IF NOT EXISTS station
    (
    station_id INT NOT NULL AUTO_INCREMENT,
    station_name CHAR(20) NOT NULL,
    service CHAR(20),
        line INT NOT NULL,
        zone INT NOT NULL,
    PRIMARY KEY (station_id),
    FOREIGN KEY (line) REFERENCES line(line_id) ON UPDATE CASCADE ON DELETE RESTRICT,
    FOREIGN KEY (zone) REFERENCES zone(zone_id) ON UPDATE CASCADE ON DELETE RESTRICT
    )   ENGINE=InnoDB;

存儲過程:

    DROP PROCEDURE IF EXISTS calculateFare;
    DELIMITER //
    CREATE PROCEDURE calculateFare
    (
    IN stationid1 INT, IN stationid2 INT
    )
    BEGIN

    DECLARE zoneNum1 INT;
    DECLARE zoneNum2 INT;
    DECLARE num INT;
    DECLARE fare DOUBLE;

    DECLARE tableEnd BOOLEAN;

    DECLARE zoneCur CURSOR FOR
    SELECT zone, zone FROM station
    WHERE station_name = stationid1 AND station_name = stationid2;

    DECLARE CONTINUE HANDLER FOR NOT FOUND
    SET tableEnd = TRUE;

    OPEN zoneCur;
    the_loop: LOOP

    FETCH zoneCur
    INTO zoneNum1, zoneNum2;

    IF tableEnd THEN
    CLOSE zoneCur;
    LEAVE the_loop;
    END IF;

    SET fare = 1;
    SET num = 0;

    IF zoneNum1 < zoneNum2 THEN
    SET num = zoneNum2 - zoneNum1;
    ELSEIF zoneNum1 > zoneNum2 THEN
    SET num = zoneNum1 - zoneNum2;
    END IF;

    SET fare = (num * 0.20) + 1;
    SELECT fare;
    END LOOP the_loop;
    END //
    DELIMITER ;

    CAll calculateFare(3,5);

使用十進制值而不是整數會不會更容易? 建議您看一下: http : //dev.mysql.com/doc/refman/5.0/en/fixed-point-types.html

暫無
暫無

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

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