मेरे पास बहुत सारे कॉलम वाली एक टेबल है (उदाहरण: कॉलम 1, कॉलम 2, कॉलम 3, कॉलम 4, ...)
मैं XMLElement और XMLForest फ़ंक्शन का उपयोग प्रत्येक कॉलम के साथ एक टैग होने के साथ एक एक्सएमएल उत्पन्न करने के लिए करना चाहता हूं।
मैं केवल XMLForest में प्रत्येक कॉलम को मैन्युअल रूप से जोड़कर ऐसा करने में सक्षम हूं: उदाहरण:
SELECT
XMLElement("ParentTag",
XMLForest(TABLE.Column1,
TABLE.Column2,
TABLE.Column2,
...)
)
FROM ...
परिणाम :
<ParentTag> <Column1>Value1</Column1> <Column2>Value2</Column2> ...</ParentTag>
हालाँकि मैं प्रत्येक कॉलम को टाइप करने से बचना चाहूंगा क्योंकि भविष्य में उनकी संख्या बढ़ सकती है।
मैं ऐसा कुछ कैसे कर सकता हूँ? :
SELECT
XMLElement("ParentTag",
XMLForest(TABLE.*)
)
FROM ...
2 जवाब
अपनी आवश्यकता पूरी करने के लिए आप PLSQL
प्रक्रिया का उपयोग कर सकते हैं। यहां PLSQL
प्रक्रिया में, यह एक Tablename
स्वीकार करेगा और फिर XMLForest
उत्पन्न करेगा और परिणाम दिखाएगा। निचे देखो:
-- Creating a type of XMLTYPE
CREATE OR REPLACE TYPE Outpt IS TABLE OF XMLTYPE;
/
--Procedure with In parameter as Tablename and out parameter as resultset
CREATE OR REPLACE PROCEDURE XM_FOREST (tabnm VARCHAR2, v_out IN OUT Outpt)
AS
var VARCHAR2 (4000);
v_sql VARCHAR2 (4000);
BEGIN
FOR i IN (SELECT cname
FROM col
WHERE tname = tabnm)
LOOP
var := var || ',' || i.cname;
END LOOP;
var := LTRIM (var, ',');
v_sql :=
'select XMLElement("ParentTag",XMLForest('
|| var
|| ' ) ) from '
|| tabnm;
EXECUTE IMMEDIATE v_sql BULK COLLECT INTO v_out;
END;
--------------
--Execution
DECLARE
var_out Outpt := Outpt ();
LCLOB CLOB;
BEGIN
var_out.EXTEND;
XM_FOREST (tabnm => 'EMPLOYEE', v_out => var_out);
FOR i IN 1 .. var_out.COUNT
LOOP
LCLOB := var_out (i).getCLOBVAL ();
DBMS_OUTPUT.put_line (LCLOB);
END LOOP;
END;
------
--Result
SQL> /
<ParentTag><EMPLOYEE_ID>1</EMPLOYEE_ID><FIRST_NAME>XXX</FIRST_NAME></ParentTag>
<ParentTag><EMPLOYEE_ID>2</EMPLOYEE_ID><FIRST_NAME>YYY</FIRST_NAME></ParentTag>
PL/SQL procedure successfully completed.
मैं ऐसा कुछ कैसे कर सकता हूँ? :
SELECT XMLElement("ParentTag", XMLForest(TABLE.*) ) FROM ...
आप नहीं कर सकते, आपको सभी नाम अलग-अलग टाइप करने होंगे।
आप डायनेमिक SQL का उपयोग करके क्वेरी जेनरेट कर सकते हैं
Oracle 11g R2 स्कीमा सेटअप:
CREATE TABLE table_name (
id NUMBER,
a NUMBER,
b NUMBER,
c NUMBER,
d NUMBER
);
क्वेरी 1:
SELECT '
SELECT XMLElement(
"ParentTag",
XMLForest( '
|| LISTAGG( '"' || column_name || '"', ',' )
WITHIN GROUP ( ORDER BY Column_id )
||' ) ) FROM ...' AS query
FROM user_tab_columns
WHERE table_name = 'TABLE_NAME'
| QUERY |
|-------------------------------------------------------|
| SELECT XMLElement( |
| "ParentTag", |
| XMLForest( "ID","A","B","C","D" ) ) FROM ... |
संबंधित सवाल
नए सवाल
sql
संरचित क्वेरी भाषा (एसक्यूएल) डेटाबेस को क्वेरी करने के लिए एक भाषा है। प्रश्नों में कोड उदाहरण, तालिका संरचना, नमूना डेटा और DBMS कार्यान्वयन के लिए एक टैग (जैसे MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, आदि) का उपयोग किया जाना चाहिए। यदि आपका प्रश्न केवल एक विशिष्ट DBMS (विशिष्ट एक्सटेंशन / सुविधाओं का उपयोग करता है) से संबंधित है, तो इसके बजाय उस DBMS के टैग का उपयोग करें। एसक्यूएल के साथ टैग किए गए सवालों के जवाब में आईएसओ / आईईसी मानक एसक्यूएल का उपयोग करना चाहिए।