Классический ASP/OraOLEDB - как определить параметр OUT, содержащий TABLE?

Классический ASP-скрипт, перенесенный из msdaora в OraOLEDB, больше не будет выполнять Oracle SP, к которому он привык.

SP выглядит так:

TYPE tbl_CONSOLIDATED_ID      IS TABLE OF VARCHAR2(32) INDEX BY BINARY_INTEGER;
TYPE tblSAM_DD_TEXT     IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER;
TYPE tblSAM_TYPE     IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
--
PROCEDURE Get_Associated_Samples(
EMPID_IN IN MAS_EMPLOYEE.EMP_AUTOID%TYPE,
ID_OUT OUT tbl_CONSOLIDATED_ID,
SAMDDTEXT_OUT OUT tblSAM_DD_TEXT,
SAMTYPE_OUT OUT tblSAM_TYPE
);

И ASP, чтобы вызвать это выглядит так:

Const cProcName = "{call VERIFICATION_SUPPORT.Get_Associated_Samples(?,{resultset 100, ID_OUT, SAMDDTEXT_OUT, SAMTYPE_OUT})}"   

Set MASconnLocal = Server.CreateObject("ADODB.Connection")
strCNLocalPath = ORAOLEDBCONNECTIONSTRING 
MASconnLocal.Open(strCNLocalPath)

Set cmdStoredProc = Server.CreateObject ("ADODB.Command")
Set cmdStoredProc.ActiveConnection = MASconnLocal

cmdStoredProc.CommandText = cProcName 
cmdStoredProc.CommandType = 1 

Set paramEMPID = cmdStoredProc.CreateParameter ("EMPID_IN", adInteger, adParamInput)

paramEMPID.Value = strEMPID

cmdStoredProc.Parameters.Append paramEMPID

Set rs = cmdStoredProc.Execute

Ошибка, сообщаемая в журнале IIS:

ORA-06550:_line_1__column_54:_PLS-00201:_identifier_'ID_OUT'_must_be_declared_ORA-06550

Что делать?

Из моего чтения до сих пор я прочитал предложения о том, что в ASP я должен определить параметры для каждого из выходных параметров так же, как у меня для paramEMPID, что-то вроде этого:

dim paramIDOut 
dim paramSamDDTextOut
dim paramSamTypeOut

set paramIDOut = cmdStoredProc.CreateParameter ("ID_OUT" ) 
set paramSamDDTextOut = cmdStoredProc.CreateParameter ("SAMDDTEXT_OUT")
set paramSamTypeOut = cmdStoredProc.CreateParameter ("SAMTYPE_OUT")

cmdStoredProc.Parameters.Append paramIDOut
cmdStoredProc.Parameters.Append paramSamDDTextOut
cmdStoredProc.Parameters.Append paramSamTypeOut

Однако для создания CreateParameter требуется больше аргументов, чем я там показал, и я не знаю, какие значения аргументов подходят, когда упоминается параметр SP, например, TABLE OF VARCHAR2(50).

Я действительно ценю современный способ сделать это - вернуть курсор ref, но приложение устарело и недолговечно для мира, я бы предпочел изменить как можно меньше.

0 ответов

Другие вопросы по тегам