Tôi có một chức năng hiện đang sử dụng trong PHP để biên dịch địa chỉ nhận thư từ các trường riêng biệt. được sử dụng ở các khu vực khác nhau. Tôi đang cố gắng để nhân rộng này như là một chức năng lưu trữ MySQL. Tôi nhận ra rằng nó thường nhanh hơn để làm điều này trong mã thay vì trong cơ sở dữ liệu nhưng mạng intranet của chúng tôi có cách để mọi người nhập các lệnh SELECT MySQL thô ở dạng chỉ đọc để họ có thể xây dựng các tìm kiếm nâng cao và lưu các truy vấn. Chức năng cụ thể này sẽ được sử dụng để người dùng có thể xuất kết quả truy vấn tìm kiếm nâng cao của họ sang bố cục nhãn.Chức năng lưu trữ MySQL với IF lồng nhau ... END IF, lỗi cú pháp, cú pháp đúng để sử dụng gần ''
Khi tôi cố gắng và lưu trữ các chức năng sử dụng phpMyAdmin 3.4.9 (mới nhất ổn định) tôi nhận được lỗi sau:
#1064 - 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 '' at line 51
Tôi cũng cài đặt mới nhất của MySQL Workbench và gặp sự cố tương tự nhưng cũng nó nhấn mạnh một "Lỗi cú pháp SQL gần 'END'" vì vậy nó không chỉ là một lỗi trong phpMyAdmin (mặc dù nó có thể là một lỗi trong cả phpMyAdmin và MySQL Workbench).
Dưới đây là các truy vấn chức năng:
DELIMITER ;;
DROP FUNCTION IF EXISTS ADDRESS_BUILD;;
CREATE FUNCTION ADDRESS_BUILD(contact VARCHAR(50), company VARCHAR(100), add1 VARCHAR(255), add2 VARCHAR(255), add3 VARCHAR(255), town_city VARCHAR(50), county_state VARCHAR(50), postcode_zip VARCHAR(50), country VARCHAR(100), `separator` VARCHAR(10), type VARCHAR(10))
RETURNS TEXT
DETERMINISTIC
BEGIN
DECLARE address TEXT;
DECLARE line TEXT;
IF LENGTH(TRIM(contact))>0 THEN SET address=CONCAT_WS(`separator`, address, TRIM(contact)); END IF;
IF LENGTH(TRIM(company))>0 THEN SET address=CONCAT_WS(`separator`, address, TRIM(company)); END IF;
IF LENGTH(TRIM(add1))>0 THEN SET address=CONCAT_WS(`separator`, address, TRIM(add1)); END IF;
IF LENGTH(TRIM(add2))>0 THEN SET address=CONCAT_WS(`separator`, address, TRIM(add2)); END IF;
IF LENGTH(TRIM(add3))>0 THEN SET address=CONCAT_WS(`separator`, address, TRIM(add3)); END IF;
IF country='United States of America' OR country='USA' OR country='Canada' OR country='CA' THEN
/* NORTH AMERICA, ALL ON 1 LINE */
IF LENGTH(TRIM(town_city))>0 THEN
IF type='mail' THEN SET line=CONCAT_WS('', TRIM(town_city), ' ');
ELSE SET line=CONCAT_WS('', line, TRIM(town_city), ', ');
END IF;
END IF;
IF LENGTH(TRIM(county_state))>0 THEN
IF type='mail' THEN SET line=CONCAT_WS('', line, TRIM(county_state), ' ');
ELSE SET line=CONCAT_WS('', line, TRIM(county_state), ' ');
END IF;
END IF;
IF LENGTH(TRIM(postcode_zip))>0 THEN SET line=CONCAT_WS('', line, TRIM(postcode_zip)); END IF;
SET address=CONCAT_WS(`separator`, address, TRIM(line));
ELSE IF country='United Kingdom' OR country='UK' THEN
/* UK, ASCENDING LOCALITY SEPARATE LINES */
IF LENGTH(TRIM(town_city))>0 THEN SET address=CONCAT_WS(`separator`, address, TRIM(town_city)); END IF;
IF LENGTH(TRIM(county_state))>0 THEN SET address=CONCAT_WS(`separator`, address, TRIM(county_state)); END IF;
IF LENGTH(TRIM(postcode_zip))>0 THEN SET address=CONCAT_WS(`separator`, address, TRIM(postcode_zip)); END IF;
ELSE
/* EUROPE EVERYWHERE ELSE, ALL ON 1 LINE POSTCODE FIRST */
IF LENGTH(TRIM(postcode_zip))>0 THEN SET line=CONCAT_WS('', line, TRIM(postcode_zip)); END IF;
IF LENGTH(TRIM(town_city))>0 THEN SET line=CONCAT_WS('', line, ' ', TRIM(town_city)); END IF;
IF LENGTH(TRIM(county_state))>0 THEN SET line=CONCAT_WS('', line, ' ', TRIM(county_state)); END IF;
IF LENGTH(TRIM(line))>0 THEN SET address=CONCAT_WS(`separator`, address, TRIM(line)); END IF;
END IF;
IF country='United States of America' THEN SET address=CONCAT_WS(`separator`, address, 'USA');
ELSE IF LENGTH(TRIM(country))>0 THEN SET address=CONCAT_WS(`separator`, address, TRIM(country));
END IF;
RETURN address;
END;;
Dòng 51 là gần END IF, RETURN END và khoản nhưng tôi không thể nhận ra bất cứ điều gì sai với điều đó.
Có ai có thể thấy điều gì gây ra sự cố này trong cả MySQL Workbench và phpMyAdmin không?
Một khi tôi đã có chức năng được lưu trữ, sau đó tôi có thể kiểm tra nó ra và tinh chỉnh logic.
Ngoài ra nếu có bất kỳ nội dung nào trong hàm có thể được sắp xếp hợp lý thì hãy cho tôi biết. Không có nhiều ví dụ ngoài kia nên tôi đã vá nó với nhau một chút.
Không may mắn tôi sợ: ( – batfastad
@batfastad Đó 'END IF;' có lẽ không phải là điều duy nhất còn thiếu ... nhưng tôi không có MySQL cài đặt để kiểm tra ... – Yahia
Đủ công bằng, tôi sẽ nhanh chóng kiểm tra xem lồng của tôi có khớp với nhau không. – batfastad