Wednesday, 15 July 2026

Real Time Requirement to build GRN(Goods Receipt Note) Automation Report with Bursting feature in Oracle Fusion

BIP.Req.

15th July 2026

 Goods Receipt Automation Report

 

Purpose:

 

 

 

Write SQL query is designed for BIP report "to identify Purchase Order (PO) lines of type "Goods" that have been ordered but have not yet been received" (that means they are missing a Goods Receipt).

 

Why

In AP automation(through Email Bursting: GoodsAutoEmail Bursting Report), BIP report is typically used to drive a workflow or notification system. It identifies the exact requesters (and their email addresses) who need to go into the system and perform a "Receive" action so that Accounts Payable can complete the 3-way match and pay the supplier.

 

 

 

 

Domain

Oracle Fusion Finanicals

 

MODULE

Account Payable

 

 

Columns/Attributes Required

 

 

REQUESTER_ID

 

 

REQUISITION_NUMBER

 

 

PURCHASE_ORDER

 

 

ITEM_NUMBER

 

 

ITEM_DESCRIPTION

 

 

QUANTITY_ORDERED

 

 

NEED_BY_DATE

 

 

DELIVER_TO_LOCATION

 

 

SUPPLIER_NAME

 

 

SUPPLIER_SITE

 

 

REQUESTER

 

 

EMAIL_ADDRESS

 

 

PO Line Type

 

 

TRANSACTION_TYPE




Exists and NOT Exists in Oracle SQL

 

About the EXISTS Operator in Oracle SQL 

 

EXISTS

 

 

 

 

EXISTS

Both can be used in the WHERE clause

 

 

NOT EXISTS

 

 

 

Both operators are used to determine whether a record exists in the table.

 

 

 

EXISTS Returns TRUE/FALSE

 

 

 

If the Sub-query returns at least one row

TRUE

 

 

If the Sub-query returns 0 rows

FALSE

 

 

 

 

 

 

NOT EXISTS Returns TRUE/FALSE

 

 

 

If the Sub-query returns 0 rows

TRUE

 

 

If the Sub-query returns at least one row

FALSE

 

Note:

Ø                                        Oracle recommends the EXISTS operator than IN operator because it gives good 
     performance than IN operator

Ø                       Oracle recommends the NOT EXISTS operator than NOT IN operator because it gives good 
     performance than NOT IN operator

 

Examples

Q: Display the departments which are not empty?

 SELECT *
     FROM DEPT  D
     WHERE
EXISTS  (SELECT * FROM EMP WHERE DEPTNO = D.DEPTNO);-- SBQ should return TRUE

Result:-

DEPTNO

DNAME

LOC

 

 

20

RESEARCH

DALLAS

TRUE

1 ROW

30

SALES

CHICAGO

TRUE

1 ROW

10

ACCOUNTING

NEW YORK

TRUE

1 ROW

40

OPERATIONS

BOSTON

FALSE

0 ROW

 

Since Sub-Query(SBQ) returns FALSE instead of TRUE, the last record will not be fetched.

Using IN Operator

SELECT *
    FROM DEPT
    WHERE DEPTNO IN (SELECT DEPTNO FROM EMP);

Result:-

DEPTNO

DNAME

LOC

20

RESEARCH

DALLAS

30

SALES

CHICAGO

10

ACCOUNTING

NEW YORK

 

Q: Display departments that are empty?

SELECT *
     FROM DEPT  D
     WHERE NOT EXISTS  (SELECT * FROM EMP WHERE DEPTNO = D.DEPTNO); --SBQ returns 0 rows

Result:-

DEPTNO

DNAME

LOC

 

 

20

RESEARCH

DALLAS

FALSE

1 ROW

30

SALES

CHICAGO

FALSE

1 ROW

10

ACCOUNTING

NEW YORK

FALSE

1 ROW

40

OPERATIONS

BOSTON

TRUE

0 ROW

 

Q: Find all employees who belong to a valid department that exists in the system.

select *from emp e
            where exists(select 1 from dept d where e.deptno=d.deptno);

Result:-

EMPNO

ENAME

JOB

MGR

HIREDATE

SAL

COMM

DEPTNO

7369

SMITH

CLERK

7902

17-Dec-80

800

NULL

20

7499

ALLEN

SALESMAN

7698

20-Feb-81

1600

300

30

7521

WARD

SALESMAN

7698

22-Feb-81

1250

500

30

7566

JONES

MANAGER

7839

2-Apr-81

2975

NULL

20

7654

MARTIN

SALESMAN

7698

28-Sep-81

1250

1400

30

7698

BLAKE

MANAGER

7839

1-May-81

2850

NULL

30

7782

CLARK

MANAGER

7839

9-Jun-81

2450

NULL

10

7788

SCOTT

ANALYST

7566

9-Dec-82

3000

NULL

20

7839

KING

PRESIDENT

 

17-Nov-81

5000

NULL

10

7844

TURNER

SALESMAN

7698

8-Sep-81

1500

0

30

7876

ADAMS

CLERK

7788

12-Jan-83

1100

NULL

20

7900

JAMES

CLERK

7698

3-Dec-81

950

NULL

30

7902

FORD

ANALYST

7566

3-Dec-81

3000

NULL

20

7934

MILLER

CLERK

7782

23-Jan-82

1300

NULL

10

 

Q:Find all employees whose department number does not exist in the master department table.

select *from emp e
            where not exists(select 1 from dept d where e.deptno=d.deptno);

Result: No Data

 

Q: Find all departments that currently have zero employees assigned to them.

 

select *from dept d
            where not exists(select 1 from emp e where e.deptno=d.deptno);

 

DEPTNO

DNAME

LOC

40

OPERATIONS

BOSTON

 

Q: Explain the difference between IN and EXISTS Operators?

 

IN Operator

Vs

EXISTS Operator

Scans the inner subquery first, creates an in-memory list, and checks the outer table.

 

Scans the outer table first, and runs the subquery row-by-row until it finds a single match.

Requires a specific column (Ex: SELECT deptno).

 

Ignores the select list; typically uses a literal constant (Ex:SELECT 1).

Fails completely with NOT IN if the subquery returns even one NULL.

 

Works flawlessly with NOT EXISTS regardless of NULL values.

Small, static lists of literal values or small datasets.

 

Large datasets where the inner table contains many records.

 

Q: Explain the difference between EXISTS and NOT EXISTS?

EXISTS

Vs

NOT EXISTS

Semi-Join (Positive Check).

 

Anti-Join (Negative Check).

Subquery returns at least one row.

 

Subquery returns zero rows.

Stops scanning the instant it finds the first match (Early Exit).

 

Must scan until it finds a match, or scan the entire dataset to confirm zero matches exist.

Finding parents with children (Ex:-Departments with employees).

 

Finding orphans or missing links (Ex:-Departments with no employees).