Поиск значения по всем таблицам

7 Сентябрь 2011 19 comments

Поиск значения по всем таблицам

Вариант1:

DECLARE
  match_count   INTEGER;
  query_str     VARCHAR2(400);
  l_owner       VARCHAR2(10)  := 'SCOTT';
  l_search_text VARCHAR2(100) := '10';
BEGIN
  FOR t IN (select table_name, column_name FROM all_tab_columns a
            where owner = l_owner
                  and a.data_type in ('NUMBER', 'VARCHAR2')
            )
  LOOP
    begin
      match_count := 0;
      query_str   := 'SELECT COUNT(*) FROM ' ||l_owner||'.'|| t.table_name ||
                     ' WHERE to_char(' || t.column_name || ') = :1';
      EXECUTE IMMEDIATE query_str
        INTO match_count
        USING l_search_text;
      IF match_count > 0 THEN
        dbms_output.put_line(l_owner||'.'||t.table_name || ' ' || t.column_name || ' ' || match_count);
        dbms_output.put_line('  SELECT t.'|| t.column_name || ', t.* from '||l_owner||'.'|| t.table_name||' t where to_char(' || t.column_name || ') = '''||l_search_text||'''');
        dbms_output.put_line('');
      END IF;
    exception
     when others then
       dbms_output.put_line(t.table_name||'.'||t.column_name||' : '||SQLERRM||' : '||SQLCODE);
       dbms_output.put_line(query_str);
       dbms_output.put_line('');
       /*raise*/
    end;
  END LOOP;
END;

Вариант2:

--SET SERVEROUTPUT ON SIZE 1000000
DECLARE
  TYPE tab_columns_rec_type IS RECORD (
    table_name   all_tab_columns.table_name%type
   ,column_name  all_tab_columns.column_name%type
   ,data_type    all_tab_columns.data_type%type
  );
  type tab_columns_tab_type is table of tab_columns_rec_type index by binary_integer;
  l_tab_columns_rec tab_columns_tab_type;
 
  match_count   INTEGER;
  query_str     VARCHAR2(400);
  l_owner       VARCHAR2(10)  := 'SCOTT';
  l_search_text VARCHAR2(100) := '10'; -- % добавляем здесь, если ищем не по точному вхождению
  l_number      NUMBER;
  is_number     NUMBER(1);
  l_str_length  NUMBER;
  /*
  l_mode:
  1 - NUMBER и VARCHAR2
  2 - only NUMBER
  3 - only VARCHAR2
  */
  l_mode NUMBER := 1;
  -- При каком количестве найденные совпадений
  -- прекращать поиск
  l_found_count  NUMBER := 1; 
  l_exists_count NUMBER;
BEGIN
 
  l_str_length := length(l_search_text);
 
  begin
    l_number := to_number(l_search_text);
    is_number := 1;
  exception
    when VALUE_ERROR then
      is_number := 0;
  end;
 
  if (l_mode = 1 and is_number = 1) then
    select table_name, column_name, data_type
      bulk collect into l_tab_columns_rec
    FROM all_tab_columns a
    where owner = l_owner
          and a.data_length >= l_str_length
          and ( a.data_type = 'VARCHAR2' or a.data_type = 'NUMBER' );
  elsif (l_mode = 2 and is_number = 1) then
    select table_name, column_name, data_type
      bulk collect into l_tab_columns_rec
    FROM all_tab_columns a
    where owner = l_owner
          and a.data_length >= l_str_length
          and a.data_type = 'NUMBER';
  else
    select table_name, column_name, data_type
      bulk collect into l_tab_columns_rec
    FROM all_tab_columns a
    where owner = l_owner
          and a.data_length >= l_str_length
          and a.data_type = 'VARCHAR2';
  end if;
  l_exists_count := 0;
  if NOT (l_tab_columns_rec is null or l_tab_columns_rec.count = 0) then
    for j in l_tab_columns_rec.first..l_tab_columns_rec.last
    LOOP
        begin
          match_count := 0;
          if (l_tab_columns_rec(j).data_type = 'VARCHAR2') then
            query_str   := 'SELECT count(*) FROM ' ||l_owner||'.'|| l_tab_columns_rec(j).table_name ||
                           ' WHERE rownum = 1 and to_char(' || l_tab_columns_rec(j).column_name || ') = :1';
            EXECUTE IMMEDIATE query_str
              INTO match_count
              USING l_search_text;
          elsif (l_tab_columns_rec(j).data_type = 'NUMBER') then
            query_str   := 'SELECT count(*) FROM ' ||l_owner||'.'|| l_tab_columns_rec(j).table_name ||
                           ' WHERE rownum = 1 and ' || l_tab_columns_rec(j).column_name || ' = :1';
            EXECUTE IMMEDIATE query_str
              INTO match_count
              USING l_number;
          end if;
 
          IF match_count > 0 THEN
            l_exists_count := l_exists_count + 1;
            dbms_output.put_line(l_tab_columns_rec(j).data_type||' '||l_owner||'.'||l_tab_columns_rec(j).table_name || ' ' || l_tab_columns_rec(j).column_name );
            dbms_output.put_line('  SELECT t.'|| l_tab_columns_rec(j).column_name || ', t.* from '||l_owner||'.'|| l_tab_columns_rec(j).table_name||' t where to_char(' || l_tab_columns_rec(j).column_name || ') like '''||l_search_text||'''');
            dbms_output.put_line('');
            if (l_exists_count = l_found_count) then
              exit;
            end if;
          END IF;
        exception
         when others then
           dbms_output.put_line(l_tab_columns_rec(j).table_name||'.'||l_tab_columns_rec(j).column_name||' : '||SQLERRM||' : '||SQLCODE);
           dbms_output.put_line(query_str);
           dbms_output.put_line('');
           /*raise*/
        end;
      END LOOP;
  end if;
 
END;
Categories: oracle, SQL Tags: , ,

Параллельные программы в ОЕБС (FND_CONCURRENT_REQUESTS)

18 Август 2011 1 комментарий
SELECT a.request_id,
       b.user_name,
       c.program,
       c.argument_text,
       a.requested_start_date,
       /*a.status_code, a.phase_code,*/
       lc.MEANING as status_descr,
       lp.MEANING as phase_descr
  FROM fnd_concurrent_requests a, 
       fnd_user                b, 
       fnd_conc_req_summary_v  c,
       fnd_lookups             lp,
       fnd_lookups             lc
 WHERE b.user_id = a.requested_by
   AND a.request_id = c.request_id
   AND a.requested_start_date > trunc(SYSDATE)
   AND a.hold_flag = 'N'
   and lp.lookup_type = 'CP_PHASE_CODE'
   and lp.LOOKUP_CODE = a.phase_code
   and lc.lookup_type = 'CP_STATUS_CODE'
   and lc.LOOKUP_CODE = a.status_code
   /*and a.status_code IN ('Q', 'I')*/
   and b.user_name LIKE '%'
   and c.program like '%'
 ORDER BY a.request_id desc;

Читать дальше про “Параллельные программы в ОЕБС (FND_CONCURRENT_REQUESTS)” »

Жадная и ленивая квантификация в регулярных выражениях

16 Август 2011 Нет комментариев

GREEDY AND LAZY IN REGEXP

Квантификация — поиск последовательностей;
Определяет, сколько раз предшествующее выражение может встречаться.

Квантификатор может относиться более чем к одному символу в регулярном выражении, только если это символьный класс или группа.



Таблица 2: Квантификаторы и операторы повтора

Квантификатор Описание Пример
* Встречается 0 и более раз REGEXP_REPLACE(str, ’11*’, ‘1’)
Результат:
test11 => test1
11123345 => 123345
? Встречается 0 или 1 раз
+ Встречается 1 и более раз REGEXP_LIKE(str,’5+’)
Результат:
test11 => false
11123345 => true
{m} Встречается ровно m раз REGEXP_LIKE(str,’3{2}’)
Результат:
test11 => false
11123345 => true
{m,} Встречается по крайней мере m раз
{m, n} Встречается по крайней мере m раз, но не более n раз


Жадная квантификация — это стремление захватить максимально длинную строку, которая соответствует шаблону.

SQL> with t as (
  2   select '<div><img src="http://apps-oracle.ru/logo2.png" alt=""/></div>' str from dual
  3  )
  4  select regexp_substr(str,'<.*>') as res from t;

RES
--------------------------------------------------------------
<div><img src="http://apps-oracle.ru/logo2.png" alt=""/></div>


Ленивая квантификация — это стремление захватить максимально короткую строку, которая соответствует шаблону. Поддерживается с версии 10gR2.

SQL> with t as (
  2   select '<div><img src="http://apps-oracle.ru/logo2.png" alt=""/></div>' str from dual
  3  )
  4  select regexp_substr(str,'<.*?>') as res from t;

RES
-----
<div>



Жадный Ленивый
* *?
+ +?
{n,} {n,}?




Создание страницы с таблицей данных

8 Август 2011 6 comments

Создадим страницу, на которой будут выводится данные по сотрудникам. Данные будут представлены в виде таблицы.

Подготовка

1) Создаем новый проект или открываем существующий
Создание OAF проекта в JDeveloper


2) Создаем новый View Object (VO) или используем существующий
Создание View Object (VO) – только для просмотра данных



Читать дальше про “Создание страницы с таблицей данных” »

Oracle E-Business Suite (OEBS)

1 Август 2011 1 комментарий

Oracle E-Business Suite (пакет приложений электронного бизнеса, используется также сокращение OEBS) — тиражируемый интегрированный комплекс прикладного программного обеспечения производства компании Oracle, включающий функциональные блоки ERP, CRM, PLM.

ERP — Enterprise Resource Planning System (Система планирования ресурсов предприятия)
CRM — Customer Relationship Management System (Система управления взаимоотношениями с клиентами)
PLM — Product Lifecycle Management (Система управления жизненным циклом изделий)

Oracle E-Business Suite предназначен для автоматизации основных направлений деятельности предприятий, в том числе: финансов, производства, управления персоналом, логистики, маркетинга, сбыта и продаж, обслуживания заказчиков, взаимоотношений с поставщиками и клиентами и других.

Oracle E-Business Suite относится к классу систем оперативной обработки транзакций (Online Transaction Processing — OLTP). Для систем этого класса характерно, что операции, производимые в одном функциональном приложении, инициируют генерацию соответствующих транзакций в других функциональных приложениях системы, что позволяет любому пользователю получать актуальную информацию в реальном времени.

Модули и подсистемы Oracle E-Business Suite
  • Управление эффективностью бизнеса
  • Управление материальными потоками
  • Управление взаимоотношениями с клиентами
  • Финансы
  • Управление техобслуживанием и ремонтами
  • Система управления персоналом
  • Управление производством
  • Управление проектами
  • Финансовый сервис
  • Управление жизненным циклом
  • Управление логистикой

Официальная страница продукта на Русском языке

Categories: Oracle e-Business Suite Tags:

Типы организаций Oracle E-Business Suite


Бизнес-группа является обязательным типом организации, который присваивается самому верхнему уровню организационной структуры. На уровне бизнес-группы обеспечивается ведение данных модуля Human Resources («Сотрудники»).

Юридическое лицо (Legal Entity) — присваивается объекту, формирующему самостоятельный баланс (и, возможно, предоставляющему финансовую отчетность в государственные органы). Юридическому лицу обязательно назначается один «Набор книг» для регистрации первичных учетных операций.

Операционная единица (Operation Unit) — это тип организационной структуры предприятия, наделенный возможностью выполнения всех функций операционной деятельности, включая закупки, производство, маркетинг, продажи и расчеты с поставщиками и заказчиками. Это может быть подразделение (отдел, филиал) продаж, закупок и т. д. Операционная единица связана с Юридическим лицом и является его частью. На уровне операционных единиц осуществляется разделение данных модулей Дебиторы, Кредиторы, Управление денежными средствами, Управление продажами, Снабжение.

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

Складская организация (Inventory Organization) — это тип организационной структуры компании, который может выполнять функции управления запасами на складах. Разделение данных по запасам также осуществляется на этом уровне. Сотрудники каждой организации работают с собственным набором складов и товарных позиций. Организация, обладающая признаком «складская», должна обязательно или подчиняться другой организации, являющейся операционной единицей, или самой являться таковой.

Организация персонала (Organization HR) — это тип организационной структуры, для которого осуществляется функция управления персоналом. Данный тип классификации обязателен для тех организационных единиц, где необходимо использовать список сотрудников при выполнении операций.

Организация активов (Asset Organization) — это тип организационной структуры, в котором ведется учет активов и выполнение операций по движению активов (приходование, переоценка, выбытие и амортизация).

Categories: Oracle e-Business Suite Tags: ,

Oracle Projects Software Readme for R12.PJ_PF.B.DELTA.4

31-мая-2011 вышел новый патч для Oracle Project:
Oracle Projects Software Readme for R12.PJ_PF.B.DELTA.4

Включает в себя обновления по:

Oracle Grants Accounting 29 patches
Oracle Property Manager 119 patches
Oracle Project Billing 67 patches
Oracle Project Costing 104 patches
Oracle Project Foundation 49 patches
Oracle Project Management 111 patches
Oracle Project Resource Management 56 patches
Oracle Project Intelligence 5 patches
Categories: Новости Tags: , ,

Создание View Object (VO) — только для просмотра данных

31 Май 2011 4 comments

Создадим View Object для следующего запроса

select empno,
       ename,
       job,
       mgr,
       hiredate,
       sal,
       comm,
       deptno
from scott.emp t
where t.deptno = 10;

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7782 CLARK      MANAGER    7839 09.06.1981    2450.00               10
 7839 KING       PRESIDENT       17.11.1981    5000.00               10
 7934 MILLER     CLERK      7782 23.01.1982    1300.00               10

Номер департамента будем передавать в качестве параметра. VO будет только для просмотра данных, т.е. Entity Object создавать не будем.

Читать дальше про “Создание View Object (VO) — только для просмотра данных” »

OEBS Проблема с несколькими сессиями в IE8

25 Май 2011 5 comments

Для Internet Explorer 8 существует проблема с открытием нескольких форм OEBS под разными пользователями.
По умолчанию в IE8 включено свойство Session Merging, именно из-за этого и происходит скидывание пользователя.

Как включить поддержку нескольких сессий (2 способа):

1) Открываем новое окно через меню «File -> New Session» в существующем окне браузера



2) Добавляем опцию «-nomerge» для запуска IE8. С данной опцией можно запускать IE8 через командную строку или изменив свойства ярлыка.

Создание OAF проекта в JDeveloper

19 Май 2011 27 comments

Создание WorkSpace

Если рабочее пространство уже создано, пропускаем данный шаг.

Открываем JDeveloper и создаём новое рабочее пространство, именно в нем будут находится наши проекты.

Панель System Navigator, используя контекстное меню для Application, выбираем «New OA Workspace»


Читать дальше про “Создание OAF проекта в JDeveloper” »