هل من الممكن تنفيذ سلسلة في MySQL؟
-
14-09-2019 - |
سؤال
يجب أن أقوم بتحويل Procs MSSQL المخزن الذي يمر varchar
هذا هو الاستعلام:
INSERT INTO Results
EXEC (@Expresion);
هذا لا يعمل. أنا متأكد جدا من أن EXEC
و EXECUTE
ليست أوامر mysql، ولكن CALL
لا يعمل أيضا.
هل يعرف أحد إذا كان من الممكن أن يكون لديك شيء مثل JavaScript eval
وظيفة ل mysql؟
المحلول
Execute هو أمر صالح في MySQL. MySQL دليل المراجع
نصائح أخرى
أعتقد أنك تبحث عن شيء مثل هذا:
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;
هذا هو ما يعادل SQL eval(my_string);
:
@Expression = 'SELECT "Hello, World!";';
PREPARE myquery FROM @Expression;
EXECUTE myquery;
في الأساس جمعت الإجابات الموجودة، لا يخبرك كيف تفعل التقييم بالضبط.
إذا كنت ترغب في إضافة معلمات، يمكنك استخدام هذا:
@username = "test";
@password = "asdf";
@Expression = 'SELECT id FROM Users WHERE name = ? AND pass = ?;'
PREPARE myquery FROM @Expression;
EXECUTE myquery USING @username, @password;
والإجابة على السؤال الأصلي بالضبط:
@Expression = 'SELECT "Hello, World!";'
PREPARE myquery FROM @Expression;
INSERT INTO Results
EXECUTE myquery;
نلاحظ أن PREPARE ... FROM
بيان يريد متغير الجلسة (البادئة مع @
). إذا حاولت تمرير متغير عادي، فسوف يرمي يديه في الهواء، بل إنه لن يهتم به.
ال EXECUTE
لا يمكن استخدام أمر MySQL إلا في بيان واحد أعد.
إذا كانت الحالة التي ترغب في تنفيذ استعلامات متعددة من السلسلة، ففكر في توفيرها في ملف ومصدر، على سبيل المثال
SET @query = 'SELECT 1; SELECT 2; SELECT 3;';
SELECT @query INTO OUTFILE '/tmp/temp.sql';
SOURCE /tmp/temp.sql;