01 August 2010

วิธีการ create table บน Teradata

วิธีการสร้าง Permanent Table

CREATE SET TABLE DB1.TABLE1, NO FALLBACK
      ( CALL_START_DT DATE,
        ACCT_ID INTEGER,
        MSISDN VARCHAR(15),
        VC_AMNT DECIMAL(18,4),
        VAS_AMNT DECIMAL(18,4)
      )
UNIQUE PRIMARY INDEX (CALL_START_DT,ACCT_ID,MSISDN); 

วิธีการสร้าง Volatile Table (Temporary Table)

แบบที่ 1 - แบบระบุ column

CREATE VOLATILE SET TABLE VOL_TABLE1, NO LOG
      ( CALL_START_DT DATE,
        ACCT_ID INTEGER,
        MSISDN VARCHAR(15),
        VC_AMNT DECIMAL(18,4),
        VAS_AMNT DECIMAL(18,4)
      )
UNIQUE PRIMARY INDEX (CALL_START_DT,ACCT_ID,MSISDN) ON COMMIT PRESERVE ROWS;
แบบที่ 2 - แบบ select มาจาก table อื่นอีกที
 CREATE VOLATILE MULTISET TABLE VOL_TABLE2, NO LOG AS
      ( SELECT ACCT_ID, MSISDN, PKG_NM, PKG_START_DT, PKG_END_DT
        FROM DB2.TABLE2
        WHERE SWON_DT >= '2010-01-01'
      ) WITH DATA
PRIMARY INDEX (ACCT_ID,MSISDN)
INDEX (PKG_NM) ON COMMIT PRESERVE ROWS;
การ create แบบที่ 2 จะได้ schema table ตาม data ที่ select มา
โดยจะต้องมีการระบุว่า WITH DATA (ได้มาทั้ง schema และ data) 
หรือ WITH NO DATA (ได้ schema อย่างเดียว ไม่เอา data)

Teradata Table Type and Index Type

Teradata มี table อยู่ 2 ประเภท คือ
  1. Set table: การเก็บข้อมูลใน table จะต้องไม่มี data ที่ duplicate กันทั้ง record กรณีที่มี data duplicate เข้ามาจะโดน reject ออก
  2. Multiset table: สามารถมี data ที่ duplicate กันทั้ง record เก็บใน table เดียวกันได้
Index เป็นตัวกำหนดการกระจายตัวของ data ลงในแต่ละ disk มีผลต่อประสิทธิภาพในการ access data 
มี 2 ประเภท เช่นกัน ได้แก่
  1. Primary Index (PI): column ที่กำหนดสามารถเป็น column ที่เป็น unique data หรือไม่ก็ได้
  2. Unique Primary Index (UPI): column ที่กำหนดจะต้องเป็น column ที่เป็น unique data

NLS_DATE_FORMAT

สำหรับ Oracle ถ้าอยากให้ผลของ SQL display date ออกมาเป็นยังงัย ให้รัน command นี้ก่อนเพื่อกำหนด format ของ session นั้น
alter session set NLS_DATE_FORMAT = 'mm-dd-yyyy HH24:mi:ss';

How to see code of store procedure from sqlplus

login as system or owner of stored procedure
set long 1000000;
select dbms_metadata.get_ddl('PROCEDURE','ADDSUBPARTITION') FROM dual;

Find and remove duplicate rows from a table

http://www.remote-dba.cc/oracle_tips_duplicate_rows.htm