سؤال

لا بد لي من إنشاء مستندات XML في PL/SQL من بعض الجداول في Oracle.لم أفعل هذا من قبل، وقد وجدت أن هناك بعض الطرق الرئيسية للقيام بذلك:

  • واجهة برمجة تطبيقات xmldom
  • وظائف XML (مثل xmlelement، xmlagg، xmlroot)
  • وظائف dbms_xmlgen

هناك 65 جدولًا سيتم الرجوع إليها لإنشاء مستند واحد، وسيتعين علي التحقق من صحة الإخراج مقابل xsd.سيتم إنشاء المستندات دفعة واحدة (وليس عند الطلب) - لا أعرف ما إذا كان ذلك سيحدث فرقًا.باستخدام أوراكل 10G.

كنت أميل في البداية نحو استخدام حزمة xmldom لأنها بدت أكثر مرونة، لكني أجد صعوبة في العثور على أمثلة أو وثائق جيدة لها، في حين أن وظائف xml تبدو موثقة بشكل أفضل وأكثر شيوعًا بشكل عام.هل هناك سبب لذلك؟

ما هو النهج الذي يوصي به الأشخاص عمومًا لهذا النوع من المهام؟

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

المحلول

من خلال تجربتي، يعد DBMS_XMLGEN مفيدًا لترجمات البيانات السريعة والقذرة إلى XML، لكنني لم أحبه كثيرًا لأنه يتعين عليك تمرير SQL كسلسلة.بالإضافة إلى ذلك، فإن التحكم في أسماء العناصر وبنية ROWSET/ROW محدود للغاية.

تعتبر وظائف XML سهلة الاستخدام للغاية، وهي المفضلة لدي، إذا كنت تتعامل مع بنيات بسيطة نسبيًا.بمجرد دخولك إلى مستويات XMLAgg المتعددة، على سبيل المثال، أجد أنها تتحول بسرعة إلى فوضى مربكة.

XMLDOM هي الطريقة الأكثر مرونة لإنشاء XML، خاصة إذا كانت البنية أكثر تعقيدًا أو كان هناك منطق تكراري.العيب الرئيسي هنا هو أنه في الأساس عبارة عن غلاف حول Java DOM حيث تقبل معظم الطرق إدخال DOMNode، لكن PL/SQL لا يدعم تعدد الأشكال مباشرة، لذلك ينتهي بك الأمر مع الكثير من القوالب الواضحة بين DOMElement وDOMNode و بالعكس، الخ.بشكل عام، أقوم بإنشاء حزمتي الخاصة من الإجراءات المثقلة لتغليف كل هذا وجعل العمل بها أقل إيلامًا.

نصائح أخرى

حسنًا، لم أستخدم Oracle مطلقًا لإنشاء أي مستند XML معقد للغاية، ولكن استخدام DBMS_XMLDOC أمر سهل للغاية.

قد ترى هيكل عظمي هناهنا, ، رمز pl/sql فقط).استخدم أيضًا Google Code Search، فمن المؤكد أن هناك المزيد الذي يمكنك العثور عليه.
ثم هناك مرجع DBMS_XMLDOM مما يساعد حتى لو كانت الوثائق جافة إلى حد ما.

تأكد من قراءة هاتين الرسالتين أيضًا:
http://www.liberidu.com/blog/?p=365
http://www.liberidu.com/blog/?p=369

وبدلاً من ذلك، يمكنك التفكير في إنشاء XML باستخدام إجراء Java المخزن.

أستخدم بشكل عام وظائف XML (XMLElement, XMLForest, ، وما إلى ذلك) لأنني أتحكم في XSD.أجعل XSD يتطابق بشكل عام مع بنية المستندات، بحيث تتطابق الأشياء معًا بشكل جيد.

إذا كان المخطط الذي تحاول العمل به معقدًا بشكل استثنائي أو جبان يجب عليك أن تنظر في DBMS_XMLGEN أو DOM طُرق.

فيما يلي مناقشة جيدة لبعض الخيارات المتاحة لك:

http://asktom.Oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:4980337843276

وأيضًا إذا بحثت عن "Sean Dillon" على AskTom، فسوف تحصل على مجموعة جيدة من المقالات التي توضح بالتفصيل المشكلات والحلول المتنوعة باستخدام XML داخل Oracle.

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