इस पर काफी पड़ताल करने के बाद आखिरकार मैं इस बात को समझने की स्थिति में आया हूं। हम किसी XML को सीधे OCI-Lob ऑब्जेक्ट में सीधे रूपांतरित नहीं कर सकते। क्योंकि
"Oracle कॉल इंटरफ़ेस (OCI) एक एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (API) है जो C में लिखे गए एप्लिकेशन को एक या अधिक Oracle सर्वर के साथ इंटरैक्ट करने की अनुमति देता है। OCI आपके प्रोग्राम को डेटाबेस संचालन की पूरी श्रृंखला करने की क्षमता देता है जो कि हैं Oracle9i डेटाबेस के साथ संभव है, जिसमें SQL स्टेटमेंट प्रोसेसिंग और ऑब्जेक्ट मैनिपुलेशन शामिल है।"
इसे ऐसा होने दें यदि हमारे पास कोई XMLAGG फ़ंक्शन है जिसमें getClobVal () क्वेरी के साथ है जिसे हम "Val" के रूप में संग्रहीत कर रहे हैं जो नीचे OCI-Lob ऑब्जेक्ट देता है
$Val = OCI-Lob Object
(
[descriptor] => Resource id #130
)
नीचे दिया गया फ़ंक्शन हमें ओसीआई-लॉब ऑब्जेक्ट [सीएलओबी डेटा टाइप] की एक्सएमएल सामग्री देगा, जिसका मैंने प्रश्नों में उल्लेख किया है।
$this->$conn = oci_connect('user', 'password', 'connectionString');
$query = "Some SELECT Query";
$stmt = oci_parse($this->oraConn, $query);
oci_execute($stmt);
while($row = oci_fetch_assoc($stmt)){
if($row['Val'] != false){
printVar($row['Val']->load());
break;
}
}
अब अगर मैं printVar($row['Val']->load()) से load() हटाता हूं और printVar($row['Val']) करता हूं तो यह मुझे फिर से OCI-Lob Object लौटा देगा।
ओसीआई-लॉब ऑब्जेक्ट प्राप्त करने के लिए हमें ओरेकल सेलेक्ट क्वेरी की आवश्यकता है इसके अलावा हम XMLAttributes/Elements getClobVal() या किसी फ़ंक्शन के साथ पास कर सकते हैं। लेकिन हम XML को पार्स नहीं कर सकते हैं और इसे OCI-Lob ऑब्जेक्ट में बदल सकते हैं क्योंकि यह हमेशा Oracle डेटाबेस/सर्वर के साथ इंटरैक्ट करता है।
तो PHP यूनिट परीक्षण चलाने के लिए मैंने जो किया वह था, मैंने एक्सएमएल लिया और उसे ओसीआईएमॉकऑब्जेक्ट में परिवर्तित कर दिया, जिसमें सभी एक्सएमएल मान होंगे और इसे फ़ंक्शन में पार्स करेंगे।
यह काम कर गया!
Oracle Call Interface(OCI) के बारे में अधिक जानने के लिए यह लिंक उपयोगी है। )
धन्यवाद।