Using TYPE & FUNCTION then Showing Data set

 


-- Create object type

create or replace TYPE TYP_SIMPLE_ORDER AS OBJECT (

    ANIMAL_ID       NUMBER,
    SUPPLIER_ID    NUMBER,
    ANIMAL_TYPE   VARCHAR2(20),
    BUYING_PRICE  NUMBER,
    STATUS             VARCHAR2(20)
);

-- Create table type

CREATE TYPE MY_SIMPLE_ORDER_TABLE AS 
                    TABLE OF TYP_SIMPLE_ORDER;

-- Create FUNCTION 

CREATE OR REPLACE FUNCTION SIMPLIFIED_ORDERS (

    P_SUPPLIER_ID       NUMBER,
    P_ANIMAL_TYPE      VARCHAR2 DEFAULT NULL

) RETURN MY_SIMPLE_ORDER_TABLE PIPELINED

IS
BEGIN

    FOR X IN (

        SELECT ANIMAL_ID, SUPPLIER_ID, ANIMAL_TYPE, BUYING_PRICE, STATUS

        FROM ANIMALS

        WHERE SUPPLIER_ID = P_SUPPLIER_ID

          AND (P_ANIMAL_TYPE IS NULL OR ANIMAL_TYPE = P_ANIMAL_TYPE)

    )

    LOOP

        IF X.STATUS IN ('I', 'R') THEN

            PIPE ROW(TYP_SIMPLE_ORDER(

                X.ANIMAL_ID,

                X.SUPPLIER_ID,

                X.ANIMAL_TYPE,

                X.BUYING_PRICE,

                CASE 

                    WHEN X.STATUS = 'I' THEN 'In Stock'

                    WHEN X.STATUS = 'R' THEN 'Returned'

                    ELSE NULL

                END

            ));

        END IF;

    END LOOP;

    RETURN;

END;


--- Calling Function

SELECT * 
FROM TABLE(SIMPLIFIED_ORDERS(P_SUPPLIER_ID => 105,
                                                       P_ANIMAL_TYPE => 'BULL'));

Result:


SELECT * 
FROM TABLE(SIMPLIFIED_ORDERS(P_SUPPLIER_ID => 105 ));

Result:

ANIMAL_IDSUPPLIER_IDANIMAL_TYPEBUYING_PRICESTATUS
1051105GOAT23000In Stock
1052105COW50000In Stock
1053105BULL45000In Stock
1054105COW500000In Stock
1035105BULL20000Returned
1037105SHEEP19000In Stock
1038105BULL25000In Stock
1039105GOAT13000Returned
8 rows returned in 0.01 seconds        Download

Post a Comment

Previous Post Next Post