반응형
오류 1064:SQL 구문에 오류가 있습니다. MariaDB 서버 버전에 해당하는 설명서에서 다음에 사용할 올바른 구문을 확인하십시오.
Sql 파일이라는 이름의 프로시저가 있습니다.프로시저가 있는 sql.Maria DB 버전:서버 버전: 10.0.29-MariaDB-0ubuntu016.04.1 우분투 16.04
그러나 다음과 같이 오류가 발생합니다.
>mysql -u root -p XXX < /home/azure/Downloads/procedure.sql
>Enter password:
>ERROR 1064 (42000) at line 2: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '();
>USE XXX;
>CREATE OR REPLACE PROCEDURE XXX.updateDoc_StorageID ()
>BEGIN' at line 1
누가 도와줄 수 있습니까?
procedure.sql 코드:
DELIMITER //
DROP PROCEDURE IF EXISTS XXX.updateDoc_StorageID;
USE XXX;
CREATE OR REPLACE PROCEDURE XXX.updateDoc_StorageID ()
BEGIN
DECLARE myTransacID INT DEFAULT 0;
DECLARE myTransProductId INT DEFAULT 0;
DECLARE myDocStoreID VARCHAR(500) DEFAULT '0';
DECLARE my_count INT DEFAULT 0;
DECLARE trans_csr CURSOR FOR SELECT 1,2 FROM MainTable ORDER BY TransactionID;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET my_count=1;
SET my_count=0;
OPEN trans_csr;
trans_loop:LOOP
FETCH trans_csr INTO myTransacID,myTransProductId;
IF my_count=1 THEN
LEAVE trans_loop;
END IF;
If(myTransProductId=8)
then
if exists(....)
then
.......
end if;
elseif (myTransProductId=11)
then
if exists(........)
then
.......
END IF;
END IF;
END LOOP trans_loop;
CLOSE trans_csr;
SET my_count=0;
END;
//
DELIMITER ;
내가 받은 레퍼런스는 https://mariadb.com/kb/en/mariadb/create-procedure/ 에서 온 것입니다.
구문 오류는 다음에 대한 것이 아닙니다.CREATE PROCEDURE
, 선행을 위한 것입니다.DROP PROCEDURE
, 거기에 대괄호가 있으면 안 됩니다.
DROP PROCEDURE IF EXISTS XXX.updateDoc_StorageID;
두 번째 오류가 이어지는데, 아직 절차가 삭제되지 않았기 때문에 여전히 존재합니다.
또한 구분 기호를 수정합니다 - 설정한 경우$$
시작할 때, 모든 추가 쿼리는 다음과 같이 끝나야 합니다.$$
, 세미콜론을 사용하지 않습니다.
버전 10.0.x의 올바른 구문은 다음과 같습니다.
DELIMITER //
DROP PROCEDURE IF EXISTS XXX.updateDoc_StorageID;
USE XXX;
CREATE OR REPLACE PROCEDURE XXX.updateDoc_StorageID ()
BEGIN
DECLARE myTransacID INT DEFAULT 0;
DECLARE myTransProductId INT DEFAULT 0;
DECLARE myDocStoreID VARCHAR(500) DEFAULT '0';
DECLARE my_count INT DEFAULT 0;
DECLARE trans_csr CURSOR FOR SELECT 1,2 FROM MainTable ORDER BY TransactionID;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET my_count=1;
SET my_count=0;
OPEN trans_csr;
trans_loop:LOOP
FETCH trans_csr INTO myTransacID,myTransProductId;
IF my_count=1 THEN
LEAVE trans_loop;
END IF;
If(myTransProductId=8)
then
if exists(....)
then
.......
end if;
elseif (myTransProductId=11)
then
if exists(........)
then
.......
END IF;
END IF;
END LOOP trans_loop;
CLOSE trans_csr;
SET my_count=0;
END;
//
DELIMITER ;
언급URL : https://stackoverflow.com/questions/45460073/error-1064you-have-an-error-in-your-sql-syntax-check-the-manual-that-correspon
반응형
'programing' 카테고리의 다른 글
Flex Slider - 두 슬라이더에 대해 동일한 컨트롤을 추가하는 방법 (0) | 2023.10.29 |
---|---|
자바스크립트에서 동등한 것에 대한 부정적인 뒤보기 (0) | 2023.10.29 |
PHP에서 PDO를 통해 MySQL 쿼리를 루프하려면 어떻게 해야 합니까? (0) | 2023.10.29 |
C에서 : 연산자의 사용 (0) | 2023.10.29 |
우커머스에서 날짜별로 사용자 주문을 받는 방법은? (0) | 2023.10.29 |