Mega Code Archive

 
Categories / Oracle PLSQL Tutorial / SQL Data Types
 

NUMBER data type

SQL> SQL> CREATE TABLE precision (   2     value NUMBER(38,5),   3     scale NUMBER(10)); Table created. SQL> SQL> INSERT INTO precision (value, scale)   2     VALUES (12345, 0); 1 row created. SQL> INSERT INTO precision (value, scale)   2     VALUES (123456, 0); 1 row created. SQL> INSERT INTO precision (value, scale)   2     VALUES (123.45, 0); 1 row created. SQL> INSERT INTO precision (value, scale)   2     VALUES (12345, 2); 1 row created. SQL> INSERT INTO precision (value, scale)   2     VALUES (123.45, 2); 1 row created. SQL> INSERT INTO precision (value, scale)   2     VALUES (12.345, 2); 1 row created. SQL> INSERT INTO precision (value, scale)   2     VALUES (1234.5, 2); 1 row created. SQL> SQL> commit; Commit complete. SQL> SQL> SET SERVEROUTPUT ON SQL> SQL> DECLARE   2     v_integer NUMBER(5);   3     v_scale_2 NUMBER(5,2);   4     v_real NUMBER;   5   6     CURSOR scale_0_cur   7     IS   8        SELECT value   9        FROM precision  10        WHERE scale = 0;  11  12     CURSOR scale_2_cur  13     IS  14        SELECT value  15        FROM precision  16        WHERE scale = 2;  17  BEGIN  18  19     DBMS_OUTPUT.PUT_LINE('PRECISION 5 SCALE 0');  20  21     OPEN scale_0_cur;  22  23     -- Loop thorugh all records that have a scale of zero  24     LOOP  25     FETCH scale_0_cur INTO v_real;  26     EXIT WHEN scale_0_cur%NOTFOUND;  27  28     -- Assign different values to the v_integer variable  29     --  to see how it handles it  30     BEGIN  31        DBMS_OUTPUT.PUT_LINE('     ');  32        DBMS_OUTPUT.PUT_LINE('Assigned: '||v_real);  33  34        v_integer := v_real;  35  36        DBMS_OUTPUT.PUT_LINE('Stored: '||v_integer);  37     EXCEPTION  38        WHEN OTHERS  39        THEN  40           DBMS_OUTPUT.PUT_LINE('Exception: '||sqlerrm);  41     END;  42     END LOOP;  43  44     CLOSE scale_0_cur;  45  46  47  END;  48  / PRECISION 5 SCALE 0 Assigned: 12345 Stored: 12345 Assigned: 123456 Exception: ORA-06502: PL/SQL: numeric or value error: number precision too large Assigned: 123.45 Stored: 123 PL/SQL procedure successfully completed. SQL> SQL> drop table precision; Table dropped.