Heim  >  Fragen und Antworten  >  Hauptteil

Beim Erstellen der gespeicherten MySQL-Prozedur ist Fehler 1064 aufgetreten

Ich möchte eine gespeicherte Prozedur in MySQL erstellen, bin aber auf den Fehler 1064 gestoßen:

错误代码:1064
您的SQL语法有误;请检查与您的MariaDB服务器版本相对应的手册,以获取正确的语法使用方法,位于第2行附近的 'ZID_TRANSAKSI VARCHAR(64),
   ZTGL1 DATE,
   ZTGL2 DATE 
) 
BEGIN 
  DECLARE ...' 

查询:DELIMITER;

错误代码:1064
您的SQL语法有误;请检查与您的MariaDB服务器版本相对应的手册,以获取正确的语法使用方法,位于第1行附近的 'DELIMITER'

Dies ist die Abfrage für die gespeicherte Prozedur, die ich erstellen möchte:

DELIMITER $$ CREATE PROCEDURE HITUNGMASUK 
(
   ZID_TRANSAKSI VARCHAR(64),
   ZTGL1 DATE,
   ZTGL2 DATE 
) 

BEGIN 
  DECLARE done INT DEFAULT FALSE;
   DECLARE PTAHUN VARCHAR(4);
   DECLARE PBULAN VARCHAR(2);
   DECLARE PHITUNG INTEGER DEFAULT 0; 
   DECLARE CEKKARTUSTOK INTEGER DEFAULT 0;
   DECLARE PID_BARANG VARCHAR(255) DEFAULT 'X';
   DECLARE PPANJANG INTEGER DEFAULT 0;
   DECLARE CEKKARTUSTOK CURSOR FOR
   SELECT B.id_barang, SUM(B.total_Panjang) AS PANJANG
      FROM transaksi_gudang A,
           line_item_barang B
      WHERE A.ID_Transaksi LIKE ZID_TRANSAKSI 
      AND   A.Tanggal BETWEEN ZTGL1 AND ZTGL2
      AND   B.ID_GR = A.ID_Transaksi
      GROUP BY B.id_barang;
    
   DECLARE
     CONTINUE HANDLER FOR NOT FOUND
   SET
    done = TRUE;


   PTAHUN = YEAR(ZTGL1);
   PBULAN = MONTH(ZTGL1);
  
   OPEN CEKKARTUSTOK;
   teams_loop:
   LOOP
      FETCH CEKKARTUSTOK INTO PID_BARANG,PPANJANG;
   
       IF PID_BARANG = 'X' THEN
          INSERT INTO kartustok(TAHUN,BULAN,ID_BARANG,KODE_GUDANG,MASUK) VALUES ();
       END IF;    
   
      IF done THEN LEAVE teams_loop;
      END IF;

   END LOOP;
  CLOSE CEKKARTUSTOK;


   
   SELECT 
   FROM kartustok C 
   WHERE C.TAHUN = PTAHUN
   AND   C.BULAN = PBULAN
   AND   C.ID_BARANG = P
   
   
END $$ DELIMITER;

Warum erscheint meine Anfrage错误代码:1064? Wie kann ich es reparieren?

Ich habe vorher die ORACLE-Datenbank verwendet und jetzt habe ich gerade angefangen, MySQL zu verwenden. Wenn es Unterschiede gibt, die mir nicht bekannt sind, lassen Sie es mich bitte wissen.

P粉041881924P粉041881924379 Tage vor558

Antworte allen(1)Ich werde antworten

  • P粉883223328

    P粉8832233282023-09-13 00:09:27

    DELIMITER只在您在命令行客户端内创建存储过程时需要,以区分常规分隔符和BEGIN END块内的分隔符。

    在您的示例中,您定义了一个分隔符$$ CREATE PROCEDURE HITUNGMASUK,这可能不是您真正想要的。

    DELIMITER $$需要作为单个命令执行,而不是与存储过程定义连接。

    DELIMITER $$
    CREATE PROCEDURE()
    BEGIN
    ...
    END
    $$

    Antwort
    0
  • StornierenAntwort