Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 存储函数-错误#1064-反勾选/勾选?_Mysql_Sql_Function - Fatal编程技术网

Mysql 存储函数-错误#1064-反勾选/勾选?

Mysql 存储函数-错误#1064-反勾选/勾选?,mysql,sql,function,Mysql,Sql,Function,我生成了以下SQL代码: DELIMITER $$ CREATE FUNCTION flighttime (p_arrival(DATE), p_departure(DATE)) RETURNS CHAR(50) BEGIN DECLARE v_hour INT; DECLARE v_minute INT; DECLARE v_htext CHAR(10); DECLARE v_mtext CHAR(10); DECLARE v_flighttime C

我生成了以下SQL代码:

DELIMITER $$

CREATE FUNCTION flighttime (p_arrival(DATE), p_departure(DATE))
RETURNS CHAR(50)
BEGIN
    DECLARE v_hour INT;
    DECLARE v_minute INT;
    DECLARE v_htext CHAR(10);
    DECLARE v_mtext CHAR(10);
    DECLARE v_flighttime CHAR(50);
    DATEDIFF(minute, p_departure, p_arrival) AS v_minute;
    v_hour = v_minute/60;
    v_minute = v_minute-(v_hour*60);

    IF v_hour<2 AND v_minute<2 THEN SET v_htext=' hour and ' AND v_mtext=' minute';
    ELSEIF v_hour<2 AND v_minute>1 THEN SET v_htext=' hour and ' AND v_mtext=' minutes';
    ELSEIF v_hour>1 AND v_minute<2 THEN SET v_htext=' hours and ' AND v_mtext=' minute';
    ELSE SET v_htext=' hours and ' AND v_mtext=' minutes';

    SET v_flighttime = CONCAT(v_hour, v_mtext, v_minute, v_mtext);
    RETURN v_flighttime;
END

$$
DELIMITER;
分隔符$$
创建函数flighttime(p_到达(日期)、p_离开(日期))
返回字符(50)
开始
声明v_hour INT;
声明v_分钟整数;
声明v_htext CHAR(10);
声明多行文字字符(10);
声明v_flighttime字符(50);
DATEDIFF(分钟、p_出发、p_到达)作为v_分钟;
v_小时=v_分钟/60;
v_分钟=v_分钟-(v_小时*60);

如果v_hour您的声明无效。应该是

CREATE FUNCTION flighttime (p_arrival DATE, p_departure DATE)
....
然后,由于值的设置无效,很快会出现另一个错误,您应该使用
SET

SET v_minute = DATEDIFF(minute, p_departure, p_arrival);
SET v_hour = v_minute/60;
SET v_minute = v_minute-(v_hour*60);
完整代码

DELIMITER $$
CREATE FUNCTION flighttime (p_arrival DATE, p_departure DATE)
RETURNS CHAR(50)
BEGIN
    DECLARE v_hour INT;
    DECLARE v_minute INT;
    DECLARE v_htext CHAR(10);
    DECLARE v_mtext CHAR(10);
    DECLARE v_flighttime CHAR(50);
    SET v_minute = DATEDIFF(minute, p_departure, p_arrival);
    SET v_hour = v_minute/60;
    SET v_minute = v_minute-(v_hour*60);

    IF v_hour<2 AND v_minute<2 THEN 
        SET v_htext = ' hour and ';
        SET v_mtext=' minute';
    ELSEIF v_hour<2 AND v_minute>1 THEN 
        SET v_htext=' hour and '; 
        SET v_mtext=' minutes';
    ELSEIF v_hour>1 AND v_minute<2 THEN 
        SET v_htext=' hours and ';
        SET v_mtext=' minute';
    ELSE 
        SET v_htext=' hours and ';
        SET v_mtext=' minutes';
    END IF;

    SET v_flighttime = CONCAT(v_hour, v_mtext, v_minute, v_mtext);

    RETURN v_flighttime;
END $$
DELIMITER ;
分隔符$$
创建函数flighttime(p_到达日期、p_离开日期)
返回字符(50)
开始
声明v_hour INT;
声明v_分钟整数;
声明v_htext CHAR(10);
声明多行文字字符(10);
声明v_flighttime字符(50);
设置v_minute=DATEDIFF(分钟、p_出发、p_到达);
设置v_小时=v_分钟/60;
设置v_分钟=v_分钟-(v_小时*60);

如果v_hour向JW求助。我不得不修改和改进一些东西,现在它工作得很好:)这个问题涉及到一个重要的语法细节,在MySQL的正常使用过程中偶尔会出现这个细节,所以我建议重新打开它。
DELIMITER $$
CREATE FUNCTION flighttime (p_arrival DATE, p_departure DATE)
RETURNS CHAR(50)
BEGIN
    DECLARE v_hour INT;
    DECLARE v_minute INT;
    DECLARE v_htext CHAR(10);
    DECLARE v_mtext CHAR(10);
    DECLARE v_flighttime CHAR(50);
    SET v_minute = DATEDIFF(minute, p_departure, p_arrival);
    SET v_hour = v_minute/60;
    SET v_minute = v_minute-(v_hour*60);

    IF v_hour<2 AND v_minute<2 THEN 
        SET v_htext = ' hour and ';
        SET v_mtext=' minute';
    ELSEIF v_hour<2 AND v_minute>1 THEN 
        SET v_htext=' hour and '; 
        SET v_mtext=' minutes';
    ELSEIF v_hour>1 AND v_minute<2 THEN 
        SET v_htext=' hours and ';
        SET v_mtext=' minute';
    ELSE 
        SET v_htext=' hours and ';
        SET v_mtext=' minutes';
    END IF;

    SET v_flighttime = CONCAT(v_hour, v_mtext, v_minute, v_mtext);

    RETURN v_flighttime;
END $$
DELIMITER ;