2012-02-28 17 views
5

Tôi muốn đặt dấu phân tách bên trong tệp sql (vì tôi không thể dựa vào người dùng để thực hiện điều đó thông qua thiết bị đầu cuối).Đặt dấu phân cách MySQL bên trong tệp sql

Có một câu lệnh mysql cho phép tôi đặt dấu phân cách không?

Sử dụng

DELIMITER // 

ném một lỗi.

# Categories schema 

# --- !Ups 


CREATE TABLE IF NOT EXISTS `category` (
    `id` INT NOT NULL AUTO_INCREMENT , 
    `pid` INT NULL DEFAULT 0 , 
    `label` VARCHAR(64) NULL , 
    `active` TINYINT NULL DEFAULT 0, 
    PRIMARY KEY (`id`)); 

DELIMITER // 

CREATE FUNCTION hierarchy_connect_by_parent_eq_prior_id(value INT) RETURNS INT 
NOT DETERMINISTIC 
READS SQL DATA 
BEGIN 
     DECLARE _id INT; 
     DECLARE _parent INT; 
     DECLARE _next INT; 
     DECLARE CONTINUE HANDLER FOR NOT FOUND SET @id = NULL; 

     SET _parent = @id; 
     SET _id = -1; 

     IF @id IS NULL THEN 
       RETURN NULL; 
     END IF; 

     LOOP 
       SELECT MIN(id) 
       INTO @id 
       FROM category 
       WHERE pid = _parent 
         AND id > _id; 
       IF @id IS NOT NULL OR _parent = @start_with THEN 
         SET @level = @level + 1; 
         RETURN @id; 
       END IF; 
       SET @level := @level - 1; 
       SELECT id, pid 
       INTO _id, _parent 
       FROM category 
       WHERE id = _parent; 
     END LOOP; 
END// 

DELIMITER ; 

# --- !Downs 

#DROP TABLE category; 

We got the following error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER/CREATE FUNCTION hierarchy_connect_by_parent_eq_prior_id(value INT) ' at line 1 [ERROR:1064, SQLSTATE:42000], while trying to run this SQL script:

+1

thiết lập dấu phân tách bên trong tệp sql có nghĩa là gì? bạn có thể rõ ràng hơn không? bạn đang cố làm gì vậy? –

+0

Bạn có thể dán lỗi không? – Gianluca

+0

Lỗi là khá vô ích. Đó là 1064. –

Trả lời

0

Bạn nói rằng bạn đang sử dụng

DELIMITER // 

Nhưng kịch bản của bạn nói

DELIMITER # 

Nếu đó là những gì bạn đang sử dụng, có thể nó chỉ là rằng # là cú pháp nhận xét? http://dev.mysql.com/doc/refman/5.1/en/comments.html

Vì vậy, bạn có thể không được thiết lập bất kỳ DELIMITER, vì vậy từ khóa tiếp theo là bất ngờ.

(tốt, đó là trường hợp trước khi chỉnh sửa của bạn :).)

+0

Không có gì sai khi sử dụng # làm dấu phân cách. Tôi đã kiểm tra nó. – Mchl

+0

Tôi đã thử cả hai;) Không làm việc. –

0

Trong phiên bản của MySql tôi sử dụng cùng một lỗi xảy ra khi sử dụng lệnh delimiter, nhưng phiên bản này xử lý các dấu phân cách "" cho báo cáo và dấu phân tách "|" cho các thủ tục và chức năng được lưu trữ, mà tôi nghĩ là giải quyết được vấn đề; thử này:

- bất kỳ báo cáo bằng dấu phẩy chấm dứt ở đây (chọn, tạo bảng, thả bảng, cập nhật, xóa, vv)

CREATE FUNCTION hierarchy_connect_by_parent_eq_prior_id (giá trị INT) RETURNS INT

- chức năng body tại đây

END |

- các tuyên bố hoặc chức năng khác tại đây

Các vấn đề liên quan