2009-06-16 37 views
18

tôi phải chuyển đổi một proc lưu trữ MSSQL mà đi một varchar đó là một truy vấn:Có thể thực thi một chuỗi trong MySQL không?

INSERT INTO Results 
    EXEC (@Expresion); 

này không hoạt động. Tôi khá chắc chắn rằng EXECEXECUTE không phải là các lệnh MySQL, nhưng CALL cũng không hoạt động.

Có ai biết nếu thậm chí có thể có chức năng như chức năng eval của JavaScript cho MySQL không?

Trả lời

13

Tôi nghĩ rằng bạn đang tìm kiếm một cái gì đó như thế này:

SET @queryString = (
SELECT CONCAT('INSERT INTO user_group (`group_id`,`user_id`) VALUES ', www.vals) as res FROM (
    SELECT GROUP_CONCAT(qwe.asd SEPARATOR ',') as vals FROM ( 
      SELECT CONCAT('(59,', user_id, ')') as asd FROM access WHERE residency = 9 
    ) as qwe 
) as www 
); 

PREPARE stmt FROM @queryString; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
SET @asd = NULL; 
+1

'@ ads' trong lệnh cuối cùng của bạn là gì? –

6

này là tương đương với SQL của eval(my_string);:

@Expression = 'SELECT "Hello, World!";'; 
PREPARE myquery FROM @Expression; 
EXECUTE myquery; 

Về cơ bản tôi kết hợp các câu trả lời có sẵn, không phải nói với bạn làm thế nào để làm eval chính xác.


Nếu bạn muốn thêm các thông số, bạn có thể sử dụng này:

@username = "test"; 
@password = "asdf"; 
@Expression = 'SELECT id FROM Users WHERE name = ? AND pass = ?;' 
PREPARE myquery FROM @Expression; 
EXECUTE myquery USING @username, @password; 

Và để trả lời câu hỏi ban đầu chính xác:

@Expression = 'SELECT "Hello, World!";' 
PREPARE myquery FROM @Expression; 
INSERT INTO Results 
    EXECUTE myquery; 

Lưu ý rằng tuyên bố PREPARE ... FROM muốn một biến phiên (bắt đầu bằng @). Nếu bạn cố gắng vượt qua một biến bình thường, nó sẽ ném tay lên trong không khí và nó sẽ không quan tâm.

+0

'@Expression = 'SELECT" Xin chào, Thế giới! ";';" Không hoạt động đối với tôi. Tôi đang sử dụng MySQL v5.6.30. – kenorb

+0

@kenorb Lạ vì tôi chắc chắn điều này đã làm việc trên một phiên bản mysql gần đây. Có thể nó có một cái gì đó để làm với thiết lập một dấu phân cách khác nhau? (Tôi có thể đã làm điều đó nhưng quên rằng nó ảnh hưởng đến điều này.) – Luc

+3

Có thể cần đến 'SET' trước đó. – kenorb

1

Lệnh EXECUTE MySQL chỉ có thể được sử dụng cho một câu lệnh đã chuẩn bị.

Nếu trường hợp bạn muốn thực hiện nhiều truy vấn từ chuỗi, hãy xem xét lưu chúng vào tệp và nguồn, ví dụ:

SET @query = 'SELECT 1; SELECT 2; SELECT 3;'; 
SELECT @query INTO OUTFILE '/tmp/temp.sql'; 
SOURCE /tmp/temp.sql; 
Các vấn đề liên quan