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

ऑरैकल क्वेरी को pl/sql में उपयोगकर्ता परिभाषित प्रकारों में कनवर्ट करना

(यह आज की मेरी अन्य पोस्ट में से एक है) यह आरंभ करने पर एक पूर्वाभ्यास है:http://www.oracle.com/technology/obe/hol08/dotnet/udt/udt_otn.htm

जबकि यह थोड़ा अधिक विस्तृत है:http://download.oracle.com /docs/html/E10927_01/featUDTs.htm

लेकिन वास्तविक मांस और आलू आपके कंप्यूटर पर नमूने निर्देशिका में ODP स्थापित करने के बाद पहले से ही स्थापित हैं:%ORA_HOME%\product\11.1.0\client_1\odp.net\samples\2.x\UDT

लेकिन चीजों का pl/sql पक्ष:

एक बार में एक पंक्ति को संभालने के लिए पहले सिंगलटन udt बनाएं

 CREATE TYPE TESTTYPE IS OBJECT(COLA VARCHAR2(50) , COLB NUMBER(10) );
 create or replace procedure GetTestType(lTestType OUT NOCOPY TESTTYPE)
 IS
  BEGIN
     SELECT TESTTYPE('ValA',123) 
       INTO LTESTTYPE
       FROM DUAL ;
  END GetTestType ;

.नेट साइड इंसिन्च प्राप्त करने के लिए उपरोक्त लिंक में दिए गए निर्देशों का पालन करें

अब एक संग्रह के लिए:

CREATE TYPE TESTTYPETABLE IS TABLE OF TESTTYPE ;

CREATE OR REPLACE PROCEDURE GETTESTTYPETABLE(lTestTypeTable OUT NOCOPY TestTypeTable)
 IS
  BEGIN
     SELECT TESTTYPE(COLA,COLB)
               bulk collect INTO lTestTypeTable
         FROM (
             SELECT 'ValA' COLA ,123 COLB
               FROM DUAL
               UNION
             SELECT 'ValB' COLA ,234 COLB
               FROM DUAL
               UNION
             SELECT 'Valc' COLA ,456 COLB
               FROM DUAL
         ) ;

END GETTESTTYPETABLe;

फिर चीजों के .net पक्ष में यह प्रभावी रूप से TESTTYPE()

. का मान होगा

अब अपना कुछ समय बचाने के लिए आप INSERT/UPDATE/DELETES जैसे पर रिटर्निंग क्लॉज का उपयोग कर सकते हैं

create table testTable (colA varchar2(50) , colB number(10) );
CREATE SEQUENCE TESTSEQ START WITH 1 NOCACHE;

DECLARE
lTestTypeTable TestTypeTable ; 
BEGIN
    UPDATE TESTTABLE
      SET
      COLA = '1' ,
      COLB = 'a'
    WHERE COLA IS NULL
     RETURNING TESTTYPE(COLA,COLB)  --NOTE IF YOU HAVE ONE ROW YOU MAY DROP THE BULK COLLECT AND PUT IT INTO THE SINGLE ROW TYPE
     BULK COLLECT INTO
     lTestTypeTable
     ;
END ; 
/



DECLARE
lTestType TestType; 
BEGIN
    INSERT INTO TESTTABLE(COLA, COLB)
    VALUES ('BBB' , testSeq.NEXTVAL )  
     RETURNING TESTTYPE(COLA,COLB)
     INTO
     lTestType
     ;

     DBMS_OUTPUT.PUT_LINE('MY NEW SEQUENCE # IS SET TO ' || lTestType.COLB) ;
END ; 
/

दुर्भाग्य से ऐसा लगता है कि आप ऐसा नहीं कर सकते हैं

insert into TT ... SELECT * from .. RETURNING Type(x,y) BULK COLLECT INTO lVariable;

इसलिए इस साइट से रटने के बजाय, यह एक "काम-आसपास" के बारे में बताता है कि एक सम्मिलित विवरण में काम करने के लिए थोक संग्रह प्राप्त करेंhttp://www.oracle-developer.net/display.php?id=413




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL डेवलपर में टेबल्स में शामिल होना

  2. JDBC का उपयोग करके संग्रहीत कार्यविधि से Oracle तालिका प्रकार प्राप्त करें

  3. डीबी में ब्लॉब लोड करने का प्रयास करते समय मुझे java.lang.AbstractMethodError क्यों मिलता है?

  4. डेटा डिक्शनरी से पैकेज वैश्विक चर खोजें

  5. Oracle SQL:regexp_substr . का उपयोग करके स्ट्रिंग की पहली पंक्ति लौटाएँ