OneCompiler

980

1625

CREATE OR REPLACE PACKAGE money_pkg IS
TYPE money_type IS RECORD (
rupees NUMBER,
paisa NUMBER
);

FUNCTION create_money(rupees NUMBER, paisa NUMBER) RETURN money_type;
FUNCTION add_money(m1 money_type, m2 money_type) RETURN money_type;
FUNCTION subtract_money(m1 money_type, m2 money_type) RETURN money_type;
FUNCTION display_money(m money_type) RETURN VARCHAR2;

END money_pkg;
/

CREATE OR REPLACE PACKAGE BODY money_pkg IS

FUNCTION create_money(rupees NUMBER, paisa NUMBER) RETURN money_type IS
    m money_type;
BEGIN
    m.rupees := rupees + TRUNC(paisa / 100);
    m.paisa := MOD(paisa, 100);
    RETURN m;
END create_money;

FUNCTION add_money(m1 money_type, m2 money_type) RETURN money_type IS
    m money_type;
    total_paisa NUMBER;
BEGIN
    total_paisa := m1.paisa + m2.paisa;
    m.rupees := m1.rupees + m2.rupees + TRUNC(total_paisa / 100);
    m.paisa := MOD(total_paisa, 100);
    RETURN m;
END add_money;

FUNCTION subtract_money(m1 money_type, m2 money_type) RETURN money_type IS
    m money_type;
    total_paisa1 NUMBER;
    total_paisa2 NUMBER;
    diff_paisa NUMBER;
BEGIN
    total_paisa1 := m1.rupees * 100 + m1.paisa;
    total_paisa2 := m2.rupees * 100 + m2.paisa;
    diff_paisa := total_paisa1 - total_paisa2;

    m.rupees := TRUNC(diff_paisa / 100);
    m.paisa := MOD(diff_paisa, 100);
    RETURN m;
END subtract_money;

FUNCTION display_money(m money_type) RETURN VARCHAR2 IS
BEGIN
    RETURN TO_CHAR(m.rupees) || ' Rupees and ' || TO_CHAR(m.paisa) || ' Paisa';
END display_money;

END money_pkg;