Home » SQL & PL/SQL » SQL & PL/SQL » Random numbers and characters
Random numbers and characters [message #7283] Mon, 02 June 2003 04:55 Go to next message
Shahanur Rahman
Messages: 27
Registered: April 2003
Junior Member
Hi
Can anybody please tell me how to generate random numbers including characters like a,b,L,T etc. (i only know generating numbers like 9876667,9875667 using sys.dbms_random)

moreover i want to omit 2 characters from the generated numbers those are l and o

length will be 9 and it will be looking like

k9445jLDc or 98jPt3cjk

Thanks
Re: Random numbers and characters [message #7286 is a reply to message #7283] Mon, 02 June 2003 10:47 Go to previous messageGo to next message
Art Metzer
Messages: 2480
Registered: December 2002
Senior Member
Note, this package will generate ID's with capital L's and capital O's.
SQL> CREATE OR REPLACE PACKAGE id_generator
  2  AUTHID CURRENT_USER
  3  AS
  4      FUNCTION convert_0_to_59_to_char (
  5          p_num   IN  NATURAL
  6      )
  7      RETURN VARCHAR2;
  8      
  9      FUNCTION make_id (
 10          p_length    IN  POSITIVE    DEFAULT 9
 11      )
 12      RETURN VARCHAR2;
 13  END id_generator;
 14  /
  
Package created.
  
SQL> CREATE OR REPLACE PACKAGE BODY id_generator AS
  2      FUNCTION convert_0_to_59_to_char (
  3          p_num   IN  NATURAL
  4      )
  5      RETURN VARCHAR2
  6      IS
  7          l_char      VARCHAR2(1);
  8      BEGIN
  9          IF p_num BETWEEN 0 AND 9 THEN
 10              l_char := CHR(48 + p_num);
 11          ELSIF p_num BETWEEN 10 AND 35 THEN
 12              l_char := CHR(55 + p_num);
 13          ELSIF p_num BETWEEN 36 AND 46 THEN
 14              l_char := CHR(61 + p_num);
 15          ELSIF p_num BETWEEN 47 AND 48 THEN
 16              l_char := CHR(62 + p_num);
 17          ELSIF p_num BETWEEN 49 AND 59 THEN
 18              l_char := CHR(63 + p_num);
 19          ELSE
 20              l_char := NULL;
 21          END IF;
 22          RETURN (l_char);
 23      END convert_0_to_59_to_char;
 24      
 25      FUNCTION make_id (
 26          p_length    IN  POSITIVE    DEFAULT 9
 27      )
 28      RETURN VARCHAR2
 29      IS
 30          l_num       NATURAL;
 31          l_id        VARCHAR2(100);
 32      BEGIN
 33          FOR i IN 1..LEAST(p_length,100) LOOP
 34              l_num := MOD(ABS(DBMS_RANDOM.RANDOM),60);
 35              l_id := l_id
 36                      || convert_0_to_59_to_char(l_num);
 37          END LOOP;
 38          RETURN (l_id);
 39      END make_id;
 40  END id_generator;
 41  /
  
Package body created.
  
SQL> SELECT id_generator.make_id FROM DUAL;
  
MAKE_ID
---------------------------------------------------------------------------------------------------------
yJGFdApcr
  
SQL> SELECT id_generator.make_id FROM DUAL;
  
MAKE_ID
---------------------------------------------------------------------------------------------------------
xS67OVjKh
  
SQL> SELECT id_generator.make_id FROM DUAL;
  
MAKE_ID
---------------------------------------------------------------------------------------------------------
VuyGp2s54
  
SQL> SELECT id_generator.make_id(20) FROM DUAL;
  
ID_GENERATOR.MAKE_ID(20)
---------------------------------------------------------------------------------------------------------
3GquP1NVhFnMEfsRFy7U
  
SQL> SELECT id_generator.make_id(90) FROM DUAL;
  
ID_GENERATOR.MAKE_ID(90)
---------------------------------------------------------------------------------------------------------
nvMUEIUhhGwJjtavxBrekikrTR5UDGnudOYxXmK0Agw6kwArcOL6Lkkqjs87BrKF1UTwECCvb3MZRn80CtW1cQ33eY
  
SQL> 
Good luck,

A
Re: Random numbers and characters [message #7294 is a reply to message #7286] Mon, 02 June 2003 22:18 Go to previous message
Shahanur Rahman
Messages: 27
Registered: April 2003
Junior Member
Dear Art Metzer

Thank you very much for your nice solution.Really, this is exactly that i need.
Previous Topic: very vrey urgent - subtract time
Next Topic: Date function
Goto Forum:
  


Current Time: Fri Apr 26 06:39:33 CDT 2024