Generating Positive Numbers
I need to generate a variety of account balances for our test data, all of which are numbers. My representative balance could be a whole number or a floating-point number with two places after the decimal, such as 12,345.98. For simplicity’s sake, let’s assume the bank does not allow overdrafts—that is, the balance cannot be negative. The DBMS_RANDOM package’s VALUE function returns a positive number greater or equal to zero and less than 1 with 38 spaces after the decimal point. Here is how I can use that function to get a number.
CREATE OR REPLACE FUNCTION get_num RETURN NUMBER IS l_ret NUMBER; BEGIN l_ret := DBMS_RANDOM.VALUE; RETURN l_ret; END;
When this function is called, it returns a number such as the following.
SQL>COLUMN get_num FORMAT 0.99999999999999999999999999999999999999
SQL>SELECT get_num FROM dual;
GET_NUM -------------------------------------- .4617512131361177187595598121854637555
Because the function has a purity level of WNDS (write no database state), we can also call this function directly in a SELECT statement or use it inside an INSERT.
For the moment, let’s take a detour into a different kind of application. Assume that I am building a scientific application where temperature readings from a thermometer have to be captured for later analysis. I can generate a list of numbers via the following code:
BEGIN FOR ctr IN 1 .. 10 LOOP DBMS_OUTPUT.put_line ('Temperature = ' || get_num || ' Celsius'); END LOOP; END;
The output is:
Temperature ...
Get Oracle PL/SQL for DBAs now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.