Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вывод результата из dbms_output.put_line Oracle в TMemo Delphi / 21 сообщений из 21, страница 1 из 1
27.01.2020, 16:30
    #39919153
fragmaker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
Приветствую, россияне! Дублирую вопрос также в этот раздел, поскольку он связан со средствами разработки как Delphi, так и Oracle. Собственно, вопрос из темы - каким образом реализовать следующее. Есть код
Код: plsql
1.
2.
3.
begin
    dbms_output.put_line('Hello World!');
end;


Результат, т.е. 'Hello World!', требуется вывести на компонент TMemo формы приложения (событие любое: запуск приложения, нажатие на кнопку - не имеет значения). Может, кто подскажет, как это едят? Какими приправами балуетесь?
...
Рейтинг: 0 / 0
27.01.2020, 16:33
    #39919156
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
fragmaker,

там где есть put, там же есть get
...
Рейтинг: 0 / 0
27.01.2020, 16:48
    #39919165
Stawros
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
fragmaker,

В пакете DBMS_OUTPUT есть процедура GET_LINES , которая возвращает в out переменную массив строк (тип SYS.DBMS_OUTPUT.chararr). Вам нужно получить этот массив и вывести куда-там-вам-нужно. Для удобства можно написать функцию (или анонимную процедурку) преобразовывающую этот массив например в CLOB и просто забирать себе эту портянку. Ну или получать вывод построчно через GET_LINE.
...
Рейтинг: 0 / 0
27.01.2020, 23:17
    #39919247
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
fragmaker,

какие компоненты используете для доступа к БД?
вообще это вопрос по форуму делфи, как вытянуть многострочные данные

помню, в своё время листал исходники ДОА, там это было
...
Рейтинг: 0 / 0
29.01.2020, 15:15
    #39919986
fragmaker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
andreymx, использую компоненты UniDAC от Devart. Проблем с вывод результатов простого SQL нет, а вот как вывести результат из PL/SQL - вообще не представляю. Нужно направить на истинный путь силы, если можете?!
...
Рейтинг: 0 / 0
29.01.2020, 16:06
    #39920045
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
Так уже направили 22067320

Изучайте дельфи или, как минимум, показывайте Ваш код. Вряд ли кто-то будет специально для Вас писать пример вызова PL/SQL процедур на Дельфи, которых и так в Инете должно быть как грязи

IMHO
...
Рейтинг: 0 / 0
29.01.2020, 17:25
    #39920109
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
fragmakerПроблем с вывод результатов простого SQL нет, а вот как вывести результат из PL/SQL -
вообще не представляю.

Ты не поверишь, но разницы, фактически, никакой. Только используется Params вместо Fields
и то не во всех компонентах.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.02.2020, 13:49
    #39922834
fragmaker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
Задача решена. Мастерам Oracle отдельная благодарность на наставление на истинный путь силы. По началу не вкурил, что к чему...

В моём случае используются компоненты UniDAC от Devart.
Решение (по нажатию кнопки)
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
procedure TForm1.Button1Click(Sender: TObject);
begin
  UniQuery1.SQL.Add('begin ' +
                        'dbms_output.enable(100);' + //-- размер в байтах, без enable текст отображаться не будет
                        'dbms_output.put_line(''Hello World'');' +
                        'dbms_output.get_line(:par_line, :par_status);' +
                    'end;');
  UniQuery1.Params.ParamByName('par_line').ParamType:= ptOutput; // обязательно задаём пераметры перед выполнением скрипта
  UniQuery1.Params.ParamByName('par_line').DataType:= ftString;
  UniQuery1.Params.ParamByName('par_status').ParamType:= ptOutput;
  UniQuery1.Params.ParamByName('par_status').DataType:= ftString;
  UniQuery1.Execute;
  Memo1.Lines[0]:= UniQuery1.Params.ParamByName('par_line').asString;
end;


Истинный путь силы по данному вопросу, как и указывали мастера, - это использование dbms_output.get_line, который записывает в переменные содержание dbms_output.put_line (если простыми словами). А дальше мурзилка по Oracle в помощь https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_output.htm#BABJCAJA

P.S. Знания должны принадлежать человечеству
...
Рейтинг: 0 / 0
05.02.2020, 14:38
    #39922880
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
ElicНе исключено, что когда подрастёшь, то поймёшь.

Если Оракул за 40 лет своего существования так и не научился самостоятельно определять
типы параметров в запросе, то и в дальнейших 10-20 лет он вряд ли это осилит.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.02.2020, 14:50
    #39922892
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
Dimitry Sibiryakov
Если Оракул за 40 лет своего существования так и не научился самостоятельно определять
типы параметров в запросе
Ты о чём, болезный? О лично наболевшем? - Не стесняйся, создавай тему!
...
Рейтинг: 0 / 0
05.02.2020, 15:00
    #39922901
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
ElicТы о чём, болезный?

О говнокоде из поста выше:
Код: pascal
1.
2.
3.
4.
5.
  UniQuery1.Params.ParamByName('par_line').ParamType:= ptOutput; // 
обязательно задаём пераметры перед выполнением скрипта
   UniQuery1.Params.ParamByName('par_line').DataType:= ftString;
   UniQuery1.Params.ParamByName('par_status').ParamType:= ptOutput;
   UniQuery1.Params.ParamByName('par_status').DataType:= ftString;


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.02.2020, 15:06
    #39922909
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
Dimitry Sibiryakov

Код: pascal
1.
2.
3.
4.
5.
  UniQuery1.Params.ParamByName('par_line').ParamType:= ptOutput; // 
обязательно задаём пераметры перед выполнением скрипта
   UniQuery1.Params.ParamByName('par_line').DataType:= ftString;
   UniQuery1.Params.ParamByName('par_status').ParamType:= ptOutput;
   UniQuery1.Params.ParamByName('par_status').DataType:= ftString;


Как по двоеточию понять in/out-ность и тип параметра?
...
Рейтинг: 0 / 0
05.02.2020, 15:08
    #39922914
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
Dimitry Sibiryakov
ElicТы о чём, болезный?
О говнокоде из поста выше:Сформулируй свою претензию именно к Oracle конкретней. Апеллирование при этом к любой прослойке является, мягко говоря, непрофессионализмом. Тем более, что ты, насколько я помню, не только знаешь, но и понимаешь OCI, а поэтому не должен нести подобный бред.
...
Рейтинг: 0 / 0
05.02.2020, 15:19
    #39922937
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
Лично мне в коде не понравилось только
UniQuery1.SQL.Add
Есть у меня сомнение, что второе нажатие на кнопку отработает так, как надо )))

Но с учетом, что это был просто test case - ну очепятка в результате copy / past, ну и бог с ней.

Код выглядит немного много-буквенно (простыни через .), ну дык это скорее притензии к Delphi, а не к топик стартеру.

Ну и строчки так же извлекаются "странно" (только одну), но опять таки, с учетом, что это просто test case - на конкретном примере работает, ну и ладно.

IMHO & AFAIK
...
Рейтинг: 0 / 0
05.02.2020, 15:25
    #39922947
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
-2-Как по двоеточию понять in/out-ность и тип параметра?

Это двоеточие не в воздухе висит, а на месте вполне конкретного параметра вполне
конкретной функции, который объявлен с конкретными флагами и типом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.02.2020, 15:34
    #39922959
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
Dimitry Sibiryakov

-2-Как по двоеточию понять in/out-ность и тип параметра?

Это двоеточие не в воздухе висит, а на месте вполне конкретного параметра вполне
конкретной функции, который объявлен с конкретными флагами и типом.

AFAIK Там анонимный PL/SQL блок.

Какие типы параметров должны быть в следующей конструкции?
Код: plsql
1.
2.
3.
4.
5.
6.
declare
  x_res varchar2(4000);
begin
  x_res := :param1 + :param2;
  :res := x_res;
end;
...
Рейтинг: 0 / 0
05.02.2020, 15:49
    #39922974
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
Leonid KudryavtsevКакие типы параметров должны быть в следующей конструкции?

varchar2(4000). Не потому, что x_res так объявлено, а потому что это умолчание на случай
когда логика бессильна. Хотя AnyData, REF или просто undefined тоже сошло бы лучше чем
максимализм "мы не можем достоверно определить тип во всех случаях, так что не будет даже
пытаться делать это для простейших".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.02.2020, 15:59
    #39922982
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
Leonid Kudryavtsev
Какие типы параметров должны быть в следующей конструкции?
Код: plsql
1.
2.
3.
4.
5.
6.
declare
  x_res varchar2(4000);
begin
  x_res := :param1 + :param2;
  :res := x_res;
end;

Ну зачем же ему упрощать задачу:
Код: plsql
1.
begin :x := :y + :z; end;
...
Рейтинг: 0 / 0
05.02.2020, 16:05
    #39922988
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
Dimitry Sibiryakov

Leonid KudryavtsevКакие типы параметров должны быть в следующей конструкции?

varchar2(4000). Не потому, что x_res так объявлено, а потому что это умолчание на случай
когда логика бессильна. Хотя AnyData, REF или просто undefined тоже сошло бы лучше чем
максимализм "мы не можем достоверно определить тип во всех случаях, так что не будет даже
пытаться делать это для простейших".
Ни varchar2 ни, тем более, anydata не являются универсально применимы.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SQL> var x1 number=123
SQL> var x2 number=13
SQL> select max(x) from (select :x1 x from dual union all select :x2 from dual);

    MAX(X)
----------
       123

SQL> var x1 varchar2(3)=123
SQL> var x2 varchar2(3)=13
SQL> select max(x) from (select :x1 x from dual union all select :x2 from dual);

MAX(X)
--------------------------------
13

В любом случае, предпарс это дополнительное обращение к БД, которое не часто целесообразно. Есть "компоненты", которые внутри себя умеют абстрагировать до сущностей языка, в частности ORMы. Но они часто являются проблемой для БД, так как запрос к словарю бывает дороже бизнес-запроса.
...
Рейтинг: 0 / 0
05.02.2020, 16:34
    #39923012
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
Elic
Код: sql
1.
begin :x := :y + :z; end;



Ага, обоснуем один говнокод другим говнокодом. Прэлеестно...

-2-Ни varchar2 ни, тем более, anydata не являются универсально применимы.

Ага, а вот и вышеназванный максимализм. Выкинем фтопку 99,9% случаев только потому, что
остаток не сработает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.02.2020, 16:44
    #39923019
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
Dimitry Sibiryakov

...
Ага, а вот и вышеназванный максимализм. Выкинем фтопку 99,9% случаев только потому, что
остаток не сработает.

напоминает "осетрину второй свежести"

программа бывает или 100% свежая (работает) или, если 99.9%, то она уже второй свежести
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вывод результата из dbms_output.put_line Oracle в TMemo Delphi / 21 сообщений из 21, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]