cari

Rumah  >  Soal Jawab  >  teks badan

Penciptaan prosedur tersimpan MySQL mengalami ralat 1064

Saya ingin mencipta prosedur tersimpan dalam MySQL, tetapi saya mengalami ralat 1064:

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

查询:DELIMITER;

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

Ini adalah pertanyaan untuk prosedur tersimpan yang ingin saya buat:

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;

Mengapa pertanyaan saya muncul错误代码:1064? Bagaimana saya boleh membetulkannya?

Saya menggunakan pangkalan data ORACLE sebelum ini, dan sekarang saya baru mula menggunakan MySQL. Jika terdapat sebarang perbezaan yang saya tidak sedar, sila beritahu saya.

P粉041881924P粉041881924449 hari yang lalu620

membalas semua(1)saya akan balas

  • P粉883223328

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

    DELIMITERHanya diperlukan jika anda membuat prosedur tersimpan dalam klien baris arahan, untuk membezakan antara pembatas biasa dan pembatas dalam blok BEGIN END.

    Dalam contoh anda, anda mentakrifkan pemisah $$ CREATE PROCEDURE HITUNGMASUK yang mungkin bukan yang anda mahukan sebenarnya.

    DELIMITER $$Perlu dilaksanakan sebagai satu arahan, tidak disambungkan kepada definisi prosedur tersimpan.

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

    balas
    0
  • Batalbalas