This would have to be done at the application level.
If a table is created without any Precision/Scale Oracle does not allow a specific precision for function parameters, only type of the variable.
Updating clob data
Alternatively reassigning to a variable within the procedure will force Oracle to implicitly convert the datatype and precision to match the variable, thie requires a slightly different definition, e.g.
The value 7456123.89 will display as follows NUMBER 7456123.89 NUMBER(9) 7456124 NUMBER(9,1) 7456123.9 NUMBER(*,1) 7456123.9 NUMBER(9,2) 7456123.89 NUMBER(6) [not accepted exceeds precision] NUMBER(7,-2) 7456100 FLOAT 7456123.89 FLOAT(12) 7456000.0 In this way, PL/SQL optimizes smaller VARCHAR2 variables for performance and larger ones for efficient memory use.
For example, if you assign the same 500-byte value to VARCHAR2(3999 BYTE) and VARCHAR2(4000 BYTE) variables, PL/SQL allocates 3999 bytes for the former variable at compile time and 500 bytes for the latter variable at run time.
10E125 maximum precision of 126 binary digits, which is roughly equivalent to 38 decimal digits The scale s can range from -84 to 127.
For floating point don't specify p,s REAL has a maximum precision of 63 binary digits, which is roughly equivalent to 18 decimal digits columns 'just in case the space is needed', that is a really bad idea which will reduce the performance and maintainability of your application.
CHAR: Over time, when varchar2 columns are updated they will sometimes create chained rows, CHAR columns are fixed width they are not affected by this, so less DBA effort is required to maintain performance.PL/SQL When retrieving data for a NUMBER column, consider using the PL/SQL datatype: PLS_INTEGER for better performance.LONG Use BLOB instead of LONG INTEGER This ANSI datatype will be accepted by Oracle - it is actually a synonym for NUMBER(38) The FLOAT datatype This ANSI datatype will be accepted by Oracle - Very similar to NUMBER it stores zero, positive, and negative floating-point numbers The NUMBER datatype Stores zero, positive, and negative numbers, fixed or floating-point numbers Oracle stores all numeric data in variable length format - storage space is therefore dependent on the length of all the individual values stored in the table.Precision and scale settings do not affect storage requirements.SCALE might appear to be truncating data, but Oracle does still store the entire number as typed. If a column is defined like : For NUMBER data types: precision p = Number of Digits For FLOAT data types: precision p = Binary Precision (multiply by 0.30103 to convert) So FLOAT = FLOAT (126) = 126 x 0.30103 = approx 37.9 digits of precision.In theory it is possible to save storage space by having an application truncate a fractional value before inserting into a table, but you would have to be very sure the business logic made sense.