Bunker Hill Logo


Northwind Orders Form SQL Converted Into an Oracle Package

The following package was generated by Scriptoria for Oracle from the
Northwind Traders Orders and Order Subform Forms. The procedures
implement all database opreations required by the Forms.

CREATE OR REPLACE PACKAGE BODY NORTHWIND.PKG_NORTHWIND
AS

/* When a CustomerID is selected from the CustomerID ComboBox on the Orders form, the data used to populate the customer address fields are retrieved by passing the Customer ID to ORDERSCUSTOMERID_AUTOLKUP.
*/
PROCEDURE ORDERSCUSTOMERID_AUTOLKUP
(
crsrResultSet IN OUT refCursor,
P_CUSTOMERID VARCHAR2
)
AS
BEGIN

OPEN
crsrResultSet FOR
  SELECT ADDRESS,
  CITY,
  REGION,
  POSTALCODE,
  COUNTRY
  FROM NORTHWIND.CUSTOMERS
  WHERE (
  CUSTOMERID = P_CUSTOMERID
  )
;
EXCEPTION
  WHEN OTHERS THEN
    RAISE_APPLICATION_ERROR(-20010, SQLERRM);
END;

/* ORDERS_CUSTOMERID retrieves a result set for populating the CustomerID ComboBox.
*/
PROCEDURE ORDERS_CUSTOMERID
(
crsrResultSet IN OUT refCursor
)
AS
BEGIN
  OPEN crsrResultSet FOR
  SELECT DISTINCT CUSTOMERS.CUSTOMERID,
  CUSTOMERS.COMPANYNAME
  FROM NORTHWIND.CUSTOMERS
  ORDER BY CUSTOMERS.COMPANYNAME
;
EXCEPTION
  WHEN OTHERS THEN
    RAISE_APPLICATION_ERROR(-20010, SQLERRM);
END;

/* ORDERS_DELETE deletes a record from the Orders table for the supplied OrderID unless the record has been updated by another user during the time the current user has retrieved the record. This is termed 'Optimistic Concurrency' and requires the original values of all fields to be passed to the procedure. The p__ROWS_RETURNED signals the status of the operation to the calling program.
*/
PROCEDURE ORDERS_DELETE
(
p_OrderID NUMBER,
p_OrigCustomerID VARCHAR2,
p_OrigEmployeeID NUMBER,
p_OrigOrderDate DATE,
p_OrigRequiredDate DATE,
p_OrigShippedDate DATE,
p_OrigFreight NUMBER,
p_OrigShipName VARCHAR2,
p_OrigShipAddress VARCHAR2,
p_OrigShipCity VARCHAR2,
p_OrigShipRegion VARCHAR2,
p_OrigShipPostalCode VARCHAR2,
p_OrigShipCountry VARCHAR2,
p_OrigShipVia NUMBER,
p__ROWS_RETURNED OUT NUMBER
)
AS
BEGIN
  SELECT NVL(COUNT(*), 0)
 
INTO p__ROWS_RETURNED
 
FROM ORDERS
 
WHERE (ORDERID =   p_OrderID)
 
AND ((p_OrigCustomerID IS NULL AND CUSTOMERID IS NULL)
 
OR CUSTOMERID = p_OrigCustomerID
 
AND (p_OrigEmployeeID IS NULL AND EMPLOYEEID IS NULL)
 
OR EMPLOYEEID = p_OrigEmployeeID
 
AND (p_OrigOrderDate IS NULL AND ORDERDATE IS NULL)
 
OR ORDERDATE = p_OrigOrderDate
 
AND (p_OrigRequiredDate IS NULL AND REQUIREDDATE IS NULL)
 
OR REQUIREDDATE = p_OrigRequiredDate
 
AND (p_OrigShippedDate IS NULL AND SHIPPEDDATE IS NULL)
 
OR SHIPPEDDATE = p_OrigShippedDate
 
AND (p_OrigFreight IS NULL AND FREIGHT IS NULL)
 
OR FREIGHT = p_OrigFreight
 
AND (p_OrigShipName IS NULL AND SHIPNAME IS NULL)
 
OR SHIPNAME = p_OrigShipName
 
AND (p_OrigShipAddress IS NULL AND SHIPADDRESS IS NULL)
 
OR SHIPADDRESS = p_OrigShipAddress
 
AND (p_OrigShipCity IS NULL AND SHIPCITY IS NULL)
 
OR SHIPCITY = p_OrigShipCity
 
AND (p_OrigShipRegion IS NULL AND SHIPREGION IS NULL)
 
OR SHIPREGION = p_OrigShipRegion
 
AND (p_OrigShipPostalCode IS NULL AND SHIPPOSTALCODE IS NULL)
 
OR SHIPPOSTALCODE = p_OrigShipPostalCode
 
AND (p_OrigShipCountry IS NULL AND SHIPCOUNTRY IS NULL)
 
OR SHIPCOUNTRY = p_OrigShipCountry
 
AND (p_OrigShipVia IS NULL AND SHIPVIA IS NULL)
 
OR SHIPVIA = p_OrigShipVia);

  IF
p__ROWS_RETURNED = 1 THEN
    DELETE ORDERS
    WHERE ORDERID = p_OrderID;
    COMMIT;
  END IF;

EXCEPTION
  WHEN OTHERS THEN
    RAISE_APPLICATION_ERROR(-20010, SQLERRM);
END;

/* ORDERS_EMPLOYEEID retrieves a result set for populating the EmployeeID ComboBox.
*/
PROCEDURE ORDERS_EMPLOYEEID
(
crsrResultSet IN OUT refCursor
)
AS
BEGIN
  OPEN crsrResultSet FOR
  SELECT DISTINCT EMPLOYEES.EMPLOYEEID,
  LASTNAME || ', ' || FIRSTNAME AS SALESPERSON
  FROM NORTHWIND.EMPLOYEES
  ORDER BY LASTNAME || ', ' || FIRSTNAME
;
EXCEPTION
  WHEN OTHERS THEN
    RAISE_APPLICATION_ERROR(-20010, SQLERRM);
END;

/* ORDERS_INSERT inserts a record into the Orders table. The value of the generated sequence is returned to the caller.
*/
PROCEDURE ORDERS_INSERT
(
p_CustomerID VARCHAR2,
p_EmployeeID NUMBER,
p_OrderDate DATE,
p_RequiredDate DATE,
p_ShippedDate DATE,
p_ShipVia NUMBER,
p_Freight NUMBER,
p_ShipName VARCHAR2,
p_ShipAddress VARCHAR2,
p_ShipCity VARCHAR2,
p_ShipRegion VARCHAR2,
p_ShipPostalCode VARCHAR2,
p_ShipCountry VARCHAR2,
p_OrderID OUT NUMBER
)
AS
BEGIN
  INSERT INTO ORDERS
   
(CUSTOMERID, EMPLOYEEID, ORDERDATE, REQUIREDDATE
     
SHIPPEDDATE, SHIPVIA, FREIGHT, SHIPNAME, SHIPADDRESS, 
     SHIPCITY
, SHIPREGION, SHIPPOSTALCODE, SHIPCOUNTRY)
  VALUES
   
(p_CustomerID, p_EmployeeID, p_OrderDate, p_RequiredDate,
     p_ShippedDate
, p_ShipVia, p_Freight, p_ShipName, p_ShipAddress,
     p_ShipCity
, p_ShipRegion, p_ShipPostalCode, p_ShipCountry);
  COMMIT;
  SELECT ORDERS_SQ.CurrVal INTO p_OrderID FROM DUAL;
EXCEPTION
  WHEN OTHERS THEN
    RAISE_APPLICATION_ERROR(-20010, SQLERRM);
END;

/* ORDERS_QRY retrieves the result set to populate the Orders form as specified by the RecordSource property.
*/
PROCEDURE ORDERS_QRY
(
crsrResultSet IN OUT refCursor
)
AS
BEGIN
  OPEN crsrResultSet FOR
  SELECT DISTINCT ORDERS.ORDERID,
    ORDERS.CUSTOMERID,
    ORDERS.EMPLOYEEID,
    ORDERS.ORDERDATE,
    ORDERS.REQUIREDDATE,
    ORDERS.SHIPPEDDATE,
    ORDERS.SHIPVIA,
    ORDERS.FREIGHT,
    ORDERS.SHIPNAME,
    ORDERS.SHIPADDRESS,
    ORDERS.SHIPCITY,
    ORDERS.SHIPREGION,
    ORDERS.SHIPPOSTALCODE,
    ORDERS.SHIPCOUNTRY,
    CUSTOMERS.COMPANYNAME,
    CUSTOMERS.ADDRESS,
    CUSTOMERS.CITY,
    CUSTOMERS.REGION,
    CUSTOMERS.POSTALCODE,
    CUSTOMERS.COUNTRY
  FROM NORTHWIND.CUSTOMERS,
    NORTHWIND.ORDERS
  WHERE (CUSTOMERS.CUSTOMERID=ORDERS.CUSTOMERID)
;
EXCEPTION
  WHEN OTHERS THEN
    RAISE_APPLICATION_ERROR(-20010, SQLERRM);
END;

/* ORDERS_SUBFORM_DELETE deletes records from the Order Details table for the given OrderID and ProductID unless there is a concurrency violation.
*/
PROCEDURE ORDERS_SUBFORM_DELETE
(
p_OrderID NUMBER,
p_ProductID NUMBER,
p_OrigUnitPrice NUMBER,
p_OrigQuantity NUMBER,
p_OrigDiscount NUMBER,
p_OrigProductID NUMBER,
p__ROWS_RETURNED OUT NUMBER
)
AS
BEGIN
  SELECT NVL(COUNT(*), 0)
 
INTO p__ROWS_RETURNED
 
FROM ORDER_DETAILS
  WHERE (ORDERID = p_OrderID AND PRODUCTID = p_ProductID)
 
AND (UNITPRICE =  p_OrigUnitPrice
 
AND QUANTITY = p_OrigQuantity AND DISCOUNT = p_OrigDiscount
 
AND PRODUCTID = p_OrigProductID);

  IF
p__ROWS_RETURNED = 1 THEN
    DELETE ORDER_DETAILS
    WHERE ORDERID = p_OrderID AND PRODUCTID = p_ProductID;
    COMMIT;
  END IF;

EXCEPTION
  WHEN OTHERS THEN
    RAISE_APPLICATION_ERROR(-20010, SQLERRM);
END;

/* ORDERS_SUBFORM_INSERT inserts a record into the Order_Details table.
*/
PROCEDURE ORDERS_SUBFORM_INSERT
(
p_OrderID NUMBER,
p_ProductID NUMBER,
p_UnitPrice NUMBER,
p_Quantity NUMBER,
p_Discount NUMBER
)
AS
BEGIN
  INSERT INTO ORDER_DETAILS(ORDERID, PRODUCTID, UNITPRICE, QUANTITY, DISCOUNT)
  VALUES(p_OrderID, p_ProductID, p_UnitPrice, p_Quantity, p_Discount);
  COMMIT;
EXCEPTION
  WHEN OTHERS THEN
    RAISE_APPLICATION_ERROR(-20010, SQLERRM);
END;

/* ORDERS_SUBFORM_PRODUCTID retrieves a result set for populating the ProductID ComboBox on the Order Details Sub Form.
*/
PROCEDURE ORDERS_SUBFORM_PRODUCTID
(
crsrResultSet IN OUT refCursor
)
AS
BEGIN
  OPEN crsrResultSet FOR
  SELECT DISTINCT PRODUCTID,
    PRODUCTNAME,
    DISCONTINUED
  FROM NORTHWIND.PRODUCTS
  ORDER BY PRODUCTNAME
;
EXCEPTION
  WHEN OTHERS THEN
    RAISE_APPLICATION_ERROR(-20010, SQLERRM);
END;

/* ORDERS_SUBFORM_SUBFRM retrieves Order Details records for the given OrderID as specified by the Record Source of the Order Details Sub Form.
*/
PROCEDURE ORDERS_SUBFORM_SUBFRM
(
crsrResultSet IN OUT refCursor,
P_ORDERID NUMBER
)
AS
BEGIN
  OPEN crsrResultSet FOR
    SELECT DISTINCT ORDER_DETAILS.ORDERID,
      ORDER_DETAILS.PRODUCTID,
      PRODUCTS.PRODUCTNAME,
      ORDER_DETAILS.UNITPRICE,
      ORDER_DETAILS.QUANTITY,
      ORDER_DETAILS.DISCOUNT,
      TO_NUMBER(ORDER_DETAILS.UNITPRICE*QUANTITY*(1-DISCOUNT)/100)*100
     
AS EXTENDEDPRICE
    FROM NORTHWIND.PRODUCTS,
      NORTHWIND.ORDER_DETAILS
    WHERE (PRODUCTS.PRODUCTID=ORDER_DETAILS.PRODUCTID)
    AND ( (P_ORDERID = ORDERID) )
    ORDER BY ORDER_DETAILS.ORDERID
;
EXCEPTION
  WHEN OTHERS THEN
    RAISE_APPLICATION_ERROR(-20010, SQLERRM);
END;

/* ORDERS_SUBFORM_UPDATE updates the Order_Details record for the given OrderID and ProductID unless there is a concurrency violation.
*/
PROCEDURE ORDERS_SUBFORM_UPDATE
(
p_OrderID NUMBER,
p_ProductID NUMBER,
p_OrigUnitPrice NUMBER,
p_NewUnitPrice NUMBER,
p_OrigQuantity NUMBER,
p_NewQuantity NUMBER,
p_OrigDiscount NUMBER,
p_NewDiscount NUMBER,
p_OrigProductID NUMBER,
p_NewProductID NUMBER,
p__ROWS_RETURNED OUT NUMBER
)
AS
BEGIN
  SELECT NVL(COUNT(*), 0) INTO p__ROWS_RETURNED FROM ORDER_DETAILS
 
WHERE  (ORDERID = p_OrderID AND PRODUCTID = p_ProductID)
 
AND (UNITPRICE = p_OrigUnitPrice AND QUANTITY = p_OrigQuantity
 
AND DISCOUNT = p_OrigDiscount AND PRODUCTID = p_OrigProductID);
  IF p__ROWS_RETURNED = 1 THEN
    UPDATE ORDER_DETAILS
    SET UNITPRICE = p_NewUnitPrice, 
      
QUANTITY = p_NewQuantity,
     
DISCOUNT = p_NewDiscount,
      PRODUCTID
= p_NewProductID
    WHERE ORDERID = p_OrderID AND PRODUCTID = p_ProductID;
    COMMIT;
  END IF;
EXCEPTION
  WHEN OTHERS THEN
    RAISE_APPLICATION_ERROR(-20010, SQLERRM);
END ORDERS_SUBFORM_UPDATE;

/* ORDERS_UPDATE updates the Orders table for the given OrderID unless there is a concurrency violation.
*/
PROCEDURE ORDERS_UPDATE
(
p_OrderID NUMBER,
p_OrigCustomerID VARCHAR2,
p_NewCustomerID VARCHAR2,
p_OrigEmployeeID NUMBER,
p_NewEmployeeID NUMBER,
p_OrigOrderDate DATE,
p_NewOrderDate DATE,
p_OrigRequiredDate DATE,
p_NewRequiredDate DATE,
p_OrigShippedDate DATE,
p_NewShippedDate DATE,
p_OrigFreight NUMBER,
p_NewFreight NUMBER,
p_OrigShipName VARCHAR2,
p_NewShipName VARCHAR2,
p_OrigShipAddress VARCHAR2,
p_NewShipAddress VARCHAR2,
p_OrigShipCity VARCHAR2,
p_NewShipCity VARCHAR2,
p_OrigShipRegion VARCHAR2,
p_NewShipRegion VARCHAR2,
p_OrigShipPostalCode VARCHAR2,
p_NewShipPostalCode VARCHAR2,
p_OrigShipCountry VARCHAR2,
p_NewShipCountry VARCHAR2,
p_OrigShipVia NUMBER,
p_NewShipVia NUMBER,
p__ROWS_RETURNED OUT NUMBER
)
AS
BEGIN
  SELECT NVL(COUNT(*), 0)
 
INTO p__ROWS_RETURNED
 
FROM ORDERS
 
WHERE (ORDERID = p_OrderID)
 
AND ((p_OrigCustomerID IS NULL AND CUSTOMERID IS NULL)
 
OR CUSTOMERID = p_OrigCustomerID
 
AND (p_OrigEmployeeID IS NULL AND EMPLOYEEID IS NULL)
 
OR EMPLOYEEID = p_OrigEmployeeID AND (p_OrigOrderDate IS NULL
 
AND ORDERDATE IS NULL) OR ORDERDATE = p_OrigOrderDate
 
AND (p_OrigRequiredDate IS NULL AND REQUIREDDATE IS NULL)
 
OR REQUIREDDATE = p_OrigRequiredDate
 
AND (p_OrigShippedDate IS NULL AND SHIPPEDDATE IS NULL)
 
OR SHIPPEDDATE = p_OrigShippedDate
 
AND (p_OrigFreight IS NULL AND FREIGHT IS NULL)
 
OR FREIGHT = p_OrigFreight
 
AND (p_OrigShipName IS NULL AND SHIPNAME IS NULL)
 
OR SHIPNAME = p_OrigShipName
 
AND (p_OrigShipAddress IS NULL AND SHIPADDRESS IS NULL)
 
OR SHIPADDRESS = p_OrigShipAddress
 
AND (p_OrigShipCity IS NULL AND SHIPCITY IS NULL)
 
OR SHIPCITY = p_OrigShipCity
 
AND (p_OrigShipRegion IS NULL AND SHIPREGION IS NULL)
 
OR SHIPREGION = p_OrigShipRegion
 
AND (p_OrigShipPostalCode IS NULL AND SHIPPOSTALCODE IS NULL)
 
OR SHIPPOSTALCODE = p_OrigShipPostalCode
 
AND (p_OrigShipCountry IS NULL AND SHIPCOUNTRY IS NULL)
 
OR SHIPCOUNTRY = p_OrigShipCountry
 
AND (p_OrigShipVia IS NULL AND SHIPVIA IS NULL)
 
OR SHIPVIA = p_OrigShipVia);
  IF p__ROWS_RETURNED = 1 THEN
    UPDATE ORDERS
    SET
      CUSTOMERID
= p_NewCustomerID,
      EMPLOYEEID
= p_NewEmployeeID,
      ORDERDATE
= p_NewOrderDate,
      REQUIREDDATE
= p_NewRequiredDate,
      SHIPPEDDATE
= p_NewShippedDate,
      FREIGHT
= p_NewFreight,
      SHIPNAME
= p_NewShipName,
      SHIPADDRESS
= p_NewShipAddress,
      SHIPCITY
= p_NewShipCity,
      SHIPREGION
= p_NewShipRegion,
      SHIPPOSTALCODE
= p_NewShipPostalCode,
      SHIPCOUNTRY
= p_NewShipCountry, SHIPVIA = p_NewShipVia
    WHERE ORDERID = p_OrderID;
    COMMIT;
  END IF;
EXCEPTION
  WHEN OTHERS THEN
    RAISE_APPLICATION_ERROR(-20010, SQLERRM);
END ORDERS_UPDATE;
END PKG_NORTHWIND;


©2008 Bunker Hill Corporation.  All rights reserved. MS Access / MS SQL Server / ASP.Net, Oracle, and DB2 are trademarks of Microsoft, Oracle, and IBM respectively.

Bunker Hill provides MS Access to MS SQL Server/Oracle/DB2/ASP.Net conversion tools and services

 (877) 356-9191

  Home ]Solutions ] Tools ]Demos ]Sales/Support ]Company ]