Классический 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, но приложение устарело и недолговечно для мира, я бы предпочел изменить как можно меньше.