0Pricing
SQL Academy · درس

كتل DO والتعليمات البرمجية المجهولة

شغّل PL/pgSQL مخصصًا باستخدام كتل DO، وأدر اقتباس dollar، واستخدم كتل DO لعمليات الترحيل لمرة واحدة

كتل DO والتعليمات البرمجية المجهولة درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.

ما كتلة DO؟

تتيح لكم كتلة DO تشغيل PL/pgSQL من دون تعريف دالة ذات اسم. وهي مناسبة تمامًا لعمليات الترحيل لمرة واحدة والبرامج النصية المخصصة.

كتلة DO الأساسية

البنية الأساسية:

DO $$
BEGIN
  RAISE NOTICE 'Hello from PL/pgSQL';
END;
$$ LANGUAGE plpgsql;

-- The language defaults to plpgsql, so you can omit it:
DO $$ BEGIN RAISE NOTICE 'Hi'; END $$;

الاقتباس بعلامات الدولار

يتجنب المحدِّد $$ الحاجة إلى تخمين علامات الاقتباس المفردة. ويمكنكم استخدام وسم للشفرة المتداخلة:

DO $outer$
BEGIN
  EXECUTE $inner$ SELECT 'embedded \'quotes\'' $inner$;
END;
$outer$;

DDL الشرطي

أضيفوا عمودًا فقط إذا لم يكن موجودًا:

DO $$
BEGIN
  IF NOT EXISTS (
    SELECT 1 FROM information_schema.columns
    WHERE table_name='users' AND column_name='last_login'
  ) THEN
    ALTER TABLE users ADD COLUMN last_login TIMESTAMPTZ;
  END IF;
END $$;

الحلقات للترحيل الجماعي

حدّثوا جدولًا ضخمًا على دفعات:

DO $$
DECLARE
  rows_updated INT;
BEGIN
  LOOP
    UPDATE users SET tier = compute_tier(...)
    WHERE id IN (
      SELECT id FROM users WHERE tier IS NULL LIMIT 10000
    );
    GET DIAGNOSTICS rows_updated = ROW_COUNT;
    EXIT WHEN rows_updated = 0;
    COMMIT;
  END LOOP;
END $$;

SQL الديناميكي باستخدام EXECUTE

أنشئوا سلاسل SQL بأمان باستخدام format() وEXECUTE:

DO $$
DECLARE
  tbl TEXT;
BEGIN
  FOR tbl IN SELECT tablename FROM pg_tables WHERE schemaname='public' LOOP
    EXECUTE format('ANALYZE %I;', tbl);
  END LOOP;
END $$;

التحكم في المعاملات داخل DO

في إصدارات PG الأقدم: تعمل كتلة DO داخل معاملة ضمنية واحدة. تسمح إصدارات PG 11 والإصدارات الأحدث باستخدام COMMIT/ROLLBACK داخل الإجراءات (CALL)، لكن ليس داخل DO. ولعمليات الترحيل على دفعات مع تنفيذ عمليات الالتزام، استخدموا إجراءً.

الإجراءات مقابل DO

  • DO — مجهول، يُشغَّل مرة واحدة، وفي المعاملة الحالية
  • PROCEDURE — ذو اسم، ويدعم COMMIT/ROLLBACK، ويُستدعى عبر CALL
CREATE PROCEDURE migrate_users() LANGUAGE plpgsql AS $$
BEGIN
  -- can COMMIT here
END $$;

CALL migrate_users();

معالجة الأخطاء

تعمل كتل EXCEPTION بالطريقة نفسها المتّبعة في الدوال ذات الأسماء:

DO $$
BEGIN
  ...
EXCEPTION
  WHEN OTHERS THEN
    RAISE NOTICE 'failed: %', SQLERRM;
END $$;

لا تستخدموا DO للمهام المتكررة

إذا كنتم ستشغّلون المنطق نفسه أكثر من مرة، فعرّفوا دالة أو إجراءً. صُمّم DO للعمليات التي تُنفّذ لمرة واحدة.

استخدموا DO في عمليات الترحيل

تشغّل معظم أدوات الترحيل، مثل Flyway وSqitch، SQL عاديًا. وتتيح لكم كتل DO تضمين تدفق التحكم من دون إنشاء دوال منفصلة.

مراجعة

كتل DO هي PL/pgSQL مخصص للتنفيذ عند الحاجة.

  • تشغيل مجهول لمرة واحدة
  • مناسبة جدًا لـ DDL الشرطي وعمليات الترحيل
  • انتبهوا إلى الاقتباس بعلامات الدولار
  • للتحكم في المعاملات، استخدموا PROCEDURE

تحقق سريع

تريدون تشغيل PL/pgSQL مرة واحدة أثناء عملية ترحيل من دون إنشاء دالة ذات اسم. ما البنية التي تستخدمونها؟

الأسئلة الشائعة

هل درس «كتل DO والتعليمات البرمجية المجهولة» مجاني؟

نعم — نص درس «كتل DO والتعليمات البرمجية المجهولة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.

ماذا ستتعلم في «كتل DO والتعليمات البرمجية المجهولة»؟

شغّل PL/pgSQL مخصصًا باستخدام كتل DO، وأدر اقتباس dollar، واستخدم كتل DO لعمليات الترحيل لمرة واحدة تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟

لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «كتل DO والتعليمات البرمجية المجهولة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟

نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تشريح المشغلات: BEFORE/AFTER، وFOR EACH ROW
  2. أساسيات دوال PL/pgSQL
  3. كتل DO والتعليمات البرمجية المجهولة
  4. تدقيق الجداول باستخدام المشغلات
← العودة إلى SQL Academy