Aylık arşivler: Mart 2015

oracle procedure fark (diff)

Oracle’da ddl trigger oluşturma hakkı olunmadığı ve saatlik, günlük, haftalık olarak prosedürlerin varsa farklarını belirleyip yedek almak için aşağıdaki prosedür kullanılabilir. (_init olan sadece başlangıçta kullanılmalıdır.)


create or replace procedure diffversion(p_schema varchar2)
is

v_user varchar2(30);
v_schema varchar2(30);
v_now date;

v_max date;
v_1 number;
v_2 number;

cursor c_procs(cp_schema varchar2)
is
select distinct name
from all_source
where type = 'PROCEDURE'
and owner=cp_schema;

begin

select user into v_user from dual;

v_schema := upper(p_schema);

select sysdate into v_now from dual;

for proc in c_procs(v_schema)
loop
   
   -- last backup date for proc
   execute immediate '
   select max(backup_date) mx
   from '||v_user||'.diffversion_'||v_schema||'
   where name = '''||proc.name||'''
   ' into v_max;
   
   -- is last backup and current procedure equal
   
   execute immediate '
   select count(*) cnt
   from '||v_user||'.diffversion_'||v_schema||'
   where name = '''||proc.name||'''
   and backup_date = to_date('''||to_char(v_max,'yyyy-mm-dd hh24:mi:ss')||''',''yyyy-mm-dd hh24:mi:ss'')
   ' into v_1;
   
   execute immediate '
   select count(*) cnt
   from '||v_user||'.diffversion_'||v_schema||' t1,
   (
      select *
      from all_source
      where type = ''PROCEDURE''
      and owner = '''||v_schema||'''
      and name = '''||proc.name||'''
   ) t2
   where t1.name = '''||proc.name||'''
   and t1.backup_date = to_date('''||to_char(v_max,'yyyy-mm-dd hh24:mi:ss')||''',''yyyy-mm-dd hh24:mi:ss'')
   and t1.line = t2.line
   and t1.text = t2.text
   ' into v_2;
   
   if (v_1 <> v_2) or (v_1 = 0) then
      execute immediate '
      insert into '||v_user||'.diffversion_'||v_schema||'
      select
      to_date('''||to_char(v_now,'yyyy-mm-dd hh24:mi:ss')||''',''yyyy-mm-dd hh24:mi:ss'') as backup_date,
      owner,
      name,
      type,
      line,
      text
      from all_source
      where type = ''PROCEDURE''
      and owner = '''||v_schema||'''
      and name = '''||proc.name||'''
      order by 1,2,3,4,5,6
      ';
   end if;
   
end loop;

commit;

end;

--------------------------------------------------------------------------------

create or replace procedure diffversion_init(p_schema varchar2)
is

v_user varchar2(30);
v_schema varchar2(30);
v_now date;

begin

select user into v_user from dual;

v_schema := upper(p_schema);

select sysdate into v_now from dual;

execute immediate '
create table '||v_user||'.diffversion_'||v_schema||'
(
backup_date date,
owner varchar2(30),
name varchar2(30),
type varchar2(12),
line number,
text varchar2(4000)
)
compress
';

execute immediate '
insert into '||v_user||'.diffversion_'||v_schema||'
select
to_date('''||to_char(v_now,'yyyy-mm-dd hh24:mi:ss')||''',''yyyy-mm-dd hh24:mi:ss'') as backup_date,
owner,
name,
type,
line,
text
from all_source
where type = ''PROCEDURE''
and owner = '''||v_schema||'''
order by 1,2,3,4,5,6
';

end;

sap business objects webi detay (detail) kullanımı

SAP Business Objects Web Intelligence Rich Client’ta detay (detail) obje tipinin önemli bir kullanım amacı şudur. İki farklı universe’ten (platform) iki sorgu ile gelen ilişkisiz dimension’ları (merge edilemeyen dimension objeler) iki sorguda da yer alan tekil bir ortak alan üzerinden merge ederek tek tablo üzerinde gösterebilmeyi sağlar.

sap_bo_webi_detail_0

sap_bo_webi_detail_1

sap_bo_webi_detail_2

Örneğin; yukarıdaki tablolar iki farklı (musteri ve musteri_adres) universe’te yer alsın, iki sorgu ile (s1 ve s2) aşağıdaki objeler rapora alınır. “Müşteri Id” ortak tekil alan, merge edilebilir. “Müşteri Ad Soyad” ve “Müşteri Adres” ilişkisiz (merge edilemez) dimension alanlar.

sap_bo_webi_detail_3

sap_bo_webi_detail_4

“Müşteri Id” alanları merge edilir. “Müşteri Adres (Detay)” isminde “s2.[Müşteri Id]” alanının detayı olan yeni değişken oluşturulur. Yeni oluşturulan detay değişken artık “Müşteri Ad Soyad” ile aynı tabloda gösterilebilir.

sap_bo_webi_detail_5

sap_bo_webi_detail_6