2009-02-13 21 views
8

Tôi muốn sử dụng. để gọi sql script từ bên trong một proc được lưu trữ như vậy ...là nó có thể gọi một kịch bản sql từ một thủ tục được lưu trữ trong một kịch bản sql?

delimiter /// 
create procedure append_procedure() 
BEGIN 
\. test.sql;  
END; /// 
delimiter ; 

Tôi nhận được một "không mở được 'test.sql;' "lỗi khi tôi chạy theo cách này. Tôi cũng đã thử! nhưng sau đó tôi nhận được một sự cho phép bị từ chối lỗi. Tuy nhiên, tôi không thể loại bỏ; hoặc toàn bộ sự việc bị phá vỡ. Có cách nào để giái quyết vấn đề này không?

Tôi đang làm gì sai?

Trả lời

5

Có một tập hợp các lệnh được xây dựng trong cho khách hàng mysql. Chúng được ghi lại trong "mysql Commands". Chúng bao gồm DELIMITER, SOURCE, HELP, CONNECT, USE, QUIT, v.v.

Lệnh \. (hoặc SOURCE) là một trong những nội trang này. Bạn không thể thực hiện các lệnh nội trang này theo lập trình, cũng như không từ trong một thủ tục được lưu trữ.

Nó sẽ giống như cố gắng chạy trình xây dựng hệ vỏ UNIX từ chương trình C bằng cách sử dụng execl().

Một sự tương tự khác có thể nằm trong trình duyệt web, nơi bạn có thể nhập vào các yêu cầu đặc biệt như "about:" do chính ứng dụng trình duyệt xử lý; những điều này không dẫn đến bất kỳ yêu cầu HTTP nào đến một trang web từ xa. Ngoài ra, nó sẽ không giúp đỡ nếu bạn có thể nguồn một kịch bản từ bên trong một thủ tục lưu trữ, bởi vì bản thân kịch bản có khả năng chứa một loạt các lệnh được xây dựng khách hàng mysql, và do đó không thể được chạy bởi proc được lưu trữ.


Xem thêm câu trả lời của tôi cho những câu hỏi liên quan:

+0

vậy, bạn có nói rằng không có cách nào để làm điều này? hoặc tôi không thể làm điều đó bằng cách sử dụng \.? –

+0

Không có cách nào cho một proc được lưu trữ để mã nguồn một tập lệnh, cũng như không chạy nhiều lệnh trong kịch bản ngay cả khi bạn có thể mã nguồn nó. –

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