Столкнулся с такой проблемой.
Выполняю некую ХП, результет в виде курсора, например:
'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;
Здравствуйте, 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"
Что я делаю не так?
А>Пытаемся узнать сколько у нас полей:
А>OCIAttrGet(Stm, OCI_HTYPE_STMT, @FFieldCount, nil, OCI_ATTR_PARAM_COUNT, FErrhp);
А>Ну и получаем в FFieldCount "0"
А>Что я делаю не так?
Ты пытаешься узнать, сколько у тебя полей в Stm, а это совсем не полученный из процедуры курсор.