2017-05-29 87 views
0

我已經寫了一個存儲過程來顯示關於員工工資的屏幕細節,它工作的很好,但我想修復顯示在屏幕上的信息。我嘗試使用LPAD和RPAD函數來在屏幕上排列「列」,但它不起作用,或者我可能沒有很好地使用它。你有什麼主意嗎?謝謝。顯示Oracle PL/SQL - 如何格式化屏幕上顯示的數據?

  FOR j IN c_recibos (t_emp(i).numero, t_emp(i).legajo) 
      LOOP 
       DBMS_OUTPUT.PUT_LINE(
        RPAD(j.concepto, 24, ' ') || ' ' || 
        LPAD(j.cantidad, 10, ' ') || ' ' || 
        RPAD(TO_CHAR(j.haberes, '0000.00'), 9, ' ') || ' ' || 
        LPAD(TO_CHAR(j.retenciones, '0000.00'), 28, ' ')); 
      END LOOP; 

      FOR k IN c_totales(t_emp(i).numero, t_emp(i).legajo) 
      LOOP 
       DBMS_OUTPUT.PUT_LINE(
        'Totales: ' || k.total_haberes || ' ' || 
        k.total_retenciones); 
      END LOOP; 

      DBMS_OUTPUT.PUT_LINE('------------'); 
     END LOOP; 

最新信息:

enter image description here

當我出口的信息複製到記事本,我想看到類似的東西:

enter image description here

+1

看起來不錯除了幾個多餘的空格'Cantidad'之前和'Retenciones'列中的數字。請記住,空值不會被填充,空格是默認的填充字符,所以你不需要''''。 (順便說一句,是記事本或Excel?) –

+0

對不起,這是爲Excel,但還沒有工作。有沒有任何功能或什麼來格式化輸出?或者我應該繼續嘗試使用LPAD和RPAD功能? –

+1

如果僅用於Excel,則可以使用分隔符(例如製表符或管道),而不是將列中的文本對齊。如果它必須對齊,那麼'lpad'和'rpad'應該可以完成這項工作。您可能會將文本分配給char變量而不是正確填充,因爲它涉及到相同的事情(對空值的注意事項相同)。 –

回答

1

你可以用LPAD做到這一點和RPAD。只需要一點點算術。

1)你應該添加2個空格Cantidad

2)Totales也應補齊(靜態爲先,然後是數字):

FOR j IN c_recibos (t_emp(i).numero, t_emp(i).legajo) 
LOOP 
    DBMS_OUTPUT.PUT_LINE(
     RPAD(j.concepto,      24, ' ') || ' ' || 
     LPAD(j.cantidad,      12, ' ') || ' ' || 
     RPAD(TO_CHAR(j.haberes, '0000.00'),  9, ' ') || ' ' || 
     LPAD(TO_CHAR(j.retenciones, '0000.00'), 28, ' ') 
    ); 
END LOOP; 

FOR k IN c_totales(t_emp(i).numero, t_emp(i).legajo) 
LOOP 
    DBMS_OUTPUT.PUT_LINE(
     RPAD('Totales:',        24, ' ') || ' ' || 
     LPAD(':',          12, ' ') || ' ' || 
     RPAD(TO_CHAR(k.total_haberes, '0000.00'),  9, ' ') || ' ' || 
     LPAD(TO_CHAR(k.total_retenciones, '0000.00'), 28, ' ') 
    ); 
END LOOP;