Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

पीएल/एसक्यूएल में इस डेटा को सॉर्ट करने के लिए किस डेटा संरचना का उपयोग करना है?

यदि आप PL/SQL का उपयोग SQL के रूप में करते हैं और अन्य भाषाओं की तरह नहीं तो यह बहुत आसान है। यह काफी विशिष्ट है और कभी-कभी ठीक इसी वजह से बहुत अच्छा होता है।

कभी-कभी मैं वास्तव में पीएल/एसक्यूएल से नफरत करता हूं, लेकिन यह मामला बिल्कुल प्यार का है।

देखें कि यह कितना आसान है:

create type it as object (
  iter          number,
  stringval     varchar2(100),
  intval        integer
);

create type t_it as table of it;

declare
  t       t_it := new t_it();
  tmp1    varchar2(32767);
  tmp2    varchar2(32767);
begin
  t.extend(4);
  t(1) := new it(1,'Oslo',40);
  t(2) := new it(2,'Berlin',74);
  t(3) := new it(3,'Rome',25);
  t(4) := new it(4,'Paris',10);

  select listagg(stringval,', ') within group (order by stringval),
         listagg(stringval,', ') within group (order by intval)
  into tmp1, tmp2
  from table(t);

  dbms_output.put_line(tmp1);
  dbms_output.put_line(tmp2);
end;
/

drop type t_it;
drop type it;

यहां आप समस्या देख सकते हैं कि आपको वैश्विक प्रकार बनाना चाहिए, और यही वह है जिसके लिए मुझे इससे नफरत है। लेकिन वे कहते हैं कि Oracle 12 में यह स्थानीय रूप से परिभाषित प्रकारों के साथ किया जा सकता है इसलिए मैं इसका इंतजार कर रहा हूं :)

आउटपुट है:

Berlin, Oslo, Paris, Rome
Paris, Rome, Oslo, Berlin

संपादित करें

जहाँ तक आप शुरुआत से ही पुनरावृत्तियों की मात्रा नहीं जानते हैं, प्रत्येक पुनरावृत्ति पर विस्तार करने का एकमात्र तरीका है (यह केवल विस्तार का उदाहरण है):

declare
  iterator       pls_integer := 1;
begin
  /* some type of loop*/ loop
    t.extend();

    -- one way to assign
    t(t.last) := new it(1,'Oslo',40);

    -- another way is to use some integer iterator
    t(iterator) := new it(1,'Oslo',40);

    iterator := iterator + 1;
  end loop;
end;

मैं दूसरा तरीका पसंद करता हूं क्योंकि यह तेज़ है (.last की गणना नहीं करता है) प्रत्येक पुनरावृत्ति पर)।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. केवल एक आईडी नंबर प्रदर्शित करने के लिए विशिष्ट फ़ील्ड और पंक्ति संख्या का चयन करने से डुप्लिकेट डेटा मिलता है

  2. SQL त्रुटि:ORA-00942 तालिका या दृश्य मौजूद नहीं है

  3. कोई बयान पार्स नहीं किया गया और गलत संख्या या तर्कों के प्रकार - cfstoredproc

  4. मैं शून्य के बिना .NET में Oracle संख्या मान कैसे प्राप्त कर सकता हूं?

  5. ओरेकल पीएल/एसक्यूएल आईपीवी 6 सीडीआर के लिए रेंज आईपी की गणना कैसे करें