问题
I have an Oracle stored procedure named CREATE_CASE_EXL
:
PROCEDURE CREATE_CASE_EXL(P_RICdata RICTab,
P_sACTION_TYPE IN VARCHAR2);
where RICTab
is a custom type:
TYPE RICTab IS TABLE OF MMSRRicRec INDEX BY BINARY_INTEGER;
TYPE MMSRRicRec IS RECORD
( RIC VARCHAR2(32),
FID_NO NUMBER(8),
REC_ID NUMBER(8),
MMS_ACTION VARCHAR2(1)
);
I run this code in PL/SQL to execute CREATE_CASE_EXL
:
DECLARE
pTE_RICS RICTab
BEGIN
pTE_RICS(1).RIC := 'RIC1';
pTE_RICS(1).FID_NO := NULL;
pTE_RICS(1).REC_ID := 3;
pTE_RICS(1).MMS_ACTION := 'A';
pTE_RICS(1).RIC := 'RIC2';
pTE_RICS(1).FID_NO := NULL;
pTE_RICS(1).REC_ID := 4;
pTE_RICS(1).MMS_ACTION := 'A';
CREATE_CASE_EXL( pTE_RICS , 'A');
END;
I need to execute something similar in .NET. Can you please advise how could I pass a parameter as a table of data to an Oracle stored procedure? Should I use a UDT for this task?
回答1:
actually I found that it's supported, but you have to use Oracle UDT for that purpose.
Here's link to the resources which I used to solve the issue: http://appsjack.blogspot.co.uk/2010/09/pass-custom-udt-types-to-oracle-stored.html
Big thanks to everybody for the advices!
回答2:
I don't think this is currently supported. I think you will have to use some workaround.
1) XML
2) smart associative array
pTE_RICS(1).RIC := 'RIC1'; -> pTE_RICS("item[0].RIC") := 'RIC1';
We were choosing between them a year ago and we chose XML. (and also trying to get your case working but without success)
来源:https://stackoverflow.com/questions/12712355/how-to-pass-a-table-valued-parameter-from-c-sharp-to-oracle-stored-procedure