MySQL儲存過程建立時遇到錯誤1064
P粉041881924
P粉041881924 2023-09-12 15:41:52
0
1
660

我想在MySQL中建立一個預存過程,但我遇到了一個錯誤1064:

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

查询:DELIMITER;

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

這是我想建立的預存程序的查詢:

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;

為什麼我的查詢會出現錯誤代碼:1064?我該如何修復它?

我之前使用ORACLE資料庫,現在才剛開始使用MySQL。如果有任何我不知道的差異,請告訴我。

P粉041881924
P粉041881924

全部回覆(1)
P粉883223328

DELIMITER只在您在命令列客戶端內建立預存程序時需要,以區分常規分隔符號和BEGIN END區塊內的分隔符號。

在您的範例中,您定義了一個分隔符號$$ CREATE PROCEDURE HITUNGMASUK,這可能不是您真正想要的。

DELIMITER $$需要作為單一指令執行,而不是與預存程序定義連線。

DELIMITER $$
CREATE PROCEDURE()
BEGIN
...
END
$$
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板