الخلية الإجراءات المخزنة
-
08-07-2019 - |
سؤال
وأنا قادم من خلفية MS SQL خادم. العمل على مشروع جديد باستخدام الخلية مع أدوات برنامج Navicat 8 المسؤول. حسنا، وهنا السؤال. عادة عند العمل في MS الأرض إذا كنت تريد تحديث بعض البيانات I استخدام إجراء مخزن للقيام بذلك:
Drop Procedure spNew
Create Procedure spNew (@P_Param)
UPDATE Table
SET Field = 'some value'
WHERE ID = @P_Param
وأنا أحاول أن تفعل هذا المنطق نفسه من داخل برنامج Navicat.
I تعريف معلمة، (IN '@P_Param' int)
في تعريف أنا وضعت:
BEGIN
UPDATE Table
SET Field = 'some value'
WHERE ID = @P_Param
END;
وعندما أحاول وحفظ الإجراء المخزن، أنا الحصول على هذا الخطأ: "1064 - لديك خطأ في تركيب SQL الخاص وكذا وكذا وكذا"
ويمكن لأي شخص على الأقل لي نقطة في الاتجاه الصحيح؟
وشكرا.
المحلول
CREATE PROCEDURE spNew(P_Param INT)
BEGIN
UPDATE Table
SET Field = 'some value'
WHERE ID = P_Param;
END;
لاحظ أن جملة MySQL
والايديولوجية الشاملة هي <م> جدا م> تختلف عن SQL Server
.
وقد تحتاج أيضا إلى وضع محدد:
DELIMITER $$
CREATE PROCEDURE spNew(P_Param INT)
BEGIN
UPDATE Table
SET Field = 'some value'
WHERE ID = P_Param;
END;
$$
DELIMITER ;
وراجع للشغل، وأنا على افتراض انك لا ندعو فعلا "Table"
الجدول الخاص بك، لأنه كلمة محجوزة.
إذا قمت بذلك، تحتاج إلى احتوائه في backticks مثل هذا:
DELIMITER $$
CREATE PROCEDURE spNew(P_Param INT)
BEGIN
UPDATE `Table`
SET `Field` = 'some value'
WHERE `ID` = P_Param;
END;
$$
DELIMITER ;
نصائح أخرى
ومعلمات للإجراءات الخلية المخزن مع @ أو نقل في أي إعلان أو عند استخدامها. تكون مسبوقة المتغيرات المحلية مع @، ولكن.
وجرب:
DROP PROCEDURE IF EXISTS spNew;
CREATE PROCEDURE spNew(IN P_Param INT)
BEGIN
UPDATE Table
SET Field = 'some value'
WHERE ID = P_Param
END;