我们可以在游标SQL函数中使用声明数据类型的局部变量作为TIMESTAMP吗?

时间:2016-12-15 07:55:29

标签: mysql sql function stored-procedures

我有一个场景要声明一些数据类型的局部变量(CURRENT_SYSTEM_TIME)为“TIMESTAMP”和局部变量(CURRENT_SYSTEM_TIME)我想在游标中使用它来检查WHERE子句中的某些条件。

以下是示例:

DROP FUNCTION IF EXISTS LOCAL_VARIABLE_NOT_ABLE_TO_ACCESS;
DELIMITER $$
CREATE FUNCTION LOCAL_VARIABLE_NOT_ABLE_TO_ACCESS(USERINFORMATION VARCHAR(50)) 
RETURNS TIMESTAMP
NOT DETERMINISTIC
BEGIN        
        DECLARE CURRENT_SYSTEM_TIME TIMESTAMP;

        SELECT CURRENT_TIMESTAMP INTO CURRENT_SYSTEM_TIME FROM DUAL ;


                DECLARE DATA_LIST CURSOR FOR (SELECT COLUMN_1,COLUMN_2,COLUMN_3 FROM  TABLE_1 WHERE COLUMN_10 > CURRENT_SYSTEM_TIME);
                 /*
            some logic 
                 */  
   RETURN 1;
END$$
DELIMITER ;
COMMIT;

执行此查询后,我收到一些错误

  

错误代码:1064
  在'DECLARE DATA_LIST CURSOR FOR附近使用的右边语法的MySQL服务器版本(从第10行的TABLE_1 WH'中选择COLUMN_1,COLUMN_2,COLUMN_3

有人可以解释一下如何在游标中使用局部变量吗?是否可以在CURSOR中使用局部变量?

1 个答案:

答案 0 :(得分:0)

是。我们可以在函数内部使用局部变量,或者在MYSQL中使用Cursor。

检查以下代码。

在声明CURRENT_SYSTEM_TIME变量时,我们可以为它设置默认时间。

            DROP FUNCTION IF EXISTS LOCAL_VARIABLE_NOT_ABLE_TO_ACCESS;
            DELIMITER $$
            CREATE FUNCTION LOCAL_VARIABLE_NOT_ABLE_TO_ACCESS(USERINFORMATION VARCHAR(50)) 
            RETURNS TIMESTAMP
            NOT DETERMINISTIC
            BEGIN        
                    DECLARE CURRENT_SYSTEM_TIME TIMESTAMP default CURRENT_TIMESTAMP;       
                    DECLARE DATA_LIST CURSOR FOR (SELECT COLUMN_1,COLUMN_2,COLUMN_3 FROM  TABLE_1 WHERE COLUMN_3 >
                    CURRENT_SYSTEM_TIME);
                     /*     some logic              */  
               RETURN 1;
            END$$
            DELIMITER ;
            COMMIT;