格式化数字以在oracle中显示

时间:2015-08-29 10:56:15

标签: oracle plsql

我试图在第37行格式化数字,但我无法打印预期的输出。基本上我已经23岁,但是我尝试实现像0023这样的输出。如果我在代码的某个地方做错了,请告诉我。

CREATE OR REPLACE Procedure DE_DUP_PROC (Dy_File_Name  in VARCHAR2,
SUPPLIER_CD in varchar2,
EXT_PHARMA_ID in varchar2,
FLAG_VALUE in varchar2,
DE_REC_COUNT out NUMBER) 
   --RETURN NUMBER
AS
    SEQ_NO_SHO Number(38);                          --EEEE
    WYYYYNNN VARCHAR2(250) := 'W2015021';
    YYYYNNN VARCHAR2(10);
    CUR_DATE Date; 
    --De_Rec_Count Number(38) := 3456;
    DE_DUB_OUTPUT_FILE VARCHAR2(100);
    DE_REC_COUNT1 NUMBER(10);



BEGIN

        SQL='SELECT count(*) into DE_REC_COUNT FROM  (SELECT stg.*, row_number() over ( partition BY key_clmns_hash ORDER BY 1 ) AS RN FROM '|| Dy_File_Name ||' stg ) s
        LEFT JOIN ps_pharmacy p ON s.extrnl_pharmacy_id = p.extrnl_pharmacy_id LEFT JOIN ps_rx_hist H ON h.key_clmns_hash = s.key_clmnS_hash
        AND h.rx_dspnsd_dt = s.rx_dspnsd_dt AND s.supplier_pharmacy_cd = h.SUPPLIER_PHARMACY_CD AND s.detl_clmns_hash <> h.detl_clmns_hash WHERE S.RN = 1';

        execute immediate SQL INTO DE_REC_COUNT;

        if DE_REC_COUNT > 0
        then


                YYYYNNN := replace(WYYYYNNN,'W','');

                --SEQ_NO_SHO := FUN_XYZ(SUPPLIER_CD,EXT_PHARMA_ID,YYYYNNN);
                SEQ_NO_SHO := 23;
                SEQ_NO_SHO := to_char(SEQ_NO_SHO,'0999');

                **DBMS_OUTPUT.PUT_LINE(SEQ_NO_SHO);**

                DE_DUB_OUTPUT_FILE := 'LRXIE'||FLAG_VALUE||'10_'||SUPPLIER_CD||'_'||EXT_PHARMA_ID||'_'||WYYYYNNN||'_'||SEQ_NO_SHO||'_'||DE_REC_COUNT1||'.TXT';

                --DBMS_OUTPUT.PUT_LINE(DE_DUB_OUTPUT_FILE);


            DE_REC_COUNT :=0;
        else

            DE_REC_COUNT :=1;

        End if;
    --      
END DE_DUP_PROC;

输出:-23

2 个答案:

答案 0 :(得分:3)

只需使用格式掩码中的全零:

begin
    for i in 5 .. 15 loop
        dbms_output.put_line ('-' || to_char (i, '0000'));
    end loop;
end;

结果:

PL/SQL block executed
- 0005
- 0006
- 0007
- 0008
- 0009
- 0010
- 0011
- 0012
- 0013
- 0014
- 0015

答案 1 :(得分:1)

您可以尝试使用LPAD功能:

SEQ_NO_SHO VARCHAR2(38);
SEQ_NO_SHO := '23';
SEQ_NO_SHO := LPAD(SEQ_NO_SHO, 4, '0');

<强>输出:

0023