2011-11-10 62 views
5

Tôi phải thêm các thủ tục lưu sẵn vào cơ sở dữ liệu MySQL.Thủ tục lưu trữ trong phpMyAdmin

Sự cố là lưu trữ cung cấp phpMyAdmin để quản lý cơ sở dữ liệu.

Tôi tìm kiếm trên Internet và ý tưởng là chạy câu lệnh gốc của MySQL để tạo thủ tục, nhưng vì mã thủ tục thường có thể có ;, chúng tôi phải thay đổi dấu phân cách trong MySQL.

phpMyAdmin không có tùy chọn này. Có ai đã cố gắng tạo thủ tục lưu trữ bằng tay đặt neo hoặc thứ gì đó hoạt động không?

Trả lời

8

Có một cách, xem liên kết này: http://blog.nth-design.com/2009/02/25/creating-sp-in-phpmyadmin/

Trích từ liên kết đó
1.Open phpMyAdmin.
2.Chọn cơ sở dữ liệu để làm việc.
3.Mở tab SQL.
4.Chọn tất cả các câu lệnh SQL giữa các câu lệnh DELIMITER trong tập lệnh thủ tục được lưu trữ của bạn. Không bao gồm các câu lệnh DELIMITER! Đây là những gì ví dụ kịch bản của tôi sẽ giống như thế:

DROP PROCEDURE IF EXISTS spFoo $$ 
CREATE PROCEDURE spFoo() 
BEGIN 
    SELECT 'Foo' FROM DUAL; 
END $$ 

5.In lĩnh vực delimiter, ngay dưới biên tập SQL của vùng văn bản, nhập $$ như delimiter của bạn.

+0

Đây chính là vấn đề. Trong phpMyAdmin được cung cấp bởi lưu trữ, không xuất hiện khu vực văn bản ngay dưới trình soạn thảo SQL. Tôi không thể nhập $$ làm dấu phân cách. – user1039875

+2

@ user1039875 Trong trường hợp đó bạn vẫn đang làm việc với phiên bản phpMyAdmin từ thời kỳ đồ đá, hãy yêu cầu Fred Flintstone^H^H^H sysadmin của bạn cập nhật các chương trình của họ. – Johan

0

Cố gắng tạo/chỉnh sửa các thủ tục được lưu trữ và các đối tượng MySQL khác với trình chỉnh sửa đối tượng trực quan trong dbForge Studio for MySQL. Phiên bản nhanh là miễn phí.


  1. Kết nối câu hỏi - phải làm gì nếu không có kết nối trực tiếp đến máy chủ MySQL? Các cách có thể: HTTP tunneling - có thể được sử dụng để kết nối với máy chủ MySQL, nó là một phương thức kết nối tới máy chủ thông qua giao thức HTTP/HTTPS, hoặc sử dụng kết nối an toàn (giao thức mạng SSH/SSL).
  2. Lệnh DELIMITER khách hàng được hỗ trợ bởi công cụ được đề xuất. Vì vậy, lệnh này có thể được sử dụng trong các tập lệnh. Ngoài ra, các thủ tục được lưu trữ và các đối tượng khác có thể được tạo và sửa đổi trong trình chỉnh sửa trực quan.
+0

Với danh tiếng của bạn, tôi sẽ không muốn đánh dấu câu trả lời của bạn là spam. Bạn có thể vui lòng bao gồm cách bài đăng của bạn giúp giải quyết vấn đề của tác giả không? – Sampson

+0

Tất nhiên. Hai câu trả lời. Đầu tiên là sử dụng trình soạn thảo trực quan (như tôi đã nói). Thứ hai: mở tài liệu SQL mới và viết câu lệnh CREATE PROCEDURE với DELIMITER; các dấu phân tách được hỗ trợ bởi ứng dụng khách này. – Devart

+0

Trên thực tế - nó được biết đến vấn đề trong phiên bản phpMyAdmin cũ. Tôi thấy hai cách - không sử dụng dấu phân cách hoặc sử dụng một ứng dụng khách MySQL khác. – Devart

0

Bạn có thể đặt dấu phân cách theo cách thủ công bằng cách sử dụng delimiter $$, trong đó $$ là dấu phân tách đã chọn của bạn. Điều này hoạt động trên lưu trữ được chia sẻ của tôi với phpMyAdmin. Bạn nên nhớ đặt lại thành ; khi bạn hoàn tất.

4

Tại sao mọi người cố gắng sử dụng công cụ trực quan làm bảng điều khiển?!? Có một cách easyer:

Tới cơ sở dữ liệu của bạn, và tìm kiếm "More"

enter image description here

Sau đó, màn hình này sẽ hiển thị.Nếu bạn đã tạo ra bất kỳ thủ tục lưu trữ, họ sẽ được liệt kê

enter image description here

Để thêm mới một cú nhấp chuột "Add thói quen"

enter image description here

0

create procedure sp_helpme bắt đầu select * from my_table; kết thúc //

Delimiters in MySQL.

Bạn phải thay đổi ';' đến '//' trên hộp delimeter trong phpmyadmin. Sau khi thực hiện thành công, hãy quay trở lại chu vi.

0

Tôi gặp sự cố khi sử dụng tính năng 'Routines' trong PHPMyadmin cos nó tiếp tục cho tôi âm bản sai vì vậy tôi đã làm điều đó thông qua tab 'SQL' thay thế.

CREATE PROCEDURE GetUserPwd(email VARCHAR(320), pass VARCHAR(128)) 
BEGIN 
DECLARE userid INT(3) DEFAULT 0; 
DECLARE password_equal INT(3) DEFAULT 0; 
DECLARE output VARCHAR(30); 
SELECT id INTO userid FROM members WHERE user_email = email; 
IF userid != 0 THEN 
SELECT user_pass = pass INTO password_equal FROM members WHERE id = userid; 
IF password_equal = 0 THEN 
SET output = 'not exist'; 
ELSE 
SET output = 'exist'; 
END IF; 
END IF; 
SELECT output; 
END 

Trong hộp văn bản 'Dấu phân tách', nhập '$$'. tiết kiệm.

sau đó, chuyển đến tab 'Định tuyến' và nhấp vào 'thực thi' và nhập thông tin nhập của bạn khi được nhắc.

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