Запретить commit в процедуре

alter session enable  commit in procedure;
alter session disable commit in procedure;

При попытке выполнить commit произойдет исключение.

Categories: SQL Tags: , ,

Select from PL/SQL table

28 Июнь 2010 1 комментарий

Пример запроса из коллекции.

-- создаем глобальный тип данных, локальный нельзя использовать
create or replace type xx_test_type is object ( id number, descr varchar2(20));
create or replace type xx_test_tab is table of xx_test_type;

Пример заполнения и вывода данных

declare
 vcollect xx_test_tab := xx_test_tab(); -- инициализация
begin
 -- заполняем данными
 vcollect.extend;
 vcollect(vcollect.count) := xx_test_type(1,'test1');

 vcollect.extend;
 vcollect(vcollect.count) := xx_test_type(2,'test2');
 -- запрос из коллекции
 for i in (select * from Table(vcollect) order by id )
 loop
   dbms_output.put_line(i.descr);
 end loop;
end;

Значение строк в одну, через xml функции

with t as (
select 1 as id, 'a' gr from dual
union all
select 2 as id, 'a' gr from dual
union all
select 4 as id, 'b' gr from dual
)
select
 rtrim(to_char(sys_xmlagg(xmlelement(id,id ||',')).extract('/ROWSET/ID/text()').getclobval()),',') TEXT
from t
group by gr;

TEXT
-------
1,2
4

Модуль GME/INV — Связка между заданиями и транзакциями

select *
from gme_batch_header          gbh,
     gme_material_details      gmd,
     mtl_material_transactions mmt
where 1=1
      and gbh.batch_type = 0
      -- gmd
      and gmd.batch_id = gbh.batch_id
      -- mmt
      and mmt.transaction_source_id = gmd.batch_id
      and mmt.trx_source_line_id    = gmd.material_detail_id
      -- for test
      --and trunc(gbh.plan_start_date) >
      --and gbh.batch_no =
      --and mmt.attribute_category =
      and rownum<100;

Удаление всех объектов схемы

Построение команд для удаления объектов

select 'drop '||object_type||' '||object_name
       ||decode(object_type,'TABLE',' cascade constraints;','TYPE',' force;',';')
from user_objects
where object_type in ('TABLE','VIEW','SEQUENCE','PACKAGE','PROCEDURE','FUNCTION','TYPE')
order by object_type;

Дополнительно можно почистить корзину

  -- удалить все объекты из корзины текущего пользователя
  purge recyclebin;
Categories: SQL Tags: , ,

Использование RECYCLE BIN

15 Июнь 2010 1 комментарий

В 10 версии добавилась возможность востанавливать удаленные таблицы и индексы используя корзину.

Для того что бы включить\выключить корзину:

  -- Отключить корзину для сессии
  ALTER SESSION SET RECYCLEBIN=OFF;
  -- Отключить корзину
  ALTER SYSTEM SET RECYCLEBIN=OFF SCOPE=SPFILE;
  -- Включить корзину для сессии
  ALTER SESSION SET RECYCLEBIN=ON;
  -- Включить корзину
  ALTER SYSTEM SET RECYCLEBIN=ON SCOPE=SPFILE;

По умолчанию корзина включена.

Читать дальше про “Использование RECYCLE BIN” »

Categories: SQL Tags: , ,

DML Error Logging

В 10.2  появилось логирование ошибок при выполнение DML команд INSERT, UPDATE, MERGE и DELETE.

Если DML-операция при массовой  обработке данных вызывает ошибки при добавлении или изменении, какой либо записи, то вся операция DML будет отменена. Новая инструкция — LOG ERRORS,  предназначена для обхода подобных ситуация. Если в процессе выполнения DML операции возникает ошибка, то информация о ней  запишется в заранее созданную (при помощи пакета DBMS_ERRLOG) таблицу логов, на которую указывает конструкция LOG ERRORS.

Читать дальше про “DML Error Logging” »

Categories: SQL Tags: , , , ,

PL/SQL Developer — Просмотр плана запроса в окне сессий

Модуль GMD — Создание производственного задания

Модуль GMD R12.GMD.A.6 (Разработка продукции УНП; Process Manufacturing Product Development)
Процедура для создания производственного задания (batch).

Читать дальше про “Модуль GMD — Создание производственного задания” »

Модуль INV — Текущее количество для позиции

Select moq.organization_id                   as org_id,
       sysdate                               as date_val,
       moq.inventory_item_id                 as item_id,
       moq.subinventory_code                 as subinventory_code,
       moq.locator_id                        as locator_id,
       moq.lot_number                        as lot_number,
       msi.segment1                          as item,
       msi.primary_uom_code                  as uom_code,
       sum(moq.primary_transaction_quantity) as actual_qty
  from mtl_onhand_quantities_detail moq,
       mtl_system_items_b           msi
where 1=1
      -- msi
      and msi.inventory_item_id  = moq.inventory_item_id
      and msi.organization_id    = moq.organization_id
      --and moq.inventory_item_id  = :1
      --and moq.organization_id    = :2
      --and moq.subinventory_code  = :3
      --and moq.lot_number         = :4
group by moq.organization_id ,
         sysdate,
         moq.inventory_item_id,
         msi.segment1,
         msi.primary_uom_code,
         moq.subinventory_code,
         moq.locator_id,
         moq.lot_number
order by moq.organization_id, moq.inventory_item_id

Так же есть API для просмотра текущего количества OEBS API INV – Текущее количество для позиции (ONHAND)