снова OCI
От: molotilka  
Дата: 13.03.07 12:05
Оценка:
Столкнулся с такой проблемой.
Выполняю некую ХП, результет в виде курсора, например:
'declare CURSORS SYS_REFCURSOR; begin test1(:cursors); end;'

Как OCI-шными ф-ями получить информацию из курсора о полях?
Интересует только чистый OCI.
На всякий случай привожу полный текст процедуры:

CREATE OR REPLACE PROCEDURE "TEST1" (cursors OUT SYS_REFCURSOR)
is
query LONG;
begin
query:= 'select * from t where a = 1';
OPEN cursors FOR query;
end test1;
Re: снова OCI
От: wildwind Россия  
Дата: 13.03.07 17:06
Оценка:
Здравствуйте, molotilka, Вы писали:

M>Как OCI-шными ф-ями получить информацию из курсора о полях?


Также, как и из обычного курсора, открытого для select запроса. OCIParamGet() и т.д.
Re[2]: снова OCI
От: Аноним  
Дата: 14.03.07 08:22
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Здравствуйте, molotilka, Вы писали:


M>>Как OCI-шными ф-ями получить информацию из курсора о полях?


W>Также, как и из обычного курсора, открытого для select запроса. OCIParamGet() и т.д.


Что-то я не понял.
Вот мои действия:
есть стейтмент-выражения.
Пытаюсь биндить к нему хэндл-курсора, например:

OCIHandleAlloc(FEnvhp, FCurhp, OCI_HTYPE_STMT, 0, 0);
OCIBindByPos(Stm, FBindp, FErrhp, FPrmPos, @FCurhp, FPrmSize, FPrmType, 0, 0, 0, 0, 0, OCI_DEFAULT);

Дальше как обычно запускаем стейтмент.
Пытаемся узнать сколько у нас полей:
OCIAttrGet(Stm, OCI_HTYPE_STMT, @FFieldCount, nil, OCI_ATTR_PARAM_COUNT, FErrhp);
Ну и получаем в FFieldCount "0"

Что я делаю не так?
Re[3]: снова OCI
От: wildwind Россия  
Дата: 14.03.07 11:41
Оценка:
А>Пытаемся узнать сколько у нас полей:
А>OCIAttrGet(Stm, OCI_HTYPE_STMT, @FFieldCount, nil, OCI_ATTR_PARAM_COUNT, FErrhp);
А>Ну и получаем в FFieldCount "0"

А>Что я делаю не так?


Ты пытаешься узнать, сколько у тебя полей в Stm, а это совсем не полученный из процедуры курсор.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.