I have a /18 in RIB but I would like advertise smaller subnet in BGPfor specific reason to diff ISP etc. Is there a way to do it without creating a null route or static route. Is some way in policy statement I can do this advertisement by matching against the bigger subnet or something?
The typical way to solve this would be to create static routes or nullroutes which you then advertise to your upstream ISP's. You need to have a route for them in your routing table to be able to announce the prefix to your peers.
However, you don't need to deaggregate your /16 into /24's. You can use larger networks (/21's for example), or you can choose to announce the /16 as the overlapping aggregated prefix and select a few /24's for which you want to advertise a different preference.