245 lines
5.6 KiB
SQL
245 lines
5.6 KiB
SQL
-- +----------------------------------------------------------------------------+
|
|
-- | Jeffrey M. Hunter |
|
|
-- | jhunter@idevelopment.info |
|
|
-- | www.idevelopment.info |
|
|
-- |----------------------------------------------------------------------------|
|
|
-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. |
|
|
-- |----------------------------------------------------------------------------|
|
|
-- | DATABASE : Oracle |
|
|
-- | FILE : example_create_user_tables.sql |
|
|
-- | CLASS : Examples |
|
|
-- | PURPOSE : Yet another SQL script that demonstrates how to sample tables |
|
|
-- | and a PL/SQL routine that populates those tables. |
|
|
-- | NOTE : As with any code, ensure to test this script in a development |
|
|
-- | environment before attempting to run it in production. |
|
|
-- +----------------------------------------------------------------------------+
|
|
|
|
/*
|
|
** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
*/
|
|
|
|
/*
|
|
|
|
CONNECT /
|
|
|
|
CREATE TABLESPACE users
|
|
DATAFILE '/u10/app/oradata/ORA901/users01.dbf' SIZE 10M
|
|
/
|
|
|
|
CREATE TABLESPACE idx
|
|
DATAFILE '/u09/app/oradata/ORA901/idx01.dbf' SIZE 10M
|
|
/
|
|
|
|
CREATE USER jhunter IDENTIFIED BY jhunter
|
|
DEFAULT TABLESPACE users
|
|
TEMPORARY TABLESPACE temp
|
|
/
|
|
|
|
GRANT dba, resource, connect TO jhunter
|
|
/
|
|
|
|
*/
|
|
|
|
/*
|
|
** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
*/
|
|
|
|
CONNECT jhunter/jhunter
|
|
|
|
/*
|
|
** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
*/
|
|
|
|
DROP TABLE user_names CASCADE CONSTRAINTS
|
|
/
|
|
|
|
CREATE TABLE user_names (
|
|
name_intr_no NUMBER(15)
|
|
, name VARCHAR2(30)
|
|
, age NUMBER(3)
|
|
, update_log_date DATE
|
|
)
|
|
TABLESPACE users
|
|
STORAGE (
|
|
INITIAL 64K
|
|
NEXT 64K
|
|
MINEXTENTS 1
|
|
MAXEXTENTS 100
|
|
PCTINCREASE 0
|
|
)
|
|
/
|
|
|
|
ALTER TABLE user_names
|
|
ADD CONSTRAINT user_names_pk PRIMARY KEY(name_intr_no)
|
|
USING INDEX
|
|
TABLESPACE idx
|
|
STORAGE (
|
|
INITIAL 28K
|
|
NEXT 28K
|
|
MINEXTENTS 1
|
|
MAXEXTENTS 100
|
|
PCTINCREASE 0
|
|
)
|
|
/
|
|
|
|
ALTER TABLE user_names
|
|
MODIFY ( name CONSTRAINT user_names_nn1 NOT NULL
|
|
, age CONSTRAINT user_names_nn2 NOT NULL
|
|
, update_log_date CONSTRAINT user_names_nn3 NOT NULL
|
|
)
|
|
/
|
|
|
|
/*
|
|
** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
*/
|
|
|
|
DROP TABLE user_names_phone
|
|
/
|
|
|
|
CREATE TABLE user_names_phone (
|
|
name_intr_no number(15)
|
|
, phone_number varchar2(12)
|
|
, country_code varchar2(15)
|
|
)
|
|
TABLESPACE users
|
|
STORAGE (
|
|
INITIAL 64K
|
|
NEXT 64K
|
|
MINEXTENTS 1
|
|
MAXEXTENTS 100
|
|
PCTINCREASE 0
|
|
)
|
|
/
|
|
|
|
ALTER TABLE user_names_phone
|
|
ADD CONSTRAINT user_names_phone_pk PRIMARY KEY(name_intr_no, phone_number)
|
|
USING INDEX
|
|
TABLESPACE idx
|
|
STORAGE (
|
|
INITIAL 28K
|
|
NEXT 28K
|
|
MINEXTENTS 1
|
|
MAXEXTENTS 100
|
|
PCTINCREASE 0
|
|
)
|
|
/
|
|
|
|
|
|
ALTER TABLE user_names_phone
|
|
MODIFY ( country_code CONSTRAINT user_names_phone_nn1 NOT NULL
|
|
)
|
|
/
|
|
|
|
ALTER TABLE user_names_phone
|
|
ADD CONSTRAINT user_names_phone_fk1 FOREIGN KEY (name_intr_no)
|
|
REFERENCES user_names(name_intr_no)
|
|
/
|
|
|
|
/*
|
|
** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
*/
|
|
|
|
DROP TABLE user_names_company
|
|
/
|
|
|
|
CREATE TABLE user_names_company (
|
|
name_intr_no number(15)
|
|
, company_code varchar2(15)
|
|
)
|
|
TABLESPACE users
|
|
STORAGE (
|
|
INITIAL 64K
|
|
NEXT 64K
|
|
MINEXTENTS 1
|
|
MAXEXTENTS 100
|
|
PCTINCREASE 0
|
|
)
|
|
/
|
|
|
|
/*
|
|
** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
*/
|
|
|
|
create or replace procedure insert_user_names (
|
|
num_records IN number)
|
|
|
|
IS
|
|
|
|
CURSOR csr1 IS
|
|
SELECT max(name_intr_no)
|
|
FROM user_names;
|
|
|
|
max_intr_no NUMBER;
|
|
|
|
BEGIN
|
|
|
|
/*
|
|
|| ENABLE DBMS_OUTPUT
|
|
*/
|
|
DBMS_OUTPUT.ENABLE;
|
|
|
|
/*
|
|
|| SET ROLLBACK SEGMENT TO THE LARGEST ONE: rbs2
|
|
*/
|
|
DECLARE
|
|
incomplete_transaction EXCEPTION;
|
|
pragma EXCEPTION_INIT (incomplete_transaction, -01453);
|
|
BEGIN
|
|
SET TRANSACTION USE ROLLBACK SEGMENT rbs2;
|
|
EXCEPTION
|
|
WHEN incomplete_transaction THEN
|
|
ROLLBACK;
|
|
DBMS_OUTPUT.PUT_LINE('Needed to rollback previous transaction');
|
|
SET TRANSACTION USE ROLLBACK SEGMENT rbs2;
|
|
END;
|
|
|
|
/*
|
|
|| INSERT DUMMY RECORDS INTO THE USER DEFINED
|
|
|| TABLE: user_names. THE FIRST PARAMETER TO THIS
|
|
|| FUNCTION WILL DETERMINE THE NUMBER OF RECORDS
|
|
|| TO INSERT.
|
|
*/
|
|
|
|
DECLARE
|
|
fail_rollback_segment EXCEPTION;
|
|
pragma EXCEPTION_INIT (fail_rollback_segment, -01562);
|
|
|
|
BEGIN
|
|
OPEN csr1;
|
|
FETCH csr1 INTO max_intr_no;
|
|
CLOSE csr1;
|
|
|
|
max_intr_no := NVL(max_intr_no,0) + 1;
|
|
|
|
FOR loop_index IN max_intr_no .. (max_intr_no + (num_records-1))
|
|
LOOP
|
|
|
|
INSERT INTO user_names
|
|
VALUES (loop_index, 'Oracle DBA', 30, SYSDATE);
|
|
|
|
INSERT INTO user_names_phone
|
|
VALUES (loop_index, '412-555-1234', 'USA');
|
|
|
|
INSERT INTO user_names_company
|
|
VALUES (loop_index, 'DBA Zone');
|
|
|
|
IF (MOD(loop_index, 100) = 0) THEN
|
|
COMMIT;
|
|
DBMS_OUTPUT.PUT_LINE('Commit point reached at: ' || loop_index || '.');
|
|
END IF;
|
|
|
|
END LOOP;
|
|
COMMIT;
|
|
DBMS_OUTPUT.NEW_LINE;
|
|
DBMS_OUTPUT.PUT_LINE('Successfully inserted ' || num_records ||
|
|
' records into table: user_names');
|
|
EXCEPTION
|
|
WHEN fail_rollback_segment THEN
|
|
ROLLBACK;
|
|
DBMS_OUTPUT.PUT_LINE('Fail to extent rollback segment: RBS2');
|
|
END;
|
|
|
|
END;
|
|
/
|
|
show errors;
|