Literals have caused me grief on more than one occasion. Trying to figure out what a certain number or character literal means in a program has wasted too much of my time, and my time is more valuable to me than money. I have written about this topic before, but I have not talked about literals in SQL.
The example I've chosen may not be the best one, since the ratio of pounds to kilograms never changes. I chose it because it's one most people should be able to relate to. The article I just referred to covers the arguments for and against unchanging literals, so I won't rehash them here.
Suppose we work for a factory in the United States that ships products to other countries. The factory uses customary American units of measurement, but documents that go to other countries require metric measurements.
The weight column refers to pounds. To convert pounds to kilograms is a matter of simple division.
select i.item, i.description, i.weight,
dec(round(i.weight / 2.2046,3),7,3) as ShipWeight
from mylib/items as i
ITEM
ITEM
DESCRIPTION
WEIGHT
SHIPWEIGHT
ABC1000
Widget 6-inch
1.20
0.544
ABC1010
Widget 12-inch
2.40
1.089
ABC1020
Widget 18-inch
3.60
1.633
BR-549
Samples
280.00
127.007
If you wish to replace the literal 2.2046 with something self-documenting, here's one method.
create function mylib/LbsPerKG ()
returns double
language sql
return 2.2046
The LbsToKG (pounds to kilograms) function returns the literal value it replaces. The division looks like this:
select i.item, i.description, i.weight,
dec(round(i.weight / LbsPerKG(),3),7,3) as ShipWeight
from items as i
A second method is to write a function that does the conversion. (I prefer this one to the last one.) Here's a function that converts pounds to kilograms.
create function mylib/LbsToKG ( inPounds double)
returns double
language sql
return inPounds / 2.2046
And here's the rewritten query.
select i.item, i.description, i.weight,
dec(round(LbsToKG(i.weight),3),7,3) as ShipWeight
from items as i
Do you need area code information?
Do you need ZIP Code information?
Do you need ZIP+4 information?
Do you need city name information?
Do you need county information?
Do you need a nearest dealer locator system?
We can HELP! We have affordable AS/400 software and data to do all of the above. Whether you need a simple city name retrieval system or a sophisticated CASS postal coding system, we have it for you!
The ZIP/CITY system is based on 5-digit ZIP Codes. You can retrieve city names, state names, county names, area codes, time zones, latitude, longitude, and more just by knowing the ZIP Code. We supply information on all the latest area code changes. A nearest dealer locator function is also included. ZIP/CITY includes software, data, monthly updates, and unlimited support. The cost is $495 per year.
PER/ZIP4 is a sophisticated CASS certified postal coding system for assigning ZIP Codes, ZIP+4, carrier route, and delivery point codes. PER/ZIP4 also provides county names and FIPS codes. PER/ZIP4 can be used interactively, in batch, and with callable programs. PER/ZIP4 includes software, data, monthly updates, and unlimited support. The cost is $3,900 for the first year, and $1,950 for renewal.
Just call us and we'll arrange for 30 days FREE use of either ZIP/CITY or PER/ZIP4.
Subscription Information:
You can unsubscribe, change your email address, or sign up for any of IT Jungle's free e-newsletters through our Web site at http://www.itjungle.com/sub/subscribe.html.