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


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

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

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

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

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

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

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

Ты не поверишь, но разницы, фактически, никакой. Только используется Params вместо Fields
и то не во всех компонентах.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
    #39922834
fragmaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача решена. Мастерам 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
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
    #39922880
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicНе исключено, что когда подрастёшь, то поймёшь.

Если Оракул за 40 лет своего существования так и не научился самостоятельно определять
типы параметров в запросе, то и в дальнейших 10-20 лет он вряд ли это осилит.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
    #39922892
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Если Оракул за 40 лет своего существования так и не научился самостоятельно определять
типы параметров в запросе
Ты о чём, болезный? О лично наболевшем? - Не стесняйся, создавай тему!
...
Рейтинг: 0 / 0
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
    #39922901
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
    #39922909
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
    #39922914
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
ElicТы о чём, болезный?
О говнокоде из поста выше:Сформулируй свою претензию именно к Oracle конкретней. Апеллирование при этом к любой прослойке является, мягко говоря, непрофессионализмом. Тем более, что ты, насколько я помню, не только знаешь, но и понимаешь OCI, а поэтому не должен нести подобный бред.
...
Рейтинг: 0 / 0
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
    #39922937
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лично мне в коде не понравилось только
UniQuery1.SQL.Add
Есть у меня сомнение, что второе нажатие на кнопку отработает так, как надо )))

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

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

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

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

Это двоеточие не в воздухе висит, а на месте вполне конкретного параметра вполне
конкретной функции, который объявлен с конкретными флагами и типом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
    #39922959
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
    #39922974
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevКакие типы параметров должны быть в следующей конструкции?

varchar2(4000). Не потому, что x_res так объявлено, а потому что это умолчание на случай
когда логика бессильна. Хотя AnyData, REF или просто undefined тоже сошло бы лучше чем
максимализм "мы не можем достоверно определить тип во всех случаях, так что не будет даже
пытаться делать это для простейших".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
    #39922982
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
    #39922988
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
    #39923012
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic
Код: sql
1.
begin :x := :y + :z; end;



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

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

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

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

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

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


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