Новая ошибка в хранимой процедуре Oracle 9i, возвращающей SYS_REFCURSOR в vb6 RecordSet - PullRequest
0 голосов
/ 28 апреля 2011

при вызове хранимой процедуры Oracle 9i в программе vb6 с использованием набора записей произошла ошибка 91: переменная объекта или переменная блока не установлена ​​

Ниже приведена хранимая процедура

create or replace
PROCEDURE SP_some( P_IN IN VARCHAR2,
                    P_RECORDSET OUT SYS_REFCURSOR) AS 
BEGIN

OPEN P_RECORDSET FOR
  SELECT DISTINCT someColumn,  
  ROUND(TO_NUMBER((TO_DATE(SUBSTR(someTimeStamp,1,15), 'YYYYMMDD HH24MISS')+someInteger/24) - SYSDATE)*24*60) c1, 
  (TO_CHAR((TO_DATE(SUBSTR(someTimeStamp,1,15), 'YYYYMMDD HH24MISS')+someInteger/24),'DD/MM/YYYY HH24:MI:SS')) c2,
  DECODE(someData, 'Y', 'Yes','No') AS someBoolean
  FROM t1
  WHERE someID = P_IN ;

  -- i join more than 5 table here
END ;

Я выполнил хранимую процедуру без ошибок в Oracle SQL Developer, считая запись, но ошибка переполнения при попытке PUT_LINE значение

DECLARE 
  i_counter integer;
  v_cursor SYS_REFCURSOR;  
  v_value varchar2(100);  
BEGIN  
  SP_GET_WINDOWTIME(P_IN => 'PleaseWork',
                    P_RECORDSET => v_cursor);
  i_counter := 0;
  LOOP
    FETCH v_cursor
    INTO v_value;
    EXIT WHEN v_cursor%NOTFOUND;
    i_counter := i_counter + 1;
    --DBMS_OUTPUT.PUT_LINE(v_value ); ** Overflow Error encountered
    END LOOP;
  DBMS_OUTPUT.PUT_LINE('COUNT: ' || i_counter);
  CLOSE v_cursor;
END;

Код VB6, вызывающий

Set adoConnection = New ADODB.Connection
With adoConnection
  .ConnectionString = strConnection$
  .Open
End With

'Prepare rscommand and execute stored procedure
Set rsCommand = New ADODB.Command
With rsCommand
  .CommandType = adCmdStoredProc
  .CommandText = 'SP_some'
End With

rsCommand.Parameters.Append rsCommand.CreateParameter("P_IN", _
  adVariant, adParamInput, Len('PleaseWork'), 'PleaseWork')
'rsCommand.Parameters.Append rsCommand.CreateParameter("P_RECORDSET", adIUnknown, adParamOutput, 500) '**not sure required or not

adoRecordSet.CursorLocation = adUseClient
adoRecordSet.Open rsCommand, adoConnection, adOpenKeyset, adLockOptimistic

Кто-нибудь может пролить столь необходимый мне свет ???

Пожалуйста, помогите. Большое спасибо.

История: До этого он выдавал ошибку переполнения при использовании rsCommand для открытия набора записей. и решение было использовать cursortype и locktype. Отсюда и эта ошибка.

...