(đây là từ một trong những bài đăng khác của tôi hôm nay) đây là hướng dẫn cách bắt đầu:http://www.oracle.com/technology/obe/hol08/dotnet/udt/udt_otn.htm
trong khi điều này chi tiết hơn một chút: http://download.oracle.com /docs/html/E10927_01/featUDTs.htm
nhưng thịt và khoai tây thật đã được cài đặt trên máy tính của bạn sau khi bạn cài đặt ODP trong thư mục Mẫu:% ORA_HOME% \ product \ 11.1.0 \ client_1 \ odp.net \ samples \ 2.x \ UDT
nhưng mặt pl / sql của mọi thứ:
Đầu tiên tạo udt singleton để xử lý từng hàng một
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 ;
làm theo các hướng dẫn trong các liên kết ở trên để nhận thông tin chi tiết về phía .net
NGAY CHO BỘ SƯU TẬP:
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;
thì ở phía .net của mọi thứ, đây thực sự sẽ là một giá trị của TESTTYPE ()
Bây giờ để tiết kiệm thời gian, bạn có thể sử dụng mệnh đề RETURNING trên INSERT / UPDATE / DELETES như vậy
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 ;
/
rất tiếc, có vẻ như bạn không thể làm một
insert into TT ... SELECT * from .. RETURNING Type(x,y) BULK COLLECT INTO lVariable;
vì vậy, thay vì sao chép vẹt TỪ TRANG WEB NÀY, NÓ NÓI VỀ MỘT "công việc" ĐỂ CÓ ĐƯỢC SỐ LƯỢNG LỚN ĐỂ LÀM VIỆC TRONG MỘT BÁO CÁO CHÈN http://www.oracle-developer.net/display.php?id=413