我试图在第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
答案 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