PL / SQL指令获得数值列精度

时间:2019-03-22 12:12:44

标签: sql oracle plsql type-conversion

我的目标是创建一个将NUMBER变量转换为VARCHAR2的函数,同时将逗号替换为小数点分隔符。此外,该字符串还带有一个掩码,该掩码取决于作为I_qty_value传递的数字的整数和十进制大小。

declare

L_result  VARCHAR2(20);          

FUNCTION CONVERT_QTY_FORMAT(I_qty_value IN NUMBER,
                            I_precision IN NUMBER,
                            I_scale     IN NUMBER)

RETURN VARCHAR2 IS
  --
  L_conv_value       VARCHAR2(255);
  L_mask             VARCHAR2(50);
  L_integer_size     NUMBER := I_precision - I_scale;
  L_decimal_size     NUMBER := I_scale;   
  --
BEGIN
  --
  -- Apply mask only if price is a decimal.
  --
  IF round(I_qty_value) = I_qty_value THEN
    --
    L_conv_value := TRIM(TO_CHAR(I_qty_value));
    --
  ELSE
    --
    -- Mask constructor based on value's length and precision.
    --
    L_mask := LTRIM(LPAD('0', L_integer_size , 9)) || 'D' || LTRIM(LPAD('0', L_decimal_size, 0));
    --
    -- Convert number to string using previous mask. 
    --
    L_conv_value := TRIM(REPLACE(TO_CHAR(I_qty_value, L_mask),',','.')); 
    --
  END IF;
  --
  RETURN L_conv_value;
  --
END CONVERT_QTY_FORMAT;  

begin

L_result := CONVERT_QTY_FORMAT(1000.999, 6, 2);
dbms_output.put_line(L_result);  

end;

尽管该功能已经可以使用,但是两个输入参数(I_precisionI_scale)正在手动传递。 我想创建一个附加函数,该函数将根据输入的变量数据类型返回变量数字的精度和小数位数。是否有任何PL / SQL指令或核心表可以帮助我做到这一点?

例如,假设tbl1_1.column_1NUMBER(8,3)

column_1获取8和3值的最佳方法是什么?

提前谢谢!

1 个答案:

答案 0 :(得分:2)

您可以在Tuser_tab_cols视图中找到以下信息:

all_tab_cols

create table tbl1_1(column_1 number(8,3));

select column_name, data_precision, data_scale 
  from user_tab_cols 
  where table_name = 'TBL1_1' and column_name = 'COLUMN_1';