Mar
18
2009
คำถามเกี่ยวกับ Number ใน Oracle
Written by Administrator   

    หลายๆ ครั้ง ที่ Programmer ที่เพิ่งเริ่มเขียน Oracle PL/SQL มักมีคำถามเกี่ยวกับ Number เสมอ เนื่องจาก Data type ที่เป็น Number นั้น มีหลายแบบ เช่น Integer , Number ,Float  เป็นต้น ทำให้ไม่แน่ใจว่าควรเลือกใช้งานอย่างไรดี  เพื่อให้เหมาะสม  ลองมาดูกันว่า แต่ละคำถามนั้น มีคำตอบกันอย่างไรบ้าง 

 

Q: ข้อแตกต่างระหว่าง Number  และ Integer ?

A:  Integer นั้นเป็น Sub Type ของ Number ที่มีขนาด 38 หลักเสมอ  =  Number(38,0) ซึ่งแสดงให้เห็นว่า  Integer เป็นType ทีมีนาดใหญ่สุดเท่าที่ Number จะสามารถเก็บค่าได้ และ ข้อแตกต่างอีกอย่างคือ เมื่อค่าที่ได้เป็นจุดทศนิยม สำหรับ  Data Type ที่เป็น Integer Oracle จะทำการปัดทศนิยมเสมอ เช่น ค่า 2.5  Oracle จะปัดขึ้นเป็น 3 

 

Q: Integer  เร็วกว่า Number หรือไม่ ?

A:  ถ้าดูจากคำถามแรก ก็พอจะได้คำตอบว่า ไม่  เพราะว่า Integer มีข้อกำหนดคือ 38  เสมอ แต่ขณะที่ Number สามารถกำหนดได้ว่า จะใช้ขนาดเท่าไหร่ ตรงนี้คือจุดที่มีผลกับความเร็ว   แต่อันนี้ ต้องลองทดสอบกันจริงๆจังๆ ซึ่งผมก็ไม่เคยทดสอบซักครั้ง Tongue out  

 

Q: Integer ใช้พื้นที่เก็บค่าน้อยกว่า Number  ? และ  Number(3,0)  ใช้พื้นที่เก็บค่าน้อยกว่า Integer ?

A :  ไม่ใช่   Oracle ใช้พื้นที่สำหรับเก็บค่าเท่ากับค่าจริงๆ ก็คือ เก็บค่า 1 ใช้พี้นที่ น้อยกว่า เก็บค่า 700 แน่นอน

 

Q: สำหรับตัวเลขที่เป็นจุดทศนิยม  ควรจะใช้  Data Type ที่เป็น Number  หรือ ว่า Float ?

A: Float เป็น Sub Type ของ Number   ใน Oracle นั้นมี Data Type สำหรับจุดทศนิยมอีก 2 ประเภท คือ  Binary_float  และ Binary_double ซึ่งมีไว้เพื่อประโยชน์ทางด้าน performance แต่ข้อด้อยกว่า Number คือ เก็บจำนวนเต็มได้น้อยกว่า 

   ดังนั้น ถ้าต้องเลือกใช้งาน Data Type โดยทั่วไป เช่น เก็บค่าสำหรับการคำนวณ   ผมเลือก Number  เป็นอันดับแรก  ยกเว้นกรณีที่ต้องการ Performance จริงๆ ซึ่งต้องเป็นการคำวณเป็น ล้านๆ หรือ พันล้านคำสั่ง จึงจะเห็นความแตกต่าง 

 

 Q: เมื่อไหร่ควรเลือกใช้ Number  เมื่อไหร่ควรเลือกใช้ Varchar2 ?

A: เมื่อต้องใช้ข้อมูลที่เก็บไว้ เพื่อนำไปคำนวณทางตัวเลข ให้เลือกใช้ Number  ถ้าไม่ใช่เพื่อคำวณ ก็เลือกใช้ Varchar2  อีกนัยหนึ่งก็คือ เก็บ Data ให้เหมาะกับการใช้งาน รวมไปถึง วันที่ก็ควรเป็น Type Date  เช่น 

    Table Product มี ID  , Name , Price    สามารถใช้  ID Number มี Data Type เป็น Varchar2   Name Data type เป็น Varchar2  ส่วน Price ใช้ Data Type เป็น Number  

   ยกเว้น พวก Surrogate Key  ที่ได้จาก Sequence  Data Type ที่ได้จาก Sequenceเป็น Number อยู่แล้ว  ใช้ Data Type เป็น Number  ไม่จำเป็น ต้อง Convert มาเป็น Varchar2 

 หวังว่าคงเป็นประโยชน์บ้างนะครับ  Laughing

 ที่มา  http://it.toolbox.com/blogs/oracle-guide/oracle-data-types-5-faqs-about-number-30525

 

Comments
Add New Search
Write comment
Name:
Email:
 
Website:
Title:
UBBCode:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 
Please input the anti-spam code that you can read in the image.

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."