1.12k likes | 1.39k Views
Data Structures. An Oracle8 database can contain multiple data structures. Table Stores data View Subset of data from one or more tables Sequence Generates primary key values Index Improves the performance of some queries Define the structures in the database design. Creating Tables: Syntax.
E N D
Data Structures • An Oracle8 database can contain multiple data structures. • Table Stores data • View Subset of data from one or more tables • Sequence Generates primary key values • Index Improves the performance of some queries • Define the structures in the database design.
Creating Tables: Syntax CREATE TABLE [schema.]table (column datetype [DEFAULT expr] [column_constraint], ... [table_constraint]); You must have specific privileges: • CREATE TABLE • A storage area
Referencing Another User's Tables • Constraints must reference tables in the same database. • Tables belonging to other users are not in the user's schema. • You should use the owner's name as a prefix to the table.
Naming Rules • Must begin with a letter • Can be 1-30 characters long • Must contain only A-Z, a-z, 0-9. • Must not duplicate the name of another object owned by the same user • Must not be an Oracle8 Server reserved word
Datatypes Datatype Description VARCHAR2(size) Variable length character values CHAR(size) Fixed length character values NUMBE Floating point numbers NUMBER(p,p) Number values DATE Date and time values LONG Variable length character values up to 2 GB RAW and LONG RAW Variable length character for binary data
Constraints • Enforce rules at the table level. • Prevent the deletion of a table if there are dependencies. • The following constraint types are valid in Oracle8: • NOT NULL • UNIQUE • PRIMARY KEY • FOREIGN KEY • CHECK
Constraint: Syntax • Column-constraint level column [CONSTRAINT constraint_name] constraint_type, • Table-constraint level column,... [CONSTRAINT constraint_name] constraint_type (column, ...),
The NOT NULL Constraint • Ensures that null values are not permitted for the column • Is defined at the column-constraint level Example CREATE TABLE friend... phone VARCHAR2(15) NOT NULL,... last name VARCHAR2(25) CONSTRAINT friend_last_name_nn NOT NULL,...
The UNIQUE Constraint • Designates a column or combination of columns so that no two rows in the table can have the same value for this key • Allows null values if the UNIQUE key is based an a single column • Is defined at either the table or column constraint level ... phone VARCHAR2(10) CONSTRAINT s_emp_phone_uk UNIQUE,...
The PRIMARY KEY Constraint • Creates a primary key for the table; only one primary key Is allowed for each table • Does not allow null values in any part of the primary key • Is defined at either the table or column constraint level ... id NUMBER(7) CONSTRAINT s_emp_id_pk PRIMARY KEY,...
The FOREIGN KEY Constraint • Designates a column or combination of columns as a foreign key • Establishes a relationship between the primary or unique key in the same table or between tables • Is defined at either the table or column constraint level • Must match an existing value in the parent table or be NULL ... dept_id NUMBER(7) CONSTRAINT s_emp_dept_id_fk REFERENCES s_dept(id),...
FOREIGN KEY Constraint Keywords • FOREIGN KEY • Defines the column in the child table • REFERENCES • Identifies the table and column in the parent table • ON DELETE CASCADE • Allows deletion in the parent table and deletion of the dependent rows in the child table
Create Table: Example SQL> CREATE TABLE s_dept 2 (id NUMBER(7) 3 CONSTRAINT s_dept_id_pk PRIMARY KEY, 4 name VARCHAR2(25) 5 CONSTRAINT s_dept_name_nn NOT NULL, 6 region_id NUMBER(7) 7 CONSTRAINT s_dept_region_id_fk REFERENCES 8 s_region (id), 9 CONSTRAINT s_dept_name_region_id_uk UNIQUE 10 (name, region_jd));
Create Table: Example SQL> CREATE TABLE s_emp 2 (id NUMBER(7) 3 CONSTRAINT s_emp_id_pk PRIMARY KEY, 4 last_name VARCHAR2(25) 5 CONSTRAINT s_emp_last-name-nn NOT NULL, 6 first_name VARCHAR2(25), 7 userid VARCHAR2(8) 8 CONSTRAINT s_emp_userid_nn NOT HULL 9 CONSTRAINT s_emp_userid_uk UNIQUE, 10 start_date DATE DEFAULT SYSDATE, 11 comments VARCHAR2(25), 12 manager_id NUMBER(7), 13 title VARCHAR2(25), 14 dept_id NUMBER(7) 15 CONSTRAINT s_emp_dept_id_fk REFERENCES 16 s_dept (id), 17 salary NUMBER(11,2), 18 commission_pct NUMBER(4,2) 19 CONSTRAINT s_emp_commission_pct_ck CHECK 20 (commission_pct IN(10,12.5,15,17.5,20)));
Creating a Table by Using a Subquery: Syntax • Create a table and insert rows by combining the CREATE TABLE command and AS subquery option. CREATE TABLE table [column(, column...)] AS subquery; • Match number of specified columns to number of subquery columns. • Define columns with column names, default values, and integrity constraints only.
Creating a Table by Using a Subquery: Example • Create a table containing all employees in department number 41 in the S_EMP table. CREATE TABLE emp_41 AS SELECT id, last_name, userid, start_date FROM s_emp WHERE dept_id = 41;
Confirming Table Creation • Confirm the existence of a database table along with its column names by using the SQL*Plus DESCRIBE command. SQL> DESCRIBE s_emp Name Null? Type ------------------------- -------- -------- ID NOT NULL NUMBER(7) LAST_NAME NOT NULL VARCHAR2(25) FIRST_NAME VARCHAR2(25) USERID NOT NULL VARCHAR2(8) START_DATE DATE
Data Dictionary • Describe the data dictionary views a user may access. • Query data from the data dictionary.
Tables Within the Oracle8 Database • User tables • Collection of tables created and maintained by the user • Contain user Information • Data dictionary • Collection of tables created and maintained by the Oracle8 Server • Contain database Information
Data Dictionary Description • Created when a database is created • Updated and maintained by the OracIe8 Server • Query data dictionary views • Information stored in the data dictionary • Names of Oracle8 Server users • Privileges granted to users • Database object names • Table constraints
Querying the Data Dictionary • Four classes of views (prefixes) • USER Objects owned by user • ALL Objects user has access rights • DBA All database objects • V$ Server performance • Other views • DICTIONARY • TABLE_PRIVILEGES • IND
Querying the Data Dictionary: Examples • List all data dictionary views accessible to the user. SQL> SELECT * 2 FROM DICTIONARY; • Display the structure of the USER-OBJECTS view. SQL> DESCRIBE user_objects • Display all the names of tables that you own. SQL> SELECT object_name 2 FROM user_objects 3 WHERE object_type = 'TABLE';
Querying the Data Dictionary: Examples • View the types of objects owned by the user by using the DISTINCT keyword. SQL> SELECT DISTINCT object_type 2 FROM user_objects; • Search for data dictionary tables on specific topics in the COMMENTS column of the DICTIONARY table. SQL> SELECT * 2 FROM dictionary 3 WHERE LOWER(comments) LIKE '%grant%';
Viewing Constraints • Query the USER_CONSTRAINT table to view all constraint definitions and names. Example • Verity the constraints on the S-EMP table. SQL> SELECT constraint_name, constraint_type, 2 search_condition, r_constraint_name 3 FROM user_constraints 4 WHERE table_name = 'S_EMP';
Viewing the Columns Associated with Constraints • View the columns associated with the constraint names In the USER_CONS_COLUMNS view. • This view is especially useful if your constraints use the system-assigned names. SQL> SELECT constraint_name, column_name 2 FROM user_cons_columns 3 WHERE table_name = 'S_EMP';
Insert, Update, Delete • Insert new rows into a table. • Update existing rows in a table. • Delete rows from a table.
Data Manipulation and Transaction Control Commands Command Description INSERT Adds a new row to the table. UPDATE Modifies existing rows in the table. DELETE Removes existing rows from the table. COMMIT Makes all pending changes permanent. SAVEPOINT Allows a rollback to that savepoint marker. ROLLBACK Discards all pending data changes.
Inserting New Rows into a Table: Syntax • Add new rows to a table by using the INSERT command. INSERT INTO table [(column [, column...])] VALUES (value [, value... ]); • Only one row is inserted at a time with this syntax.
Inserting New Rows: Example • Insert a new row containing values for each column. • Optionally list the columns in the INSERT clause. SQL> INSERT INTO s_dept 2 VALUES (11, 'Finance', 2); 1 row created. • List values in the default order of the columns in the table. • Enclose character and date values within single quotation marks.
Inserting New Rows with Null Values Implicit Method • Omit the column from the column list. SQL> INSERT INTO s_dept (id, name) 2 VALUES (12, 'Finance'); 1 row created. Explicit Method • Specify the NULL keyword or the empty String(") in the VALUES list. SQL> INSERT INTO s_dept 2 VALUES (13, 'Administration', NULL); 1 row created.
Inserting Special Values • The USER function records the current user name. • The SYSDATE function records the current date andtime. SQL> INSERT INTO s_emp (id, first_name, 2 last_name, userid, salary, start_date) 3 VALUES (26, 'Donna', 4 'Smith', USER, NULL, SYSDATE); 1 row created.
Confirming Additions • Verify that the row was added to the table. SQL> SELECT id, last_name, first_name, 2 userid, start_date, salary 3 FROM s_emp 4 WHERE id = 26; ID LAST_NAME FIRST_NAME USERID START_DAT -- --------- ---------- -------- --------- SALARY ------ 26 Smith Donna SFCL26 01-JAN-96
Inserting Specific Date and Time Values • TO-DATE function • Override the default settings to Insert a specific date and time value. SQL> INSERT INTO s_emp (id, first_name, 2 last_name, userid, salary, start_date) 3 VALUES (26, 'Donna', 4 'Smith', USER, NULL, 5 TO_DATE('01-JAN-96 08:00', 6 'DD-MON-YY HH:MI')); 1 row created.
Inserting Values by Using Substitution Variables • Create an interactive script by using SQL*Plus substitution parameters. SQL> INSERT INTO s_dept (id, name, 2 region_id) 3 VALUES (&department_id, '&department_name', 4 ®ion_id); Enter value for department_id: 61 Enter value for department_name: Accounting Enter value for region_id: 2 1 row created.
Creating a Script with Customized Prompts SQL*Plus ACCEPT command stores the value into a variable. SQL*Plus PROMPT command allows you display your customized text. ACCEPT department_id PROMPT ’Please enter the department number:, ACCEPT department_name PROMPT ’Please enter the department name:, ACCEPT region_id PROMPT 'Please enter the region number:, INSERT INTO s_dept (id, name, region_id) VALUES (&department_id, ’&department_name,, ®ion_id);
Copying Rows from Another Table • Write your INSERT command with a subquery. SQL> INSERT INTO history(id, last_name, salary, 2 title, start_date) 3 SELECT id, last_name, salary, 4 title, start_date 5 FROM s_emp 6 WHERE start_date < '01-JAN-94'; 10 rows created. • Do not use the VALUES clause. • Match the number of columns in the INSERT clause to those in the subquery.
Updating Rows in a Table: Syntax • Modify existing rows with the UPDATE command. UPDATE table SET column = value [, column = value] [WHERE condition];
Updating Rows: Examples • Transfer employee number 2to department 10. SQL> UPDATE s_emp 2 SET dept_id = 10 3 WHERE id = 2; 1 row updated. • Transfer employee number 1 to department 32 and change the salary to 2550. SQL> UPDATE s_emp 2 SET dept_id = 32, salary = 2550 3 WHERE id = 1; 1 row updated.
Updating All Rows in the Table • All rows in the table will be updated if you do not add the WHERE clause. SQL> UPDATE s_emp 2 SET commission_pct = 10; 25 rows updated.
Updating Rows:Integrity Constraint Error SQL> UPDATE s_emp 2 SET dept_id = 60 3 WHERE dept_id = 10; update s_emp ERROR at line 1: ORA-02291: integrity constraint (USR.S-EMP-DEPT-ID-FK) violated - parent key not found • An error occurs because department number 60 does not exist in the department table.
Deleting Rows from a Table: Syntax • Remove existing rows by using the DELETE command. DELETE [FROM] table [WHERE condition]; • Remove all information about employees who started after January 1, 1996. SQL> DELETE FROM s_emp 2 WHERE start_date > 3 TO_DATE('01.01.1996', 'DD.MM.YYYY'); 1 row deleted.
Deleting Rows: Example • Delete all the rows in the table by excluding the WHERE clause. SQL> DELETE FROM test; 25,000 rows deleted. • Confirm the deletions. SQL> SELECT * 2 FROM test; no rows selected
Deleting Rows: Integrity Constraint Error • if you try to delete a row that contains a primary key used as a foreign key in another table, you will experience an integrity constraint error. SQL> DELETE FROM s_dept 2 WHERE region_id = 1; ERROR at line 1: ORA-02292: integrity constraint (USR.S_EMP_DEPT_ID_FK) violated - child record found
Database Transactions • Begin when the first executable SQL command is executed. • End with one of the following events: • COMMIT or ROLLBACK • DDL or DCL command executes (automatic commit) • Errors, exit, or system crash
Advantages of COMMIT and ROLLBACK • Ensure data consistency • Preview data changes before making changes permanent
Implicit Transaction Processing • An automatic commit occurs under the following circumstances: • A DDL command Is issued, such as CREATE. • A DCL command is issued, such as GRANT. • A normal exit from SQL*Plus, without explicitly issuing COMMIT or ROLLBACK • An automatic rollback occurs under an abnormal termination of SQL*Plus or a system failure.
State of the Data Before COMMIT or ROLLBACK • The current user can review the results of the DML operations by using the SELECT statement. • Other users cannot view the results of the DML statements by the current user. • The affected rows are locked; other users cannot change the data within the affected rows.
State of the Data After COMMIT • Data changes are written to the database. • The previous data is permanently lost. • All users can view the results. • Locks on the affected rows are released; those rows are available for other users to manipulate. • All savepoints are erased.
Committing Data: Example • Create a new Education department. SQL> INSERT INTO s_dept(id, name, region_id) 2 VALUES (54, 'Education', 1); 1 row created. • Add at least one employee. SQL> UPDATE s_emp 2 SET dept_id = 54 3 WHERE id = 2; 1 row updated. • Commit the changes. SQL> COMMIT ; Commit complete.