Monday, June 22, 2009

BÜTÜN PARTITION'LARIN COUNT'UNU BİR SEFERDE ALMA

Bir tabloda bulunan partitionların count'larını teker teker almaktansa hepsini bir seferde alabiliriz. bunun için yapıalcak islem basit.

öncelik ile procederure yaratalım.

CREATE OR REPLACE PROCEDURE part_count (pin_table_name IN VARCHAR2)
IS
CURSOR s1
IS
SELECT /*+ parallel(t,8) */
partition_name AS v_part_name
FROM user_tab_partitions t
WHERE table_name = pin_table_name;

rec_s1 s1%ROWTYPE;
v_table_name VARCHAR2 (30);
v_dynsql VARCHAR2 (200);
v_sonuc VARCHAR2 (200);
BEGIN
v_table_name := pin_table_name;
OPEN s1;
LOOP
FETCH s1
INTO rec_s1.v_part_name;
EXIT WHEN s1%NOTFOUND;
v_dynsql :=
'select /*+ parallel(t,8) */ count(1) as v_sonuc from '
|| v_table_name
|| ' partition ('
|| rec_s1.v_part_name
|| ') t';

EXECUTE IMMEDIATE v_dynsql
INTO v_sonuc;

DBMS_OUTPUT.put_line (v_dynsql || ' --' || v_sonuc);
--DBMS_OUTPUT.put_line (v_sonuc);
-- DBMS_OUTPUT.put_line ('DENEME');
END LOOP;

CLOSE s1;
END;
/
--partitionlu yapıya sahip bir tablomuz olması gerekiyor. Bunuda hemen yaratalım.

create table part_deneme

(OWNER VARCHAR2(30 BYTE) NOT NULL,

OBJECT_NAME VARCHAR2(30 BYTE) NOT NULL,

SUBOBJECT_NAME VARCHAR2(30 BYTE),

OBJECT_ID NUMBER NOT NULL,

DATA_OBJECT_ID NUMBER,

OBJECT_TYPE VARCHAR2(19 BYTE),

CREATED DATE NOT NULL,

LAST_DDL_TIME DATE NOT NULL,

TIMESTAMP VARCHAR2(19 BYTE),

STATUS VARCHAR2(7 BYTE),

TEMPORARY VARCHAR2(1 BYTE),

GENERATED VARCHAR2(1 BYTE),

SECONDARY VARCHAR2(1 BYTE)

)

partition by range (object_id)

(partition part_01 values less than (20000) tablespace users,

partition part_02 values less than (40000) tablespace example,

partition part_03 values less than (60000) tablespace users,

partition part_04 values less than (maxvalue) tablespace users)

tabloyu ayrattık şimdi içine verileri ekleyelim.

insert into part_deneme select * from all_objects

--sonra bu nu çalıştıralım.
DECLARE
PIN_TABLE_NAME VARCHAR2(200);

BEGIN
PIN_TABLE_NAME := NULL;

HR.PART_COUNT ('PART_DENEME');
COMMIT;
END;

1 comment:

Anonymous said...

databaseden aldığım dataları bir tablo içerisinde listeletiyorum..
her kayıdın yanında bir düzenle linki veriyorum herhangi bir kaydın yanında ki düzenle linkini tıkladığımda o kayıdın içerisine girmesini istiyorum bunu id girerek yaptım fakat bu şekilde nasıl yapacağımı bilmiyorum... yardım lütfen...