Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Просьба помочь в решении задачки.. Oracle PL\sql  [new]
Джонни_Инглиш
Member

Откуда:
Сообщений: 78
Есть ХП:

CREATE OR REPLACE PROCEDURE primer(
v_date VARCHAR2,
v_date2 VARCHAR2,
v_io VARCHAR2)
AS
vivod VARCHAR2(100);
BEGIN
DECLARE
CURSOR vivad
IS
SELECT p.*
FROM pizdec p
WHERE
/*Задаем дату открытия счета*/
to_date (p.DATE_OPEN) BETWEEN to_date (v_date) AND to_date (v_date2)
/*Задаем точку*/
AND p.IO = v_io
;
in_vivad vivad%ROWTYPE;
BEGIN
DBMS_OUTPUT.enable;
OPEN vivad;
FETCH vivad INTO in_vivad;
LOOP
DBMS_OUTPUT.put_line(in_vivad.S4ET||' '||in_vivad.DATE_OPEN||' '||in_vivad.DATE_PROV);
FETCH vivad INTO in_vivad;
EXIT
WHEN vivad%NOTFOUND;
END LOOP;
CLOSE vivad;
END;
END;


необходимо после успешной отработки ХП, DBMS_OUTPUT.put_line(in_vivad.S4ET||' '||in_vivad.DATE_OPEN||' '||in_vivad.DATE_PROV); - это необходимо запиливать в файл exel (*.xls, *.csv).
17 окт 16, 11:05    [19788971]     Ответить | Цитировать Сообщить модератору
 Re: Просьба помочь в решении задачки.. Oracle PL\sql  [new]
помощник сайта
Guest
Джонни_Инглиш
Есть ХП:
CREATE OR REPLACE PROCEDURE primer(
    v_date    VARCHAR2,
    v_date2   VARCHAR2,
    v_io VARCHAR2)
AS
  vivod VARCHAR2(100);
BEGIN
  DECLARE
    CURSOR vivad
    IS
      SELECT p.*
      FROM pizdec p
      WHERE
        /*Задаем дату открытия счета*/
        to_date (p.DATE_OPEN) BETWEEN to_date (v_date) AND to_date (v_date2)
         /*Задаем точку*/
      AND p.IO = v_io
      ;
    in_vivad vivad%ROWTYPE;
  BEGIN
    DBMS_OUTPUT.enable;
    OPEN vivad;
    FETCH vivad INTO in_vivad;
    LOOP
      DBMS_OUTPUT.put_line(in_vivad.S4ET||' '||in_vivad.DATE_OPEN||' '||in_vivad.DATE_PROV);
      FETCH vivad INTO in_vivad;
      EXIT
    WHEN vivad%NOTFOUND;
    END LOOP;
    CLOSE vivad;
  END;
END;


необходимо после успешной отработки ХП, DBMS_OUTPUT.put_line(in_vivad.S4ET||' '||in_vivad.DATE_OPEN||' '||in_vivad.DATE_PROV); - это необходимо запиливать в файл exel (*.xls, *.csv).


Используй теги для оформления кода, а также приведи версию БД.
17 окт 16, 11:14    [19789005]     Ответить | Цитировать Сообщить модератору
 Re: Просьба помочь в решении задачки.. Oracle PL\sql  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
Джонни_Инглиш
необходимо...
успехов тебе с твоим подходом к поиску решения
17 окт 16, 11:22    [19789039]     Ответить | Цитировать Сообщить модератору
 Re: Просьба помочь в решении задачки.. Oracle PL\sql  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7136
Джонни_Инглиш
Есть ХП:

CREATE OR REPLACE PROCEDURE primer(
    v_date    VARCHAR2,
    v_date2   VARCHAR2,
    v_io VARCHAR2)
AS
  vivod VARCHAR2(100);
BEGIN
  DECLARE
    CURSOR vivad
    IS
      SELECT p.*
      FROM pizdec p
      WHERE
        /*Задаем дату открытия счета*/
        to_date (p.DATE_OPEN) BETWEEN to_date (v_date) AND to_date (v_date2)
         /*Задаем точку*/
      AND p.IO = v_io
      ;
    in_vivad vivad%ROWTYPE;
  BEGIN
    DBMS_OUTPUT.enable;
    OPEN vivad;
    FETCH vivad INTO in_vivad;
    LOOP
      DBMS_OUTPUT.put_line(in_vivad.S4ET||' '||in_vivad.DATE_OPEN||' '||in_vivad.DATE_PROV);
      FETCH vivad INTO in_vivad;
      EXIT
    WHEN vivad%NOTFOUND;
    END LOOP;
    CLOSE vivad;
  END;
END;


необходимо после успешной отработки ХП,
DBMS_OUTPUT.put_line(in_vivad.S4ET||' '||in_vivad.DATE_OPEN||' '||in_vivad.DATE_PROV);
- это необходимо запиливать в файл exel (*.xls, *.csv).


Что ты написал, непонятно, от слова совсем
:)
sqlplus user/password@tnsalias
SQL> set serveroutput on pages 0 line 4000 trimspool on head off feedback off
SQL> spool file.csv
SQL> execute primer(......)


p.s. того... этого ... ну.... какба по русски напиши, да.
17 окт 16, 11:29    [19789082]     Ответить | Цитировать Сообщить модератору
 Re: Просьба помочь в решении задачки.. Oracle PL\sql  [new]
Джонни_Инглиш
Member

Откуда:
Сообщений: 78
Vadim Lejnin,

Задача такая: вызвать процедуру с параметрами
set SERVEROUTPUT ON;
begin primer ('01.01.2014', '01.02.2014', 1);
end;

поля подставляются в ХП соответственно:
v_date VARCHAR2,
v_date2 VARCHAR2,
v_iotdnum VARCHAR2

выполняется выборка:
SELECT p.*
FROM pizdec p
WHERE
/*Задаем дату открытия счета*/
to_date (p.DATE_OPEN) BETWEEN to_date (v_date) AND to_date (v_date2)
/*Задаем точку*/
AND p.IOTDNUM = v_iotdnum

Ожидаемый выход: табличка в EXEL после выполнения вызова ХП.

Сейчас выход: DBMS_OUTPUT.put_line(in_vivad.S4ET||' '||in_vivad.DATE_OPEN||' '||in_vivad.DATE_PROVODKI);
17 окт 16, 11:52    [19789249]     Ответить | Цитировать Сообщить модератору
 Re: Просьба помочь в решении задачки.. Oracle PL\sql  [new]
оккаматика
Guest
Джонни_Инглиш,

выполняй селект в гуе и экспортируй в эхель.
17 окт 16, 12:00    [19789304]     Ответить | Цитировать Сообщить модератору
 Re: Просьба помочь в решении задачки.. Oracle PL\sql  [new]
Джонни_Инглиш
Member

Откуда:
Сообщений: 78
оккаматика,

Нет не вариант) В дальнейшем это будет прикручиваться к операторской форме.
17 окт 16, 12:02    [19789322]     Ответить | Цитировать Сообщить модератору
 Re: Просьба помочь в решении задачки.. Oracle PL\sql  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7136
Джонни_Инглиш
Vadim Lejnin,

Задача такая: вызвать процедуру с параметрами
set SERVEROUTPUT ON;
begin  primer ('01.01.2014', '01.02.2014', 1);
 end;

поля подставляются в ХП соответственно:
    v_date    VARCHAR2,
    v_date2   VARCHAR2,
    v_iotdnum VARCHAR2

выполняется выборка:
 SELECT p.*
      FROM pizdec p
      WHERE
        /*Задаем дату открытия счета*/
        to_date (p.DATE_OPEN) BETWEEN to_date (v_date) AND to_date (v_date2)
         /*Задаем точку*/
      AND p.IOTDNUM = v_iotdnum


Ожидаемый выход: табличка в EXEL после выполнения вызова ХП.

Сейчас выход:
DBMS_OUTPUT.put_line(in_vivad.S4ET||' '||in_vivad.DATE_OPEN||' '||in_vivad.DATE_PROVODKI);



Сир,
HOWTO :: Как правильно задавать вопросы
используйте Тэги, читать код без них неудобно
Ответьте, прежде всего себе:
1) когда вы запускаете PL/SQL код, где он выполняется, и соотвественно, если пользоваться пакетом UTL_FILE, где физически файл будет создаваться?
2) Где выполняется форма которую вы запускаете/планируете запускать
3) как вы будете вызывать ваши процедуру primer, и куда полетит ее вывод в этом случае и как Вы будете этот вывод обрабатывать
4) Что такое sqlplus и что за команда
set serveroutput on


5) Какие грабли Вы можете поймать, если будете использовать:
begin primer ('01.01.2014', '01.02.2014', 1);end;
...
to_date (p.DATE_OPEN) BETWEEN to_date (v_date) AND to_date (v_date2)
...



Правильно поставленный вопрос - половина ответа
17 окт 16, 13:27    [19790031]     Ответить | Цитировать Сообщить модератору
 Re: Просьба помочь в решении задачки.. Oracle PL\sql  [new]
-2-
Member

Откуда:
Сообщений: 15330
Джонни_Инглиш
В дальнейшем это будет прикручиваться к операторской форме.
У вас операторы носят форму с фрагментами sql-кода? И что дает этой форме замена курсорного результата на необходимость парсить тестовый вывод?
17 окт 16, 13:52    [19790209]     Ответить | Цитировать Сообщить модератору
 Re: Просьба помочь в решении задачки.. Oracle PL\sql  [new]
Джонни_Инглиш
Member

Откуда:
Сообщений: 78
Vadim Lejnin,

Без проблем, я здесь новый человек.

1) когда вы запускаете PL/SQL код - выполняется на сервере, если пользоваться пакетом UTL_FILE, где физически файл будет создаваться - файл будет создаваться на сервере.

2) Где выполняется форма которую вы запускаете/планируете запускать - форма расположена на клиентской машине.

3) как вы будете вызывать ваши процедуру primer - вызов процедуры посредством нажатия кнопки на клиентской машине.

4) Что такое sqlplus и что за команда

set serveroutput on
- извиняюсь это лишнее, (выдрано, не так скопировано, да криворукий)


5) Какие грабли Вы можете поймать, если будете использовать:

begin primer ('01.01.2014', '01.02.2014', 1);end;
...
to_date (p.DATE_OPEN) BETWEEN to_date (v_date) AND to_date (v_date2)
...

- о граблях подробней..
17 окт 16, 14:16    [19790365]     Ответить | Цитировать Сообщить модератору
 Re: Просьба помочь в решении задачки.. Oracle PL\sql  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
Джонни_Инглиш
- о граблях подробней..

NLS-настройки сессии
17 окт 16, 14:31    [19790470]     Ответить | Цитировать Сообщить модератору
 Re: Просьба помочь в решении задачки.. Oracle PL\sql  [new]
Джонни_Инглиш
Member

Откуда:
Сообщений: 78
tru55,

Ок, понятно, спс.
17 окт 16, 14:33    [19790486]     Ответить | Цитировать Сообщить модератору
 Re: Просьба помочь в решении задачки.. Oracle PL\sql  [new]
Джонни_Инглиш
Member

Откуда:
Сообщений: 78
tru55,

to_date (p.DATE_OPEN) BETWEEN to_date (v_date, 'DD.MM.YYYY HH24:MI:SS') AND to_date (v_date2, 'DD.MM.YYYY HH24:MI:SS')

Наверно поправил, но суть не в этом.
17 окт 16, 14:37    [19790513]     Ответить | Цитировать Сообщить модератору
 Re: Просьба помочь в решении задачки.. Oracle PL\sql  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7136
Джонни_Инглиш
Vadim Lejnin,
...

2) Где выполняется форма которую вы запускаете/планируете запускать - форма расположена на клиентской машине.

3) как вы будете вызывать ваши процедуру primer - вызов процедуры посредством нажатия кнопки на клиентской машине.
...


То есть Вы будете использовать UTL_FILE (ссылку я Вам уже давал)

Примеров в inet куча (даже в той ссылке на справочник) , только Вам нужно разобраться с привилегиями на объект "oracle directory" и как Вы будете чистить старые файлы

В этом случае dbms_output - не нужен (разве только на момент отладки), формируете строку и пишите в файл. Останется разобраться как доставить этот файл потребителю.

Ответ зависит от используемого инструментария для создания форм, но это уже совсем другая история
17 окт 16, 15:13    [19790730]     Ответить | Цитировать Сообщить модератору
 Re: Просьба помочь в решении задачки.. Oracle PL\sql  [new]
-2-
Member

Откуда:
Сообщений: 15330
Vadim Lejnin
В этом случае dbms_output - не нужен
dbms_output ему и без utl_file был не нужен, а utl_file и подавно.
17 окт 16, 15:21    [19790783]     Ответить | Цитировать Сообщить модератору
 Re: Просьба помочь в решении задачки.. Oracle PL\sql  [new]
Джонни_Инглиш
Member

Откуда:
Сообщений: 78
Vadim Lejnin,

Не могли бы Вы помочь с формированием заголовков колонок , так для наглядности?
17 окт 16, 15:24    [19790803]     Ответить | Цитировать Сообщить модератору
 Re: Просьба помочь в решении задачки.. Oracle PL\sql  [new]
Джонни_Инглиш
Member

Откуда:
Сообщений: 78
-2-,

Объяснитесь товарисчь, как правильно заметил Vadim Lejnin, dbms_output - нужен был только на момент отладки.
17 окт 16, 15:26    [19790820]     Ответить | Цитировать Сообщить модератору
 Re: Просьба помочь в решении задачки.. Oracle PL\sql  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7136
Джонни_Инглиш
Vadim Lejnin,

Не могли бы Вы помочь с формированием заголовков колонок , так для наглядности?

RPAD, LPAD, TO_CHAR(x,format), format models
17 окт 16, 15:33    [19790899]     Ответить | Цитировать Сообщить модератору
 Re: Просьба помочь в решении задачки.. Oracle PL\sql  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7136
Vadim Lejnin
Джонни_Инглиш
Vadim Lejnin,

Не могли бы Вы помочь с формированием заголовков колонок , так для наглядности?

RPAD, LPAD, TO_CHAR(x,format), format models

У Вас же csv
Какие проблемы?
17 окт 16, 15:35    [19790909]     Ответить | Цитировать Сообщить модератору
 Re: Просьба помочь в решении задачки.. Oracle PL\sql  [new]
Джонни_Инглиш
Member

Откуда:
Сообщений: 78
Vadim Lejnin,

Если Вас не затруднит, прошу пример..
17 окт 16, 15:41    [19790981]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить