![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
PL/SQL - хочу странного (а может и нет)
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.