سؤال

وأنا قادم من خلفية 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;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top