You are on page 1of 3

SET SERVEROUTPUT ON

BEGIN
dbms_output.put_line('===============================');
dbms_output.put_line(' PART 1 ');
dbms_output.put_line('===============================');
END;
/

-- Drop pre-existing object type.


DROP TYPE my_record;

-- Creates an object type.


CREATE OR REPLACE
TYPE my_record IS OBJECT
( my_name VARCHAR2(40)
, my_city VARCHAR2(30)
, my_state VARCHAR2(30));
/

DECLARE
-- Create a cursor.
CURSOR c IS
SELECT CASE WHEN c.middle_name IS NOT NULL
OR LENGTH(c.middle_name) > 0 THEN
c.last_name || ', ' || c.first_name || ' ' || c.middle_name
ELSE
c.last_name || ', ' || c.first_name
END AS full_name
, a.city
, a.state_province AS state
FROM contact c JOIN address a
ON c.contact_id = a.contact_id;

--Create a collection of MY_RECORD


lv_record MY_RECORD;
BEGIN
FOR i IN c LOOP
-- i = {full_name, city, state}
dbms_output.put_line(i.full_name);
/*
lv_record.my_name := i.last_name || ', ' || i.first_name;
IF LENGTH(i.middle_name) > 0 THEN
lv_record.my_name := lv_record.my_name || ' ' || i.middle_name;
END IF;
lv_record.my_city := i.city;
dbms_output.put_line(lv_record.my_name|| ', '||lv_record.my_city);
*/
END LOOP;
END;
/

BEGIN
dbms_output.put_line('===============================');
dbms_output.put_line(' PART 2 ');
dbms_output.put_line('===============================');
END;
/
-- Drop pre-existing object type.
DROP TYPE my_record;

-- Creates an object type.


CREATE OR REPLACE
TYPE my_record IS OBJECT
( my_name VARCHAR2(40)
, my_city VARCHAR2(30)
, my_state VARCHAR2(30));
/

DECLARE
-- Create a cursor.
CURSOR c IS
SELECT CASE WHEN c.middle_name IS NOT NULL
OR LENGTH(c.middle_name) > 0 THEN
c.last_name || ', ' || c.first_name || ' ' || c.middle_name
ELSE
c.last_name || ', ' || c.first_name
END AS full_name
, a.city
, a.state_province AS state
FROM contact c JOIN address a
ON c.contact_id = a.contact_id;

--Create a collection of MY_RECORD


lv_record MY_RECORD;
BEGIN
FOR i IN c LOOP
/* Two things:
|| 1. Constructs an instance of the object.
|| 2. Assigns the instance to the variable of the object type.
*/
lv_record := my_record( my_name => i.full_name
, my_city => i.city
, my_state => i.state );
dbms_output.put_line(lv_record.my_name);
END LOOP;
END;
/

BEGIN
dbms_output.put_line('===============================');
dbms_output.put_line(' PART 3 ');
dbms_output.put_line('===============================');
END;
/

-- Drop pre-existing object type.


DROP TYPE my_record;

-- Creates an object type.


CREATE OR REPLACE
TYPE my_record IS OBJECT
( my_name VARCHAR2(40)
, my_city VARCHAR2(30)
, my_state VARCHAR2(30));
/
-- Drop pre-existing table and re-create it
DROP TABLE my_records;
CREATE TABLE my_records
( my_name VARCHAR2(40)
, my_city VARCHAR2(30)
, my_state VARCHAR2(30));

DECLARE
-- Create a cursor.
CURSOR c IS
SELECT
CASE WHEN c.middle_name IS NOT NULL
OR LENGTH(c.middle_name) > 0 THEN
c.last_name || ', ' || c.first_name || ' ' || c.middle_name
ELSE
c.last_name || ', ' || c.first_name
END AS full_name
, a.city
, a.state_province AS state
FROM contact c JOIN address a
ON c.contact_id = a.contact_id;

--Create a collection of MY_RECORD


lv_record MY_RECORD;
BEGIN
FOR i IN c LOOP
/* Two things:
|| 1. Constructs an instance of the object.
|| 2. Assigns the instance to the variable of the object type.
*/
lv_record := my_record( my_name => i.full_name
, my_city => i.city
, my_state => i.state );
INSERT INTO my_records
( my_name
, my_city
, my_state )
VALUES
( lv_record.my_name
, lv_record.my_city
, lv_record.my_state );
END LOOP;
END;
/

SET PAGESIZE 999


COL my_name FORMAT A24
COL my_city FORMAT A14
COL my_state FORMAT A12
SELECT * FROM my_records;

You might also like