PACKAGE PACKAGECHEM AS
1...)
CREATE OR REPLACE PROCEDURE CHEM1
(
P_CHEMICALNAME VARCHAR2
)
IS
V_TOT CHEM_TAB;
V_TOTAL NUMBER;
CURSOR CHEMICAL IS SELECT * FROM TABLE(SELECT TOTALCOST FROM CHEM WHERE
CHEMICALNAME=P_CHEMICALNAME);
BEGIN
V_TOTAL :=0;
OPEN CHEMICAL;
LOOP
FETCH CHEMICAL BULK COLLECT INTO V_TOT LIMIT 100;
EXIT WHEN CHEMICAL%NOTFOUND;
END LOOP;
CLOSE CHEMICAL;
--OPEN CHEMICAL;
--FETCH CHEMICAL INTO V_TOT;
FOR I IN 1..V_TOT.COUNT
LOOP
V_TOTAL :=V_TOTAL +(V_TOT(I).QTY *V_TOT(I).PRICE);
END LOOP;
CLOSE CHEMICAL ;
DBMS_OUTPUT.PUT_LINE('V_TOTAL' ||CHR(9)||V_TOTAL );
END CHEM1;
-----------------------------------------------------------------------------------
-------------------------------------------------------------------
-----------------------------------------
GIVE INPUT NAME :- MANNITOL
-----------------------------------------------------------------------------------
----------------------------------------------
3..)CREATE OR REPLACE TYPE TOTAL_COST AS OBJECT
(
QTY NUMBER,
PRICE NUMBER
);
-----------------------------------------------------------------------------------
--------------------------------------
DECLARE
TYPE chem_tab iS TABLE OF TOTAL_COST INDEX BY BINARY_INTEGER;
BEGIN
END;
-----------------------------------------------------------------------------------
--------------------------------------
CREATE TABLE CHEM
(
CHEMICALID VARCHAR2(20),
CHEMICALNAME VARCHAR2(30),
TOTALCOST chem_tab
);
-----------------------------------------------------------------------------------
------------------------------------
INSERT INTO CHEM
VALUES('CH1','ABC',CHEM_TAB(TOTAL_COST(10,20),TOTAL_COST(20,20),TOTAL_COST(15,20)))
;
INSERT INTO CHEM
VALUES('CH2','YYZ',CHEM_TAB(TOTAL_COST(10,20),TOTAL_COST(20,20),TOTAL_COST(15,20)))
;
-----------------------------------------------------------------------------------
----------------------------------
CREATE OR REPLACE PROCEDURE CHEM1
(
P_CHEMICALNAME VARCHAR2
)
IS
V_TOT CHEM_TAB;
V_TOTAL NUMBER;
CURSOR CHEMICAL IS SELECT * FROM TABLE(SELECT TOTALCOST FROM CHEM WHERE
CHEMICALNAME=P_CHEMICALNAME);
BEGIN
V_TOTAL :=0;
--OPEN CHEMICAL;
-- LOOP
--FETCH CHEMICAL BULK COLLECT INTO V_TOT LIMIT 100;
-- EXIT WHEN CHEMICAL%NOTFOUND;
--END LOOP;
--CLOSE CHEMICAL;
--OPEN CHEMICAL;
--FETCH CHEMICAL INTO V_TOT;
FOR I IN 1..V_TOT.COUNT
LOOP
V_TOTAL :=V_TOTAL +(V_TOT(I).QTY *V_TOT(I).PRICE);
END LOOP;
CLOSE CHEMICAL ;
DBMS_OUTPUT.PUT_LINE('V_TOTAL' ||CHR(9)||V_TOTAL );
END CHEM1;
-----------------------------------------------------------------------------------
----------
--error
DECLARE
V_CHEMICALNAME VARCHAR2(30);
BEGIN
V_CHEMICALNAME:='&NAME';
CHEM1(V_CHEMICALNAME);
END;
END PACKAGECHEM;