Поиск значения по всем таблицам
Поиск значения по всем таблицам
Вариант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;
Параллельные программы в ОЕБС (FND_CONCURRENT_REQUESTS)
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)” »
Жадная и ленивая квантификация в регулярных выражениях
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,}? |
Создание страницы с таблицей данных
- Подготовка
- Создание cтраницы
- Создаём Application Module
- Создаём Controller
- Создаём Query Region
- Проверка
Создадим страницу, на которой будут выводится данные по сотрудникам. Данные будут представлены в виде таблицы.
Подготовка
1) Создаем новый проект или открываем существующий
Создание OAF проекта в JDeveloper
2) Создаем новый View Object (VO) или используем существующий
Создание View Object (VO) – только для просмотра данных
Читать дальше про “Создание страницы с таблицей данных” »
Oracle E-Business Suite (OEBS)
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
- Управление эффективностью бизнеса
- Управление материальными потоками
- Управление взаимоотношениями с клиентами
- Финансы
- Управление техобслуживанием и ремонтами
- Система управления персоналом
- Управление производством
- Управление проектами
- Финансовый сервис
- Управление жизненным циклом
- Управление логистикой
Типы организаций Oracle E-Business Suite
Бизнес-группа является обязательным типом организации, который присваивается самому верхнему уровню организационной структуры. На уровне бизнес-группы обеспечивается ведение данных модуля Human Resources («Сотрудники»).
Юридическое лицо (Legal Entity) — присваивается объекту, формирующему самостоятельный баланс (и, возможно, предоставляющему финансовую отчетность в государственные органы). Юридическому лицу обязательно назначается один «Набор книг» для регистрации первичных учетных операций.
Операционная единица (Operation Unit) — это тип организационной структуры предприятия, наделенный возможностью выполнения всех функций операционной деятельности, включая закупки, производство, маркетинг, продажи и расчеты с поставщиками и заказчиками. Это может быть подразделение (отдел, филиал) продаж, закупок и т. д. Операционная единица связана с Юридическим лицом и является его частью. На уровне операционных единиц осуществляется разделение данных модулей Дебиторы, Кредиторы, Управление денежными средствами, Управление продажами, Снабжение.
Операционная единица является также объектом, для которого выполняются настройки счетов для финансовых проводок, что позволяет получать финансовые отчеты по каждой операционной единице, определив ее как ЦФО.
Складская организация (Inventory Organization) — это тип организационной структуры компании, который может выполнять функции управления запасами на складах. Разделение данных по запасам также осуществляется на этом уровне. Сотрудники каждой организации работают с собственным набором складов и товарных позиций. Организация, обладающая признаком «складская», должна обязательно или подчиняться другой организации, являющейся операционной единицей, или самой являться таковой.
Организация персонала (Organization HR) — это тип организационной структуры, для которого осуществляется функция управления персоналом. Данный тип классификации обязателен для тех организационных единиц, где необходимо использовать список сотрудников при выполнении операций.
Организация активов (Asset Organization) — это тип организационной структуры, в котором ведется учет активов и выполнение операций по движению активов (приходование, переоценка, выбытие и амортизация).
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 |
Создание View Object (VO) — только для просмотра данных
Создадим 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
Для Internet Explorer 8 существует проблема с открытием нескольких форм OEBS под разными пользователями.
По умолчанию в IE8 включено свойство Session Merging, именно из-за этого и происходит скидывание пользователя.
Как включить поддержку нескольких сессий (2 способа):
1) Открываем новое окно через меню «File -> New Session» в существующем окне браузера
2) Добавляем опцию «-nomerge» для запуска IE8. С данной опцией можно запускать IE8 через командную строку или изменив свойства ярлыка.
Создание OAF проекта в JDeveloper
- Создание WorkSpace
- Создание проекта
- Ограничиваем содержимое проекта
- Замена объектов
- Проверка проекта
Создание WorkSpace
Если рабочее пространство уже создано, пропускаем данный шаг.
Открываем JDeveloper и создаём новое рабочее пространство, именно в нем будут находится наши проекты.
Панель System Navigator, используя контекстное меню для Application, выбираем «New OA Workspace»
Последние комментарии