Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

PL/SQL - хочу странного (а может и нет)


Страницы:   1 2 3

Dennis I. Komarov ©   (2012-11-13 22:20:00) 

оракуль может подобное?
транслит:
function (a1, a2, ..., am, var b1, b2, ..., bn): TDataSet;

т.е.
FUNCTION...
in
in
out
out
RETURN

на выходе рекордсет (CURSOR наверное)

если да, то пример плз


Игорь Шевченко   (2012-11-23 09:54:00) [21]


> А аргументы?


Кривое не может сделаться прямым (Еккл. 1, 15)


Dennis I. Komarov   (2012-11-23 06:40:00) [22]


> cmd.Prepared := true;
>  cmd.Parameters.ParamValues['a_foo'] := 1;
>  cmd.Parameters.ParamValues['a_bar'] := 'FOOBAR';
>  cmd.Execute;
>  ShowMessageFmt('%s %s %s',
>    [VarToStr(cmd.Parameters.ParamValues['result']),
>     VarToStr(cmd.Parameters.ParamValues['a_foo_out']),
>     VarToStr(cmd.Parameters.ParamValues['a_bar_out'])]);
>
> end;
>
>  object cmd: TADOCommand
>    CommandText =
>      'begin  :result ::= foobar(:a_foo, :a_bar, :a_foo_out,
>  :a_bar_out' +
>      '); end;'

Вон оно как...
Я ожидал что-то вроде select f(...) from dualили подобных танцев...


> Какая же дрянь это ваше ADO

А аргументы? Какая разница как мы доставим команду до оракуля?


Германн   (2012-11-23 01:57:00) [23]


> Игорь Шевченко ©   (22.11.12 23:24) [20]
>
> Какая же дрянь это ваше ADO
>

Т.е. BDE всё-таки лучше ADO?


Игорь Шевченко   (2012-11-22 23:24:00) [24]

Какая же дрянь это ваше ADO


Игорь Шевченко   (2012-11-22 23:20:00) [25]

CREATE OR REPLACE FUNCTION foobar (
 a_foo IN NUMBER,
 a_bar IN VARCHAR2,
 a_foo_out OUT NUMBER,
 a_bar_out OUT VARCHAR2
) RETURN NUMBER
IS
BEGIN
 a_foo_out := NVL(a_foo,1) * 2;
 a_bar_out := NVL(a_bar, 'BAR')||' '||'BAR';
 RETURN 100;
END;
/


procedure TForm1.Button1Click(Sender: TObject);
begin
 db.Open;
 cmd.Prepared := true;
 cmd.Parameters.ParamValues['a_foo'] := 1;
 cmd.Parameters.ParamValues['a_bar'] := 'FOOBAR';
 cmd.Execute;
 ShowMessageFmt('%s %s %s',
   [VarToStr(cmd.Parameters.ParamValues['result']),
    VarToStr(cmd.Parameters.ParamValues['a_foo_out']),
    VarToStr(cmd.Parameters.ParamValues['a_bar_out'])]);
end;


 object cmd: TADOCommand
   CommandText =
     'begin  :result ::= foobar(:a_foo, :a_bar, :a_foo_out, :a_bar_out' +
     '); end;'
   Connection = DB
   Parameters = <
     item
       Name = 'result'
       DataType = ftInteger
       Direction = pdReturnValue
       Size = -1
       Value = Null
     end
     item
       Name = 'a_foo'
       DataType = ftInteger
       Size = -1
       Value = Null
     end
     item
       Name = 'a_bar'
       DataType = ftString
       Size = 4000
       Value = Null
     end
     item
       Name = 'a_foo_out'
       DataType = ftInteger
       Direction = pdOutput
       Size = -1
       Value = Null
     end
     item
       Name = 'a_bar_out'
       DataType = ftString
       Direction = pdOutput
       Size = 4000
       Value = Null
     end>
   Left = 96
   Top = 20
 end


Dennis I. Komarov   (2012-11-22 22:30:00) [26]

Синтаксис какой?


Медвежонок Пятачок   (2012-11-22 22:11:00) [27]

adocommand, правильно настроенные параметры с типом in out b и все должно работать


Dennis I. Komarov   (2012-11-22 22:07:00) [28]


> Потому что из этих слов, кроме как отрубить голову, я выхода
> не вижу :)

Так за что? Надо было вернуть помимо рекордсета еще пару значений, чтобы не делать запрос дважды. Просто спросил, можно сие, али нет. Так ведь сразу... :)


Dennis I. Komarov   (2012-11-22 22:04:00) [29]


> Я не понимаю, чего ты хочешь. Расскажи два раза и медленно.

Есть в оракуле хранимка с in и out параметрами. Как с через ADODateSet(DataCommand) получить значение out-параметров?
{к [0] это не относится}


Игорь Шевченко   (2012-11-22 21:43:00) [30]


> Юзать TStoredProc местный феншуй не позволяет...


Я не понимаю, чего ты хочешь. Расскажи два раза и медленно.


> оракуль может подобное?
> транслит:
> function (a1, a2, ..., am, var b1, b2, ..., bn): TDataSet;
>
>
> т.е.
> FUNCTION...
> in
> in
> out
> out
> RETURN
> на выходе рекордсет (CURSOR наверное)
>
> если да, то пример плз


Потому что из этих слов, кроме как отрубить голову, я выхода не вижу :)


Dennis I. Komarov   (2012-11-22 21:05:00) [31]


> В древнем Китае желающим странного отрубали голову.

У них и тогда перенаселение уже было...

> http://docs.oracle.com/cd/B19306_01/server.102/b14220/toc.
> htm

Юзать TStoredProc местный феншуй не позволяет...


Игорь Шевченко   (2012-11-22 20:55:00) [32]


>  я оракуль не очень знаю.


http://docs.oracle.com/cd/B19306_01/server.102/b14220/toc.htm


Игорь Шевченко   (2012-11-22 20:51:00) [33]

Dennis I. Komarov ©   (22.11.12 20:11) [10]

В древнем Китае желающим странного отрубали голову.


Dennis I. Komarov   (2012-11-22 20:11:00) [34]


> А что за странные собачки в [7]?

Х.З. :) Я не помню откуда (сегодня гуглил по просторам)
В оракуле есть проца, я с ней из дельфы работать буду...


Медвежонок Пятачок   (2012-11-22 19:56:00) [35]

(в конечном счете в дельфу ес-но)

Тогда это далеко не PL/SQL.

А что за странные собачки в [7]?
/*Это же MSSQL*/


Dennis I. Komarov   (2012-11-22 19:36:00) [36]


> Зачем тебе особая функция для передачи курсора куда бы то
> ни было внутри PL/SQL?
>
> Курсор там  - такой же точно тип данных, как любой другой.
>
> Передавай его в любую функцию как параметр.
>
> Или имелось ввиду не PL/SQL, а просто SQL?

Первоначальная задача - вернуть несколько параметров, один из которых DataSet (в конечном счете в дельфу ес-но)
(Сейчас не актуально, но познавательно)


Dennis I. Komarov   (2012-11-22 19:23:00) [37]

Вопрос такой:
есть в оракуле хранимка, пусть 2 входящих и 3 исходящих параметра

!!! Как в DataSet (или DataCommand) задать команду, что бы получить out-параметры. Интересует синтаксис, я оракуль не очень знаю.
в нете нашел синтаксис:
DECLARE @qqq
EXEC proc 1,2, @qqq
SELECT @qqq
не работает.


Медвежонок Пятачок   (2012-11-22 19:18:00) [38]

Зачем тебе особая функция для передачи курсора куда бы то ни было внутри PL/SQL?

Курсор там  - такой же точно тип данных, как любой другой.
Передавай его в любую функцию как параметр.

Или имелось ввиду не PL/SQL, а просто SQL?


Dennis I. Komarov   (2012-11-22 19:14:00) [39]


> Приведенный выше пример не имеет отношения к PL/SQL. Он
> имеет отношение к SQL.

Приведенный пример, ни что иное как транслит, для передачи смысла и не более (если речь о моем)


Медвежонок Пятачок   (2012-11-14 08:45:00) [40]

Переведи...

opMainProc.StoredProcName := 'applic.ats_order.CloseOrder';


Перевожу.
Приведенный выше пример не имеет отношения к PL/SQL. Он имеет отношение к SQL.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо