Моя цель - создать функцию, которая преобразует переменную 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_precision
и I_scale
) передаются вручную. Я хотел бы создать дополнительную функцию, которая бы возвращала точность номера переменной и масштаб на основе типа входной переменной. Есть ли какая-либо инструкция PL / SQL или, может быть, основная таблица, которая может мне помочь в этом?
Например, предположим, что tbl1_1.column_1
является NUMBER(8,3)
.
Как лучше всего получить 8 и 3 значения из column_1
?
Заранее спасибо!