تنفيذ البرامج النصية حسب المسار النسبي في Oracle SQL Developer
-
20-12-2019 - |
سؤال
أولا، هذا السؤال يتعلق أوراكل 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 لاستدعاء البرامج النصية الشقيقة.
قم بإعداد المجلد الافتراضي للبرامج النصية الخاصة بك.في شريط أدوات SQL Developer، استخدم هذا التنقل:
الأدوات > التفضيلات
في مربع حوار التفضيل، انتقل إلى قاعدة البيانات > ورقة العمل > حدد المسار الافتراضي للبحث عن البرامج النصية.
أدخل المسار الافتراضي للبحث عن البرامج النصية كدليل العمل النشط:
"${file.dir}"
قم بإنشاء ملف نصي ووضع كافة البرامج النصية المرتبطة به:
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