Oracle и хранимые процедуры !
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Oracle и хранимые процедуры ! Expand / Collapse
Автор
Сообщение
14.11.2001 23:22
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 12.03.2002 21:37
Сообщ.: 2, Visits: 23
Здравствуйте !

У меня следующая проблема -
пишу хранимую процедуру в MSSQL тело которой имеет
следующий вид SELECT * FROM TABLE1, затем в Delphi
используя компонент TStoredProc я получаю набор данных.

как подобный запрос мне оформить в хранимой процедуре
на Oracle ???? Если я использую в хранимой процедуре
курсор, то не могу открыть процедуру в TStoredProc,
пишет ошибку связанную с дискриптором курсора !

Как мне поступить ??? Хотелось бы использовать процедуру
на стороне сервера, а не передавать запрос с помощью компонента
TQuery !

Заранее Благодарен !
Сообщ. #732846
15.11.2001 10:57
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 28.12.2002 11:35
Сообщ.: 69, Visits: 760
Где-то
http://www.relib.com/forums/topic.asp?id=732844
я уже это видел :)
Сообщ. #732900
18.11.2001 10:28
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 28.06.2002 21:38
Сообщ.: 47, Visits: 518
Я пытался бороться с этой проблемой когда работал с Builder 4. Теоретически как бы есть возможность передать из SP курсор или таблицу, но насколько я смог выяснить, практически это Delphi компонентами не поддерживается. Может быть сейчас ситуация изменилась к лучшему.
Сообщ. #733302
19.11.2001 13:39
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 17.04.2003 15:55
Сообщ.: 69, Visits: 760
Если вы работаете в Delphi/Builder, то используйте компоненты NcOCI (http://www.da-soft.com). Это совсем не реклама, это действительно хорошая компонента(ы) прямого доступа к Oracle, через OCI.DLL. Сами делаем проект, причем очень крупный на связке Oracle, Delphi+NcOCI.
Успехов.
Сообщ. #733443
03.12.2001 12:28
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 03.12.2001 12:25
Сообщ.: 2, Visits: 23
Касательно прямого доступа у Oracle, могу посоветовать еще Direct Oracle Access (DOA). Весьма и весьма неплохие компоненты. Сколько работал с ними - одно удовольствие по сравнению с муками при работе с BDE...
Сообщ. #735366
13.12.2001 11:55
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 21.10.2002 16:37
Сообщ.: 3, Visits: 34
Working with SQL Databases: triggers, rights, procs, etc.

http://www.borland.com/devsupport/sqllinks/pub-83.html
Сообщ. #736409
15.01.2002 10:17
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 17.01.2002 10:28
Сообщ.: 4, Visits: 45
все очень просто работает в варианте с БДЕ
нужно описать тип
ref cursor

в моем примере он описан в пакете

create or replace package Debug_PKG is
-- Public type declarations
type rLine is record (line varchar2(255));
type tLines_Output is table of rLine index by binary_integer;
type cLines_Output is ref cursor return rLine;

-- Public constant declarations

-- Public variable declarations
Lines1 DBMS_OUTPUT.chararr;

-- Public function and procedure declarations
function GetLine(i integer) return varchar2;

procedure Get_OutPutLines(
Lines in out cLINES_OUTPUT,
NumLines out integer);
pragma restrict_references (GetLine, WNPS,WNDS);
end Debug_PKG;

create or replace package body Debug_PKG is
function GetLine(i integer) return varchar2 is
begin
Return(Lines1(i));
end;

procedure Get_OutPutLines(
Lines in out cLINES_OUTPUT,
NumLines out integer)
is
i integer;
begin
NUMLINES := GetParamByName('DEBUG_OUTPUT',p_IdDep,p_IdUs);
DBMS_OUTPUT.GET_LINES(Lines1,NUMLINES);
open Lines for select substr(GetLine(rownum),1,255)
from orders where rownum <= Numlines;
end;
end Debug_PKG;

процедура создана для того чтобы работало под БДЕ, а такие библиотеки как DOA позволяют вытаскивать курсоры из процедур в пакетах

create or replace procedure Get_OutPutLines(
Lines out Debug_PKG.cLINES_OUTPUT,
NumLines out integer)
is
begin
Debug_PKG.GET_OUTPUTLINES(Lines,NumLines);
end;

потом нужно бросить на форму TStoredProc настроить ее на проседуру
так как TStoredProc является наследником TDataSet, то его можно использовать, например, как набор данных для грида.
и конечно надо его отрывать TStoredProc.Open

Ну а в варианте ипользования DOA там для этих целей нужно ипользовать
TOracleQuery
Сообщ. #739226
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 2:54