2026-03-12 20:23:15
This commit is contained in:
244
idev/example_create_user_tables.sql
Normal file
244
idev/example_create_user_tables.sql
Normal file
@@ -0,0 +1,244 @@
|
||||
-- +----------------------------------------------------------------------------+
|
||||
-- | 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;
|
||||
Reference in New Issue
Block a user