PL SQL Data Types Oracle PLSQL Tutorial

SQL>
SQL> CREATE Or Replace TYPE ProductType AS OBJECT (
  2    id          NUMBER,
  3    name        VARCHAR2(15),
  4    description VARCHAR2(22),
  5    price       NUMBER(5, 2),
  6    days_valid  NUMBER
  7  )
  8  /
Type created.
SQL>
SQL> CREATE TABLE object_products OF ProductType
  2  /
Table created.
SQL>
SQL> INSERT INTO object_products (
  2    id, name, description, price, days_valid
  3  ) VALUES (
  4    1, 'AAA', 'BBB', 2.99, 5
  5  );
1 row created.
SQL>
SQL> select * from object_products;
 ID NAME            DESCRIPTION                 PRICE DAYS_VALID
--- --------------- ---------------------- ---------- ----------
  1 AAA             BBB                          2.99          5
SQL>
SQL> CREATE OR REPLACE PACKAGE product_package AS
  2    TYPE ref_cursor_typ IS REF CURSOR;
  3    FUNCTION get_products RETURN ref_cursor_typ;
  4    PROCEDURE insert_product (
  5      p_id          IN object_products.id%TYPE,
  6      p_name        IN object_products.name%TYPE,
  7      p_description IN object_products.description%TYPE,
  8      p_price       IN object_products.price%TYPE,
  9      p_days_valid  IN object_products.days_valid%TYPE
 10    );
 11  END product_package;
 12  /
Package created.
SQL>
SQL> CREATE OR REPLACE PACKAGE BODY product_package AS
  2    FUNCTION get_products
  3    RETURN ref_cursor_typ IS
  4      products_ref_cursor ref_cursor_typ;
  5    BEGIN
  6      OPEN products_ref_cursor FOR
  7        SELECT VALUE(op)
  8        FROM object_products op;
  9      RETURN products_ref_cursor;
 10    END get_products;
 11
 12    PROCEDURE insert_product (
 13      p_id          IN object_products.id%TYPE,
 14      p_name        IN object_products.name%TYPE,
 15      p_description IN object_products.description%TYPE,
 16      p_price       IN object_products.price%TYPE,
 17      p_days_valid  IN object_products.days_valid%TYPE
 18    ) AS
 19      product ProductType :=
 20        ProductType(
 21          p_id, p_name, p_description, p_price, p_days_valid
 22        );
 23    BEGIN
 24      INSERT INTO object_products VALUES (product);
 25      COMMIT;
 26    EXCEPTION
 27      WHEN OTHERS THEN
 28        ROLLBACK;
 29    END insert_product;
 30  END product_package;
 31  /
Package body created.
SQL>
SQL> CALL product_package.insert_product(101, 'AAA', 'AAA and AAA', 1.50, 20);
Call completed.
SQL>
SQL> SELECT product_package.get_products
  2  FROM dual;
GET_PRODUCTS
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
VALUE(OP)(ID, NAME, DESCRIPTION, PRICE, DAYS_VALID)
----------------------------------------------------
PRODUCTTYPE(1, 'AAA', 'BBB', 2.99, 5)
PRODUCTTYPE(101, 'AAA', 'AAA and AAA', 1.5, 20)
SQL>
SQL> select * from object_products;
 ID NAME            DESCRIPTION                 PRICE DAYS_VALID
--- --------------- ---------------------- ---------- ----------
  1 AAA             BBB                          2.99          5
### AAA             AAA and AAA                   1.5         20
SQL>
SQL> drop table object_products;
Table dropped.
SQL>