سؤال

ولدي سؤال بخصوص وظيفة التحديث أنا خلقت ...

CREATE OR REPLACE FUNCTION rm_category_update(icompany bpchar, iraw_mat_cat_code bpchar, iraw_mat_cat_desc bpchar)

RETURNS character AS

$BODY$

DECLARE
   loc_result    CHAR(50); 

BEGIN

UPDATE rm_category

 SET
    raw_mat_cat_code    = iraw_mat_cat_code,
    raw_mat_cat_desc    = iraw_mat_cat_desc

WHERE company = icompany;

loc_result = 'success';

RETURN loc_result ;

END;

$BODY$

LANGUAGE 'plpgsql' VOLATILE;

ALTER FUNCTION rm_category_update(icompany bpchar, iraw_mat_cat_code bpchar, iraw_mat_cat_desc bpchar) OWNER TO postgres;

حسنا، حتى لو كنت إدخال السجل الذي لا وجود له، على سبيل المثال 9، فإنها ترجع النجاح على الرغم من أنني أعلم أنه قد حدث شيء!

هل SQL لا رمي الأخطاء إذا كان تحديث صف غير موجود ؟؟

والشكر

هل كانت مفيدة؟

المحلول

وذلك يعتمد على نظم إدارة قواعد البيانات - ولكن لا، لا ينبغي أن رمي خطأ. وفقا لمعيار SQL (ISO / IEC 9075: 2008 في هذه الأيام)، وينبغي أن تعيين الشرط SQLNOTFOUND (+100)، وهي منفصلة عن أي حالة الخطأ. (مع ينفورميكس، إذا كنت تستخدم قاعدة بيانات MODE ANSI، يمكنك الحصول على SQLNOTFOUND، وإذا كنت تستخدم قاعدة بيانات غير ANSI، يمكنك الحصول على 0 (أي خطأ) كشرط أسباب التي تسبق تاريخ الأصلي SQL-86 مستوى. )

لاحظ أن SQL هي لغة القائم على مجموعة. ما الذي طلبته هو أن بيان تحديث مجموعة من (مطابقة) الصفوف - ويصح تماما لتحديث مجموعة تحتوي على صفر (مطابقة) الصفوف

نصائح أخرى

هل يمكن استخدام "وجدت" لاكتشاف ما إذا كان يؤثر على بيان آخر واحد أو أكثر من الصفوف، انظر> وأ href = "http://www.postgresql.org/docs/8.3/interactive/plpgsql-statements.html#PLPGSQL العبارات الترويجية-DIAGNOSTICS "يختلط =" نوفولو noreferrer "> دليل .

مثال:

-- snippet
IF FOUND THEN
  loc_result = 'success';
ELSE
  loc_result = 'failed'; -- or something similiar...
END IF;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top