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


Результат, т.е. 'Hello World!', требуется вывести на компонент TMemo формы приложения (событие любое: запуск приложения, нажатие на кнопку - не имеет значения). Может, кто подскажет, как это едят? Какими приправами балуетесь?
...
Рейтинг: 0 / 0
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
    #39919148
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
    #39919149
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а нахрена?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
    #39919151
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача распадается на три части. Сначала нужно прочитать описание dbms_output и узнать, каким образом можно прочитать то, что выведено через put_line. Затем нужно прочитать, каким образом можно получить информацию из Oracle в Delphi и вывести её в TMemo. И наконец, если какая-либо из предыдущих частей оказывается сложна в реализации - нужно хотя бы чуть-чуть научиться программировать.
...
Рейтинг: 0 / 0
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
    #39919967
fragmaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer, проблема как раз на 2 шаге - каким образом можно получить информацию из Oracle в Delphi. Нужно прочитать результат PL/SQL (процедура, функция, просто код, как в моём примере - не важно), который пишется в переменную или просто вывод через dbms_output.put_line! Не могу найти связь Oracle и Delphi в случае с PL/SQL!
...
Рейтинг: 0 / 0
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
    #39920021
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fragmaker
softwarer, проблема как раз на 2 шаге - каким образом можно получить информацию из Oracle в Delphi.

А что говорит гугль по запросу 'каким образом можно получить информацию из Oracle в Delphi' ?
...
Рейтинг: 0 / 0
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
    #39920102
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fragmaker,

пользуюсь такой функцией:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE OR REPLACE FUNCTION FUNC_GET_DBMS_OUTPUT 
RETURN CLOB 
IS
   Result   CLOB;
   sLine    varchar2(255);
   iStatus  integer;
BEGIN
   DBMS_LOB.CreateTemporary(Result,true);
   
   loop                  
      DBMS_OUTPUT.GET_LINE (sLine, iStatus); 
      exit when iStatus<>0;
      Result:=Result||sLine||chr(13)||chr(10);
   end loop;

   return(Result);
END FUNC_GET_DBMS_OUTPUT;
/



но, к сожалению, этот запрос возвращает пустой CLOB
Код: plsql
1.
select func_get_dbms_output from dual;



но можно успешно вызвать из PL/SQL-блока
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
declare
  sText varchar2(4000);
begin
  -- Test statements here
  DBMS_OUTPUT.put_line('Line 1');
  DBMS_OUTPUT.put_line('Line 2');
  DBMS_OUTPUT.put_line('Line 4');
  
  
  sText := FUNC_GET_DBMS_OUTPUT;
  
  dbms_output.put_line('<<<<<'||sText||'>>>>>');
end;
...
Рейтинг: 0 / 0
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
    #39922828
fragmaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача решена. Всех благодарю за участие.
В моём случае используются компоненты 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
    #39923120
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
fragmaker
Задача решена. Всех благодарю за участие.
В моём случае используются компоненты 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. Знания должны принадлежать человечеству

В компонентах DevArt вовсе необязательно писать такие длинные портянкиДостаточно написать SQL.
А потом в дизачн-тайме указать типы входных и выходных параметров.
Будет ZERO кода
...
Рейтинг: 0 / 0
Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
    #39923740
fragmaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator, всё верно! Результат составлялся именно для наглядности, как работает вывод результатов PL/SQL в компонентах от Devart, чтобы всё было в одном месте, не разделяя отдельно код sql Oracle и Delphi. Под копи-паст, так сказать...
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вывод результата из dbms_output.put_line Oracle в TMemo Delphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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