Lệnh MySQL để xem định nghĩa của một thủ tục hoặc hàm được lưu trữ, tương tự như sp_helptext
trong Microsoft SQL Server là gì?
Tôi biết điều đó SHOW PROCEDURE STATUS
sẽ hiển thị danh sách các thủ tục có sẵn. Tôi cần xem định nghĩa của một thủ tục.
Lệnh MySQL để xem định nghĩa của một thủ tục hoặc hàm được lưu trữ, tương tự như sp_helptext
trong Microsoft SQL Server là gì?
Tôi biết điều đó SHOW PROCEDURE STATUS
sẽ hiển thị danh sách các thủ tục có sẵn. Tôi cần xem định nghĩa của một thủ tục.
Câu trả lời:
SHOW CREATE PROCEDURE <name>
Trả về văn bản của một thủ tục được lưu trữ đã xác định trước đó đã được tạo bằng CREATE PROCEDURE
câu lệnh. Trao đổi PROCEDURE
cho FUNCTION
một chức năng được lưu trữ.
#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 1
Bạn có thể sử dụng cái này:
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";
mysql.proc
lợi nhuận blobs cho param_list
, returns
và body
... tôi không thể đọc chúng ... Làm sao bạn làm điều đó?
SELECT * FROM information_schema.PARAMETERS WHERE SPECIFIC_SCHEMA='$dbName' AND SPECIFIC_NAME=\"{$row['ROUTINE_NAME']}\" AND NOT PARAMETER_MODE IS NULL ORDER BY ORDINAL_POSITION;
Nếu bạn muốn biết danh sách các thủ tục, bạn có thể chạy lệnh sau:
show procedure status;
Nó sẽ cung cấp cho bạn danh sách các thủ tục và bộ định nghĩa của chúng Sau đó, bạn có thể chạy show create procedure <procedurename>;
Bạn có thể sử dụng bảng proc trong cơ sở dữ liệu mysql :
mysql> SELECT body FROM mysql.proc
WHERE db = 'yourdb' AND name = 'procedurename' ;
Lưu ý rằng bạn phải có một khoản trợ cấp cho lựa chọn đối với mysql.proc :
mysql> GRANT SELECT ON mysql.proc TO 'youruser'@'yourhost' IDENTIFIED BY 'yourpass' ;
cái gì đó như:
DELIMITER //
CREATE PROCEDURE alluser()
BEGIN
SELECT *
FROM users;
END //
DELIMITER ;
hơn:
SHOW CREATE PROCEDURE alluser
cho kết quả:
'alluser', 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER', 'CREATE DEFINER=`root`@`localhost` PROCEDURE `alluser`()
BEGIN
SELECT *
FROM users;
END'
Một giải pháp nhanh chóng và hack thay thế nếu bạn muốn có cái nhìn tổng quan về tất cả các sản phẩm ở đó hoặc gặp phải vấn đề chỉ nhận được tiêu đề thủ tục được hiển thị bởi SHOW CREATE PROCEDURE:
mysqldump --user=<user> -p --no-data --routines <database>
Nó cũng sẽ xuất các mô tả bảng, nhưng không có dữ liệu. Hoạt động tốt để đánh hơi xung quanh các lược đồ chưa biết hoặc đã quên ...;)
Tuyệt vời, hãy thử nó:
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";