sql >> Database >  >> RDS >> Oracle

Hoe maak je een PDF-rapport met PL/SQL

Voordat ik dit voorbeeld schreef en gaf om een ​​PDF-rapport te maken met PL/SQL in Oracle, heb ik veel op Google onderzocht, maar ik vond geen goed voorbeeld. Dus ik dacht dat ik een voorbeeld moest geven om een ​​PDF-rapportbestand te genereren met behulp van PL/SQL. Om dit te doen eerst, moet u het databasepakket pdf_builder_pkg in uw schema installeren . U kunt dit pakket downloaden via de volgende link pdf_builder_pkg.

Nadat u het bovenstaande pakketscript in uw schema hebt uitgevoerd, moet u een databasedirectory-object maken voor de locatie van uw PDF-bestanden, zoals hieronder weergegeven:

CREATE OR REPLACE DIRECTORY 
MY_PDF_DIR AS 
'D:\abc\plsql_pdfs'
/

Wijzig het pad in de bovenstaande opdracht volgens uw Windows-mappad of als u Linux of Unix gebruikt, dan volgens hun locatie, zoals weergegeven in het onderstaande voorbeeld:

CREATE OR REPLACE DIRECTORY 
MY_PDF_DIR AS 
'/usr09/oracle/files/'
/

U kunt de mapnaam MY_PDF_DIR in elke naam wijzigen, omdat we deze mapnaam als parameter moeten doorgeven aan een save_pdf-procedure, die ik u in het onderstaande voorbeeld zal laten zien.

Nu hebt u het databasepakket al geïnstalleerd en het directory-object gemaakt. Nu kunt u de procedure schrijven om een PDF-rapport te maken met PL/SQL . Hieronder staat het voorbeeld PL/SQL-blok.

DECLARE
 CURSOR c_emp
 IS
 SELECT empno,
 ename,
 job,
 mgr,
 hiredate,
 sal,
 comm,
 deptno
 FROM employee;

v_hdr VARCHAR (1000);
 v_dtl VARCHAR (1000);
 v_rec NUMBER (10) := 0;
 v_sal NUMBER (10) := 0;
 v_comm NUMBER (10) := 0;
 BEGIN
 /* First line to initialize the package*/
 pdf_builder_pkg.init;
 /* Set the font to bold for heading*/
 pdf_builder_pkg.set_font ('helvetica', 'b');
 /* Write a line using pdf_builder_pkg.write procedure*/
 pdf_builder_pkg.write ('Employee Report');
 /* Set the font to normal */
 pdf_builder_pkg.set_font ('helvetica');
 pdf_builder_pkg.
 write ('Printed Date: ' || SYSDATE, -1, p_alignment => 'right');
 pdf_builder_pkg.
 write (
 '________________________________________________________________________________');
 pdf_builder_pkg.write (' ' || CHR (10) || CHR (13));
 /* Setting font courier for better alignment*/
 pdf_builder_pkg.set_font ('courier');
 v_hdr :=
 RPAD ('Emp No.', 10, ' ')
 || RPAD ('Emp Name', 12, ' ')
 || RPAD ('Job', 10, ' ')
 || RPAD ('Manager', 10, ' ')
 || RPAD ('Hire Date', 12, ' ')
 || RPAD ('Salary', 10, ' ')
 || RPAD ('Comm', 10, ' ');
 pdf_builder_pkg.write (v_hdr);
 pdf_builder_pkg.set_font ('helvetica');
 pdf_builder_pkg.
 write (
 '________________________________________________________________________________');
 pdf_builder_pkg.write (CHR (10) || CHR (13));
 pdf_builder_pkg.set_font ('courier');

FOR c IN c_emp
 LOOP
 v_dtl :=
 RPAD (c.empno, 10, ' ')
 || RPAD (c.ename, 12, ' ')
 || RPAD (c.job, 10, ' ')
 || RPAD (c.mgr, 10, ' ')
 || RPAD (c.hiredate, 12, ' ')
 || RPAD (c.sal, 10, ' ')
 || RPAD (c.comm, 10, ' ')
 || CHR (10)
 || CHR (13);
 pdf_builder_pkg.write (v_dtl);
 v_rec := v_rec + 1;
 v_sal := v_sal + c.sal;
 v_comm := v_comm + NVL (c.comm, 0);
 END LOOP;

pdf_builder_pkg.set_font ('helvetica');
 pdf_builder_pkg.
 write (
 '________________________________________________________________________________');
 pdf_builder_pkg.set_font ('courier');
 pdf_builder_pkg.write ('Records Count:' || v_rec);
 pdf_builder_pkg.write ('Total Salary:' || v_sal);
 pdf_builder_pkg.write ('Total Comm:' || v_comm);
 /* Saving the PDF file by passing directory name and file name */
 pdf_builder_pkg.save_pdf ('MY_PDF_DIR', 'emp_report.pdf');
 END;
 /

U kunt het PDF-bestand met de naam emp_report.pdf vinden op uw directorylocatie . Als u meer opdrachtreferentie wilt voor pakket pdf_builder_pkg, kunt u de volgende link bekijken om te downloaden. Het PDF-rapport ziet er als volgt uit:

U kunt dit hulpprogramma, dat door mij is gemaakt, ook controleren om een ​​PL/SQL-proceduresjabloon te genereren volgens uw SQL-instructie. Controleer a.u.b. Genereer PL/SQL-proceduresjabloon.

Zie ook:

  • Maak Excel-bestanden met PL/SQL
  • ZIP-bestanden maken met PL/SQL
  • Gegevens exporteren naar JSON-bestand in Oracle 11g met PL/SQL
  1. Hoe de volgende waarde van de SQL Server-reeks in Entity Framework te krijgen?

  2. Wat is het verschil tussen AS en IS in een opgeslagen procedure van Oracle?

  3. Waarom primaire sleutels belangrijk zijn en hoe u er een kiest?

  4. De beste manier om het aantal resultaten te krijgen voordat LIMIT werd toegepast