繁体   English   中英

PL/SQL Oracle dbms_output 使均匀 output

[英]PL/SQL Oracle dbms_output make evenly output

我试图寻找答案,但没有找到。

即使每篇文章的文章长度不同,我也很乐意让我的 output 均匀。我想要的是 这就是长度不同时我所拥有的我有的

这是有兴趣的人看的代码

set serverout ON format WORD_WRAPPED;



CREATE OR REPLACE PROCEDURE imprimeFacture IS

        CURSOR c_facture IS
    SELECT
        customer.contact as c_contact,
        customer.address as c_address,
        customer.city as c_city,
        customer.state as C_state,
        customer.zip as c_zip,
        customer.phone as c_phone,
        salesman.nom as s_nom,
        salesman.address as s_address,
        salesman.city as s_city,
        salesman.state as s_state,
        salesman.zip as s_zip,
        salesman.phone as s_phone,
        invoices.ino as i_ino,
        invoices.idate as i_date,
        detail.qty as d_qty,
        parts.descript as p_description,
        detail.price as d_prix,
        detail.ltotal as d_prixTotal,
        (
            SELECT
                round(SUM(detail.ltotal), 2)
            FROM
                detail
            WHERE
                detail.ino = 1054
        )  AS totalfacture,
        (
            SELECT
                round(SUM(detail.ltotal * 0.15), 2)
            FROM
                detail
            WHERE
                detail.ino = 1054
        )  AS taxe,
        (
            SELECT
                round(SUM(detail.ltotal * 0.15 + detail.ltotal), 2)
            FROM
                detail
            WHERE
                detail.ino = 1054
        )  AS totalavectaxe
    FROM
             invoices
        JOIN detail ON detail.ino = invoices.ino
        JOIN parts ON parts.pno = detail.pno
        JOIN customer ON customer.cno = invoices.cno
        JOIN salesman ON salesman.salesman = invoices.salesman
    WHERE
        invoices.ino = 1054;
       rec_facture c_facture%rowtype;
       fictifAvantBoucle NUMBER := 0;
BEGIN
    open c_facture;
    
    loop
        FETCH c_facture into rec_facture;
        exit when c_facture%notfound;
        
        if fictifAvantBoucle = 0 then
            dbms_output.put_line('Facture numéro: ' || rec_facture.i_ino || chr(10) || 'Date de facturation (Y/M/D): ' || rec_facture.i_date --section Facture
            || chr(10) || chr(10) || 'Vendu par ' || chr(10) || rec_facture.s_nom || chr(10) || 'Téléphone: ' || rec_facture.s_phone || chr(10) --section vendeur
            || 'Address: ' || rec_facture.s_address || chr(10)
            || 'Ville: ' || rec_facture.s_city || chr(10) || 'État: ' || rec_facture.s_state || chr(10) || 'ZIP: ' || rec_facture.s_zip 
            || chr(10) || chr(10) || 'Facturé à ' || chr(10) || rec_facture.c_contact || chr(10) || 'Téléphone: ' || rec_facture.c_phone || chr(10) --section client
            || 'Address: ' || rec_facture.c_address 
            || chr(10) || 'Ville: ' || rec_facture.c_city || chr(10) || 'État: ' || rec_facture.c_state || chr(10) || 'ZIP: ' || rec_facture.c_zip || chr(10)
            || chr(10) || '---------------------------------------------------------------------------------------------------------------------------' --section facture Article
            || chr(10) || 'Qty' || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) || 'Article' || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) 
            || 'Prix unitaire' || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) || 'Montant total' || chr(10)
            || '---------------------------------------------------------------------------------------------------------------------------');           
            fictifAvantBoucle := fictifAvantBoucle + 1;
        end if;
        dbms_output.put_line(rec_facture.d_qty || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) || rec_facture.p_description || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) 
        || rec_facture.d_prix || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) || chr(9) || rec_facture.d_prixTotal);  
    end loop;
      
EXCEPTION 
    WHEN no_data_found THEN 
    dbms_output.put_line('no data found');    
END;


BEGIN 
   imprimeFacture(); 
END; 

将您的 output 行更改为类似

DBMS_OUTPUT.PUT_LINE(LPAD(rec_facture.d_qty, 3))         || -- d_qty : 3 characters
                     RPAD(' ', 21)                       || -- blanks
                     RPAD(rec_facture.p_description, 29) || -- p_description : 29 chars
                     LPAD(rec_facture.d_prix, 13)        || -- d_prix : 13 chars
                     RPAD(' ', 23)                       || -- blanks
                     LPAD(rec_facture.d_prixTotal, 13));    -- d_prixTotal : 13 chars

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM