Skip to Main Content
  • Questions
  • list reports for a given dates range

Breadcrumb

Question and Answer

Connor McDonald

Thanks for the question, Resego.

Asked: July 18, 2018 - 9:33 am UTC

Last updated: July 26, 2018 - 2:50 am UTC

Version: PL/SQL developer 8

Viewed 1000+ times

You Asked

Hello there!!

i am new in PL SQL so i have been given a task to develop a procedure by joining two tables and the program should give a report of invoices within a given range of dates.I want my program to show reports as per my specification for a given dates range. my program is as below.

create table Esheet (SH_DATE date,
SHEET_NUMBER VARCHAR2 (5),
E.SHEETERS_PAY_CARD VARCHAR2 (16),
E.SHEETERS_BRANCH_NAME VARCHAR2(3),
E.SHEETERS_ACCOUNT_NUMBER VARCHAR2(11)
)

insert into Esheet values(12/12/2012,23756,975,12345678987)
insert into Esheet values(11/12/2012,23456,675,12045078087)
insert into Esheet values(10/12/2012,23352,475,10305675989)

CREATE OR REPLACE PACKAGE BODY APTRN_PKG AS

PROCEDURE L_APTRN(
BA_SOURCE VARCHAR2 DEFAULT NULL,
BA_START_DATE VARCHAR2 DEFAULT NULL,
BA_END_DATE VARCHAR2 DEFAULT NULL,
BA_SHHET_NUMBER VARCHAR2 DEFAULT NULL,
BA_SHEETERS_PAY_CARD VARCHAR2 DEFAULT NULL,
BA_SHEETERS_BRANCH_NAME VARCHAR2 DEFAULT NULL,
BA_SHEETERS_BANK_ACC VARCHAR2 DEFAULT NULL
)
BEGIN
SELECT
E.SH_DATE,
E.SHEET_NUMBER,
E.SHEETERS_PAY_CARD,
E.SHEETERS_BRANCH_NAME,
E.SHEETERS_ACCOUNT_NUMBER
FROM Esheet E
WHERE BA_START_DATE= &&E.SH_DATE AND
BA_END_DATE = &&E.SH_DATE


END APTRN;

and Connor said...

So...

- your create table statement doesn't work

SQL> create table Esheet (SH_DATE date,
  2  SHEET_NUMBER VARCHAR2 (5),
  3  E.SHEETERS_PAY_CARD VARCHAR2 (16),
  4  E.SHEETERS_BRANCH_NAME VARCHAR2(3),
  5  E.SHEETERS_ACCOUNT_NUMBER VARCHAR2(11)
  6  );
E.SHEETERS_PAY_CARD VARCHAR2 (16),
 *
ERROR at line 3:
ORA-01748: only simple column names allowed here


So we fix that, and then your inserts don't work

SQL> create table Esheet (SH_DATE date,
  2  SHEET_NUMBER VARCHAR2 (5),
  3  SHEETERS_PAY_CARD VARCHAR2 (16),
  4  SHEETERS_BRANCH_NAME VARCHAR2(3),
  5  SHEETERS_ACCOUNT_NUMBER VARCHAR2(11)
  6  );

Table created.

SQL> insert into Esheet values(12/12/2012,23756,975,12345678987);
insert into Esheet values(12/12/2012,23756,975,12345678987)
            *
ERROR at line 1:
ORA-00947: not enough values


SQL> insert into Esheet values(11/12/2012,23456,675,12045078087);
insert into Esheet values(11/12/2012,23456,675,12045078087)
            *
ERROR at line 1:
ORA-00947: not enough values


SQL> insert into Esheet values(10/12/2012,23352,475,10305675989);
insert into Esheet values(10/12/2012,23352,475,10305675989)
            *
ERROR at line 1:
ORA-00947: not enough values


I mean ... come on... surely you can give us something more than that :-(

Anyway, at a *guess*, you might be wanting to do something like this ?

create or replace 
procedure aptrn(
  ba_source varchar2 default null,
  ba_start_date varchar2 default null,
  ba_end_date varchar2 default null,
  ba_shhet_number varchar2 default null,
  ba_sheeters_pay_card varchar2 default null,
  ba_sheeters_branch_name varchar2 default null,
  ba_sheeters_bank_acc varchar2 default null
)
begin
for i in (
    select 
    e.sh_date,
    e.sheet_number,
    e.sheeters_pay_card,
    e.sheeters_branch_name,
    e.sheeters_account_number
    from esheet e
    where sh_date between ba_start_date and ba_end_date
) loop
  -- do something with each row, eg
   dbms_output.put_line(i.sheet_number);
end loop;
end; 



Is this answer out of date? If it is, please let us know via a Comment

More to Explore

PL/SQL demos

Check out more PL/SQL tutorials on our LiveSQL tool.

PL/SQL docs

PL/SQL reference manual from the Oracle documentation library