2010-06-30 23 views

回答

5

(這是從今天起我的其他職位之一) 這是入門的演練:http://www.oracle.com/technology/obe/hol08/dotnet/udt/udt_otn.htm

,而這是一個比較詳細:http://download.oracle.com/docs/html/E10927_01/featUDTs.htm

但真正的肉&土豆已經在Samples目錄中安裝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 ; 

按照上面的鏈接的方向得到.NET方面insynch

,現對於收集處理一行:

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()

現在爲了節省你一些時間,你可以使用RETURN在INSERT ING條款/ 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

+0

非常感謝。這是我一直在尋找的PL/SQL方面。我的其他問題還不夠清楚,所以我也會在那裏標記。 – haymansfield 2010-07-01 08:44:30

+0

np,我添加了一些額外的實現細節,從更新/插入/等獲取SQL數據集合(這會節省我一些時間!) – Harrison 2010-07-01 11:46:34

相關問題