Гость
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Oracle reports / 18 сообщений из 18, страница 1 из 1
19.12.2013, 12:47
    #38506393
volik017
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle reports
Вот есть таблица клиентов Customer с полем Name.
Есть функция,в процессе вызова которой заполняется вьюха. Пусть называться она будет View.


p_name :='Иванов Иван Иванович'
ret:=function(p_name)
Это, если запустить функцию по одному конкретному клиенту, и если все сойдется в этой функции она просто возвратит то, что и было на входе, но при этом еще заполнится View. И записей во вьюхе может быть несколько.

А надо сделать такой отчет, где на входе этой функции будет поле Name из таблицы клиентов Customer, т.е. отчет по всем клиентам.
Отчет бы выглядел так
NAME1
запись1 из View.
.......
запись N из View.
NAME2
запись1 из View.
.......
запись N из View.
и т.п.
...
Рейтинг: 0 / 0
19.12.2013, 14:31
    #38506550
-=APS=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle reports
"функция,в процессе вызова которой заполняется вьюха" - это как?
...
Рейтинг: 0 / 0
19.12.2013, 14:46
    #38506579
volik017
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle reports
функция заврапленная (могу только пользовать)
но вьюха такая:

reate or replace view terror_vw as
select
no
, nn
, word
, key_no
from
table(terror.Data_Check) t;
...
Рейтинг: 0 / 0
19.12.2013, 15:33
    #38506640
-=APS=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle reports
А куда передается имя для поиска? это вы террористов ищете? :)
...
Рейтинг: 0 / 0
19.12.2013, 15:35
    #38506645
volik017
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle reports
имя передается в функцию
в результате выполнения функции заполняется вьюха
...
Рейтинг: 0 / 0
19.12.2013, 15:37
    #38506649
-=APS=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle reports
Функция, в которую передается имя, я так понимаю, тоже не ваша?
...
Рейтинг: 0 / 0
19.12.2013, 15:45
    #38506664
volik017
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle reports
функция врапленная
да собственно, разврапленной она нам и не нужна
какой результат этой функции мы знаем
на вход ее подается имя
на выходе оно же и возвращается в случае определенного результата+плюс заполяется вьюха
собственно, я повторила пост 1
...
Рейтинг: 0 / 0
19.12.2013, 15:54
    #38506681
volik017
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle reports
volik017,

кстати, почему тоже не наша?
только она и не наша
...
Рейтинг: 0 / 0
19.12.2013, 16:01
    #38506697
-=APS=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle reports
Получается, у вас, фактически, "заполняется" не вьюха, а некая коллекция, заполнение которой инициируется внешним вызовом.

Как вариант:
постоить в Reports трехуровневый master-detail. q1(select имя from customers) -> q2(select function(имя) from dual) -> q3(select * from terror_vw)
Но это надо поэксперементировать, сходу не скажу, сработает ли.

Второй вариант: построить по этой же логике весь набор данных у себя в хранимой процедуре, и возвращать наружу в Reports целиком.
...
Рейтинг: 0 / 0
19.12.2013, 16:30
    #38506763
volik017
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle reports
конкретно пробывала так
делала
repeating frame, где источником была таблица костюмеров, там же вывожу поле Name этой таблицы

На этом же поле в триггере пишу вызов той самой функции ret:=function(p_name), которая "заполняет" вьюху данными

в том же repeating frame делалю еще repeating frame, где источником является та самая вьюха.

выдает чего то, но не то
...
Рейтинг: 0 / 0
19.12.2013, 16:34
    #38506773
-=APS=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle reports
Сложность в том, что вам нужно обеспечить координированную цепочку (получил имя) -> (дернул функцию для этого имени) -> (зачитал результат выполнения функции для этого имени из view). Если порядок где-то будет нарушен, вы не получите правильных результатов.
...
Рейтинг: 0 / 0
19.12.2013, 16:38
    #38506786
volik017
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle reports
вот именно это пока и не получается ))))
...
Рейтинг: 0 / 0
19.12.2013, 17:08
    #38506876
-=APS=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle reports
Ну, как-то так, вроде работает (думаю, идея будет понятна):

Тестовый пример:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
create table test_customers(name varchar2(32));

--

insert into test_customers (name) values ('Ali-Baba');
insert into test_customers (name) values ('Aladdin');
insert into test_customers (name) values ('Al de Baran');

--

create or replace package TEST_PCK is

  function searchItem(p_name in varchar2) return varchar2;
  
  function getItems return sys.odcivarchar2list;

end TEST_PCK;

--

create or replace package body TEST_PCK is

  local_storage_result sys.odcivarchar2list;

  function searchItem(p_name in varchar2) return varchar2 is
  begin

    select p_name||'='||level
    bulk collect into local_storage_result
    from dual
    connect by level <= 5;
    
    return p_name;
    
  end;
  
  function getItems return sys.odcivarchar2list is
  begin
    return local_storage_result;
  end;

end TEST_PCK;

--

create or replace view test_terrorist_vw as select column_value as column_value from table(test_pck.getItems());



Тестовый report прилагается (6i)
...
Рейтинг: 0 / 0
20.12.2013, 09:57
    #38507474
volik017
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle reports
Спасибо, попробую.
...
Рейтинг: 0 / 0
20.12.2013, 14:58
    #38507955
ps
ps
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle reports
volik017функция заврапленная (могу только пользовать)
но вьюха такая:

reate or replace view terror_vw as
select
no
, nn
, word
, key_no
from
table(terror.Data_Check) t;

Попробуйте использовать Ref Cursor Query вместо SQL Query. Думаю в вашем варианте это лучшее решение.
...
Рейтинг: 0 / 0
22.12.2013, 14:49
    #38509242
в обход
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle reports
Можно еще немоного в обход.
Сделать временную или обычную таблицу table_for_view для данных из вью.
В триггере Before Report сделать курсор, который проходит по всем клиентам, для каждой строки курсора вызывать функцию и копировать данные в таблицу table_for_view .
Сам репорт основать на table_for_view.
В конце (или в начале) очищать table_for_view.
...
Рейтинг: 0 / 0
23.12.2013, 14:34
    #38510008
volik017
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle reports
-=APS=-,

Нет, так не работает.
Работает только в том случае, если функция нашла полное совпадение в таблице по входному параметру name и их не больше одного.
Т.е., если та самая вьюха, которая формируется в процессе отработки функции имеет более одной записи по конкретному name или совпадение не полное (функция ищет и по части текста), то данные не выводятся в отчет.
...
Рейтинг: 0 / 0
23.12.2013, 17:31
    #38510262
volik017
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle reports
psvolik017функция заврапленная (могу только пользовать)
но вьюха такая:

reate or replace view terror_vw as
select
no
, nn
, word
, key_no
from
table(terror.Data_Check) t;

Попробуйте использовать Ref Cursor Query вместо SQL Query. Думаю в вашем варианте это лучшее решение.

Спасибо, так получилось.
...
Рейтинг: 0 / 0
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Oracle reports / 18 сообщений из 18, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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