sql >> データベース >  >> RDS >> Mysql

MySQLストアドプロシージャエラー予期しない文字:

    これは非常に厄介なMySQL構文関連の問題です。プロシージャのどこかにタブがあり、この解析の問題が発生します。スペースはインデントまたは配置にのみ使用してください。

    私のバージョン(MariaDB 10.x)も、DECLAREを使用してプロシージャを開始するのが好きではありません。 注文したので、それも更新しました。それでもその場所での目的に合っているかどうかを確認してください。

    私のデータベースが構文エラーなしで作成する調整された手順:

    DELIMITER $$
    
    CREATE DEFINER=`root`@`localhost` PROCEDURE `get_gauge_values` (in maxdate timestamp, in tagid int)
    
    BEGIN
    declare finished boolean;
    declare line_timestamp timestamp;
    declare line_tagid int;
    declare line_name varchar(50);
    declare line_value varchar(50);
    DECLARE cid CURSOR FOR 
    SELECT MAX(hd.timestamp), hd.tag_id
    FROM dashboard_lines dl
    JOIN historical_data hd ON hd.tag_id = dl.gauge_tag_id
    WHERE (hd.timestamp is null OR hd.timestamp <= maxdate)
    AND (dl.gauge_tag_id is null OR dl.gauge_tag_id = tagid);       
    declare continue handler for not found set finished=true;
    set finished=false;
    DROP TABLE IF EXISTS GAUGE_VALUES_TEMP;
    CREATE TABLE GAUGE_VALUES_TEMP (
    LINE_NAME varchar(255),
    LINE_VALUE varchar(50)
    );  
    open cid;
    start_loop: loop            
    fetch cid into line_timestamp, line_tagid;    
    if finished <> false then 
    leave start_loop; 
    else    
    insert into gauge_values_temp (line_name, line_value) 
    select ol.name, hd.value
    from dashboard_lines dl
    join operation_lines ol on ol.line_id = dl.line_id
    join historical_data hd on hd.tag_id = dl.gauge_tag_id
    where dl.gauge_tag_id = line_tagid;                        
    end if;                
    end loop;
    close cid;
    select * from gauge_values_temp;
    END
    $$
    



    1. mysqlデータベース、phpから特殊文字を取得する

    2. プリペアドステートメントを使用した可変パラメータ/結果のバインド

    3. php:文字列データを数値データに変更する方法

    4. ブールフィールドのインデックス作成でパフォーマンスが向上しますか?