سؤال

أولا، هذا السؤال يتعلق أوراكل SQL المطور 3.2, ، وليس SQL*Plus أو iSQL، وما إلى ذلك.لقد قمت بمجموعة من البحث ولكن لم أجد إجابة مباشرة.

لدي عدة مجموعات من البرامج النصية التي أحاول تشغيلها تلقائيًا (وراجع للشغل، تجربتي في SQL أساسية جدًا وتعتمد في الغالب على MS).المشكلة التي أواجهها هي تنفيذها بمسار نسبي.على سبيل المثال، افترض هذا الإعداد:

scripts/A/runAll.sql
       | /A1.sql
       | /A2.sql
       |
       /B/runAll.sql
         /B1.sql
         /B2.sql

أود الحصول على ملف scripts/runEverything.sql شيء من هذا القبيل:

@@/A/runAll.sql
@@/B/runAll.sql

البرامج النصية/A/runAll.sql:

@@/A1.sql
@@/A2.sql

أين "@@", أعتقد أن هذا يعني المسار النسبي في SQL*Plus.

لقد خدعت في صنع المتغيرات ولكن دون حظ كبير.لقد تمكنت من القيام بشيء مماثل باستخدام '&1' ويمر في الدليل الجذر.أي.:البرامج النصية/runEverything.sql:

@'&1/A/runAll.sql' '&1/A'
@'&1/B/runAll.sql' '&1/B'

ونسميها بتنفيذ هذا:

@'c:/.../scripts/runEverything.sql' 'c:/.../scripts'

لكن المشكلة هنا كانت ذلك B/runAll.sql يتم استدعاؤه بالمسار: c:/.../scripts/A/B.

فهل هذا ممكن؟ مع مطور SQL لإجراء مكالمات متداخلة، وكيف؟

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

المحلول

يتألف هذا النهج من عنصرين:

-إعداد مجلد ورقة عمل SQL Developer النشط كدليل افتراضي.

-افتح برنامج تشغيل، على سبيل المثال.runAll.sql، (الذي يقوم بعد ذلك بتغيير الدليل الافتراضي إلى الدليل النشط)، واستخدام المسارات النسبية داخل البرنامج النصي runAll.sql لاستدعاء البرامج النصية الشقيقة.

  1. قم بإعداد المجلد الافتراضي للبرامج النصية الخاصة بك.في شريط أدوات SQL Developer، استخدم هذا التنقل:

    الأدوات > التفضيلات

    في مربع حوار التفضيل، انتقل إلى قاعدة البيانات > ورقة العمل > حدد المسار الافتراضي للبحث عن البرامج النصية.

    أدخل المسار الافتراضي للبحث عن البرامج النصية كدليل العمل النشط:

    "${file.dir}"

  2. قم بإنشاء ملف نصي ووضع كافة البرامج النصية المرتبطة به:

    runAll.sql

    A1.sql

    A2.sql

    يتضمن محتوى runAll.sql ما يلي:

    @A1.sql;

    @A2.sql;

لاختبار هذا الأسلوب، في SQL Developer، انقر فوق "ملف" وانتقل وافتح الملف script unAll.sql.

بعد ذلك، حدد الكل (في ورقة العمل)، وقم بالتنفيذ.

من خلال عملية التنقل وفتح ورقة العمل runAll.sql، يصبح مجلد الملف الافتراضي "script".

نصائح أخرى

ليس لدي إمكانية الوصول إلى SQL Developer في الوقت الحالي، لذا لا يمكنني تجربة المسارات النسبية، ولكن مع متغيرات الاستبدال أعتقد أن المشكلة التي تراها هي أن المتغيرات الموضعية (أي. &1) يتم إعادة تعريفها بواسطة كل منهما start أو @.لذلك بعد الأول @runAll, ، يرى النص الأصلي نفس الشيء &1 التي رآها الطفل الأخير، والتي تتضمن الآن /A.

يمكنك تجنب ذلك عن طريق تحديد المتغير الخاص بك في البرنامج النصي الرئيسي:

define path=&1
@'&path/A/runAll.sql' '&path/A'
@'&path/B/runAll.sql' '&path/B'

طالما runAll.sql, ، وأي شيء يتم تشغيله، لا (يعيد تعريفه) أيضًا path من المفترض أن ينجح هذا، وتحتاج فقط إلى اختيار اسم فريد إذا كان هناك خطر حدوث تعارض.

مرة أخرى لا أستطيع التحقق من ذلك ولكني متأكد من أنني فعلت هذا بالضبط في الماضي ...

تحتاج إلى توفير مسار الملف كسلسلة، وإعطاء التصحيح في علامتي اقتباس مزدوجتين وسوف يعمل

**

على سبيل المثال @"c: user arpan saini zions r2 تقارير بيانات وإشعارات patch 08312017_patch_16.2.3.17 db scripts snsp.sql" ؛

**

هذه ليست مسألة مسار مطلقة أو نسبية.إنها مشكلة مترجم SQL، حيث سيبحث بشكل افتراضي عن الملفات التي لها امتداد .sql.

الرجاء التأكد من تعديل اسم الملف إلى file_name.sql

السابق:إذا كانت مساحة العمل تحتوي على اسم ملف يسمى "A"، فقم بنقل الملف من A إلى "A.sql"

تنفيذ SQL

@yourPath\yourFileName.sql
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top