簡體   English   中英

在創建觸發器之前,DELIMITER上的MySQL語法錯誤

[英]MySQL Syntax Error on DELIMITER before CREATE TRIGGER

我正在嘗試將用Firebird制作的觸發器重寫為MySql觸發器。

我真的不知道會是什么。 如果有人可以幫助我...謝謝

我正在使用PHP提交SQL,如下所示,錯誤消息是:

查詢無效:您的SQL語法有誤; 在第1行的“ DELIMITER $$ CREATE TRIGGER FP_PAGO_AI AFTER INSERT ON FORMA_PGTO FOR EACH R”附近檢查與您的MySQL服務器版本相對應的手冊以使用正確的語法

觸發器的代碼是:

$str[] = "
DELIMITER $$

CREATE TRIGGER FP_PAGO_AU AFTER UPDATE ON FORMA_PGTO
FOR EACH ROW
BEGIN

    declare rec_count integer;
    declare pg_count integer;
    declare cp_pago integer;

    select count(*) from forma_pgto fp where fp.id_cpagar=new.id_cpagar into rec_count;
    select count(pago) from forma_pgto f where f.id_cpagar=new.id_cpagar and f.pago=1 into pg_count;

    /* Se todas parcelas estao pagas, entao setar conta paga */
    if (rec_count = pg_count) then
        update cpagar c set c.pago=1 where c.id=new.id_cpagar;
    /* Senao */
    else
        /* Se CPAGAR.PAGO = 1, recebe 0 */
        select cpg.pago from cpagar cpg where cpg.id=new.id_cpagar into cp_pago;
        if (cp_pago = 1) then /* Se cp_pago = 1 */
            update cpagar set pago=0 where id=new.id_cpagar;
        end if;
    end if;

END

END $$

DELIMITER ;
";

您根本不需要DELIMITER $$ 那是一個mysql客戶端內置命令 SQL解析器無法識別客戶端內置文件。

您可以只將CREATE TRIGGER語句作為單個語句執行,然后在語句末尾不需要定界符。 分隔符僅在支持多個語句的接口(例如mysql客戶端)中很重要。

phpMyAdmin還允許多個語句,因此您確實需要設置定界符,但這是通過用戶界面控件而不是DELIMITER命令來完成的。 請參閱phpMyAdmin中的存儲過程

直接在PhpAdmin中執行它並刪除一個冗余END

DELIMITER $$

CREATE TRIGGER FP_PAGO_AU AFTER UPDATE ON FORMA_PGTO
FOR EACH ROW
BEGIN

    declare rec_count integer;
    declare pg_count integer;
    declare cp_pago integer;

    select count(*) from forma_pgto fp where fp.id_cpagar=new.id_cpagar into rec_count;
    select count(pago) from forma_pgto f where f.id_cpagar=new.id_cpagar and f.pago=1 into pg_count;

    /* Se todas parcelas estao pagas, entao setar conta paga */
    if (rec_count = pg_count) then
        update cpagar c set c.pago=1 where c.id=new.id_cpagar;
    /* Senao */
    else
        /* Se CPAGAR.PAGO = 1, recebe 0 */
        select cpg.pago from cpagar cpg where cpg.id=new.id_cpagar into cp_pago;
        if (cp_pago = 1) then /* Se cp_pago = 1 */
            update cpagar set pago=0 where id=new.id_cpagar;
        end if;
    end if;

END $$

DELIMITER ;

暫無
暫無

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

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