Is it compulsory to use ext oscillator in designing arduino circuit?
The default clock source for the atmega328p is the internal RC oscillator @ 8MHz with the CKDIV8 fuse programmed.  See page 28 here. 

You can absolutely program the part using the internal RC oscillator.  After all the part ships with this default configuration.  Assuming that you want to program the part using the arduino IDE and have everything behave as expected you will need to change some settings in you arduino boards.txt file so that the internal clock source is selected (as you know the arduino boards that use the atmega328 ship with an external oscillator and the boards.txt file by default instructs the part to use the external oscillator) and then burn the boot loader.  In boards.txt you'll have to modify the fuses to select the proper clock source.  One easy solution is to modify the uno board settings since that board uses the same chip.  Copy/paste all the uno settings so that you have a new board (call it yourUno or something) entry in the file.  The Uno board has the following settings:

uno.bootloader.low_fuses=0xff
uno.bootloader.high_fuses=0xde
uno.build.f_cpu=16000000L


You'll want to modify that to:

yourUno.bootloader.low_fuses=0xe2
yourUno.bootloader.high_fuses=0xda
yourUno.build.f_cpu=8000000L


This should select the internal 8MHz RC as your clock source.  Note that per the comments below there are other ways of doing this if you're OK with a 1 MHz clock.