Chapter 3: Table Creation and Management: Creating and Modifying Database Tables Jason C. H. Chen, Ph.D. Professor of MIS School of Business Administration Gonzaga University Spokane, WA 99258 chen@jepson.gonzaga.edu Dr. Chen, Oracle Database System (Oracle) 1 Objectives • Become acquainted with Structured Query Language (SQL) • Identify the table name and structure • Create a new table using the CREATE TABLE command • Use a subquery to create a new table • Add a column to an existing table • Modify the definition of a column in an existing table • Delete a column from an existing table • Mark a column as unused and then delete it at a later time • Rename a table • Truncate a table • Drop a table Dr. Chen, Oracle Database System (Oracle) 2 Database Objects and Queries • An Oracle database consists of multiple user accounts • Each user account owns database objects • • – Tables – Views – Stored programs, etc. Query: command to perform operation on database object Structured Query Language (SQL) – Industry standard query language for most of relational databases – Consists of about 30 commands Dr. Chen, Oracle Database System (Oracle) 3 Basic SQL Concepts and Commands SQL (Structured Query Language) is used to manipulate the database. There are two basic types of SQL commands: Data Definition Language (DDL) Data Manipulation Language (DML) DDL commands work with the structure of the objects (tables, indexes, views) in the database. DML commands work with the data in the database (i.e.,manipulate the data). Reserved words - SQL command words Dr. Chen, Oracle Database System (Oracle) 4 Security Granting Table Privileges • Security is the prevention of unauthorized access to the database. Within an organization, the database administrator determines the types of access various users need for the database. • Some users might be able to retrieve and update data in the database. Other users might be able to retrieve any data from the database but not make any changes to it. Still other users might be able to access only a portion of the database. Dr. Chen, Oracle Database System (Oracle) 5 Oracle11g User Accounts • User account - identified by a unique username and password • User schema - all of the objects that the user creates and stores in the database • Database objects – Also called schema objects – Objects in user schema • Object owner has privileges to perform all possible actions on an object Dr. Chen, Oracle Database System (Oracle) 6 A. Names and Properties Why need a name? Dr. Chen, Oracle Database System (Oracle) 7 Creating a Table CREATE TABLE tablename (fieldname1 data_type (size), fieldname2 data_type (size), …); Dr. Chen, Oracle Database System (Oracle) 8 Defining Oracle10g Database Tables • To create a table, you must specify: – – – – Table name Field names Field data types Field sizes Constraints restrictions on the data values that a field can store Dr. Chen, Oracle Database System (Oracle) 9 I. Names and Properties: Conventions Series of rules Oracle Corporation established for naming all database objects 1. From 1 to 30 characters 2. Only alphanumeric characters, and special characters ($ , _, #) 3. Must begin with a letter and can not contain blank spaces or hyphens 4. Must be unique and No reserved words are allowed Are the following names (for field) valid? Why? customer order customer-order #order Customer_# Customer# Dr. Chen, Oracle Database System (Oracle) 10 Oracle 11g Data Types • Data type – Specifies kind of data that column stores – Provides means for error checking – Enable DBMS to use storage space more efficiently by internally storing different types of data in different ways – Basic types • Character • Number • Date/time Dr. Chen, Oracle Database System (Oracle) 11 II. Data Types • Built-in – provided by the system • Library – built by the software vendor or a third party • User-defined – built by users Dr. Chen, Oracle Database System (Oracle) 12 Basic Built-In Data Types • Character – VARCHAR2 – CHAR • Numeric • • – NUMBER DATE OTHERS: – LOB, BLOB, LONG, RAW, LONG RAW Dr. Chen, Oracle Database System (Oracle) 13 Character Data Types • 1. VARCHAR2 – Stores variable-length character data up to a maximum of 4,000 characters – Values in different records can have a different number of characters – fieldname VARCHAR2(maximum_size) • (e.g.) emp_name VARCHAR2(20); • an instance: ‘Jason Chen’ Dr. Chen, Oracle Database System (Oracle) 14 Character Data Types (cont.) • 2. CHAR – Fixed-length character data (<= 2000 characters) – default is 1 if no field size is specified – Data values for different records all have the same number of characters – DBMS adds trailing blank spaces to the end of the entry to make the entry fill the maximum_size value – Data longer than maximum_size causes an error [optional] – fieldname CHAR[(maximum_size)] • pros: use data storage space more efficiently and processed faster • cons: causes inconsistent query results in other Oracle applications – e.g. s_class CHAR(2); ‘SR’ ‘JR’ ‘SO’ ‘FR’ ‘GR’ – State CHAR(2) DEFAULT ‘WA’; – student_gender CHAR; Dr. Chen, Oracle Database System (Oracle) 15 Character Subtypes Examples: VARCHAR2(5) ‘Smith’ or ‘Smi’ CHAR(5) ‘Smith’ or ‘Smi LONG ‘Smith...’ ’ Note that you do not need to specify a size for LONG. To include a single quote in a literal character string, use two in a row: ‘This is Herald’’s string.’ Dr. Chen, Oracle Database System (Oracle) 16 Question: Which query will possibly generate student information? s_Last VARCHAR2(15); s_Last CHAR(15); SELECT s_Last, s_First, s_Address FROM student WHERE s_Last = ‘Smith’; SELECT s_Last, s_First, s_Address FROM student WHERE s_Last = ‘Smith’; • What data type should be used if there is any chance that all column spaces will NOT be filled? VARCHAR2 • Answer: ______________ L Dr. Chen, Oracle Database System (Oracle) 17 • When use Query: SELECT s_last, s_first, ssn, telephone FROM student WHERE s_last = ‘Smith’; • Case is sensitive within the single quotation. • SQL Plus commands are NOT case sensitive, but Query within the single quotation are case sensitive. Dr. Chen, Oracle Database System (Oracle) 18 3. Number Data Types • Stores negative, positive, fixed, and floating point numbers between 10 -130 <= <=10 +126 precision up to 38 decimal places • General Syntax: fieldname NUMBER [([precision,] [scale])] • Integer: fieldname NUMBER(precision) • Fixed point: fieldname NUMBER[([precision],[scale])] • Floating point: fieldname NUMBER Dr. Chen, Oracle Database System (Oracle) 19 Number Data Types (examples) • a) Integer: Number (n) – e.g. s_id NUMBER(5) • 12345 • b) Fixed-point numbers – e.g. current_price NUMBER (5, 2); • 259.99 33.89 • c) Fixed-point numbers (cont.) – e.g. total_mileage NUMBER (5, 1); • 259.9 33.8 • d) Floating-point Number – with a variable number of decimal places – e.g. s_gpa NUMBER; • 3.89 2.7569 3.2 Dr. Chen, Oracle Database System (Oracle) 20 4. Date and Time Data Types • Date, time data subtypes – Store actual date and time values – DATE • Dates from December 31, 4712 BC to December 31, 4712 AD – Default format DD-MON-YY – Default time format HH:MI:SS A.M. – fieldname DATE – Sample declaration: • OrderDate DATE NOT NULL; – Use one of the following format masks: – – – Dr. Chen, Oracle Database System (Oracle) TO_DATE (‘ TO_DATE (‘ TO_DATE (‘ ’, ‘MM/DD/YY’) ‘, ‘DD-MON-YYYY’) ‘, ‘HH:MI AM’) 21 Table Design (continued) Table 3-2 Oracle 11g Datatypes Dr. Chen, Oracle Database System (Oracle) 22 Table Creation Figure 3-1 CREATE TABLE syntax Defining Columns • Column definition list must be enclosed in parentheses • Datatype must be specified for each column • Maximum of 1,000 columns Dr. Chen, Oracle Database System (Oracle) 23 Exercise: Create a new table of “acctmanager” based on the following information acctmanager Amid Amfirst Amlast AmeDate Amsal Amcomm Region VARCHAR2(4) VARCHAR2(12) VARCHAR2(12) DATE NUMBER(8,2) NUMBER(7,2) CHAR(2) CREATE TABLE acctmanager ( amid … Dr. Chen, Oracle Database System (Oracle) NOT NULL); GROUP WORK Complete the CREATE command manually! 24 Exercise: Create a new table of “acctmanager” based on the following information acctmanager Amid Amfirst Amlast AmeDate Amsal Amcomm Region VARCHAR2(4) VARCHAR2(12) VARCHAR2(12) DATE NUMBER(8,2) NUMBER(7,2) CHAR(2) CREATE TABLE acctmanager ( amid VARCHAR2(4) PRIMARY KEY, SELECT * amfirst VARCHAR2(12) NOT NULL, FROM acctmanager; amlast VARCHAR2(12) NOT NULL, amedate DATE DEFAULT SYSDATE, amsal NUMBER(8,2), amcomm NUMBER(7,2) DEFAULT 0, region CHAR(2) NOT NULL); Dr. Chen, Oracle Database System (Oracle) 25 Refresh the Database • 1. Create a new folder on c:\ as follows: c:\oradata\chapter3 • 2. Go to Blackboard and download data files from Oracle chapter3 and save under c:\oradata\chapter3\ • 3. Run the following script file – Start c:\oradata\chapter3\JLDB_Build_3.sql Dr. Chen, Oracle Database System (Oracle) 26 Exercise – Your Turn • Type the following commands: 1) SELECT TABLE_NAME FROM USER_TABLES; 2) DROP TABLE ACCTMANAGER CASCADE CONSTRAINTS; 3) DROP TABLE ACCTMANAGER2 CASCADE CONSTRAINTS; 4) SELECT TABLE_NAME FROM USER_TABLES; You now are able to create acctmanager table Dr. Chen, Oracle Database System (Oracle) 27 CREATE TABLE Command Example What is the difference between these two versions: Virtual Column/ (Derived/computed) Is this a good approach? Figure 3-2 The creation of the ACCTMANAGER table Dr. Chen, Oracle Database System (Oracle) 28 Viewing Table Structures: DESCRIBE • DESCRIBE displays the structure of a specified table Figure 3-4 The DESCRIBE command Dr. Chen, Oracle Database System (Oracle) 29 Table Creation through Subqueries • You can use subqueries to retrieve data from an existing table • Requires use of AS keyword • New column names can be assigned CREATE TABLE…AS Figure 3-8 CREATE TABLE … AS command syntax Dr. Chen, Oracle Database System (Oracle) 30 CREATE TABLE…AS Command Example (You need to apply this to #7 on p.94) Figure 3-7 Creating a table based on a subquery SELECT * FROM cust_mkt; DESC cust_mkt; Dr. Chen, Oracle Database System (Oracle) 31 Modifying Existing Tables • Accomplished through the ALTER TABLE command • Use an ADD clause to add a column • Use a MODIFY clause to change a column • Use a DROP COLUMN to drop a column – both “column” and its “data values” are deleted ALTER TABLE Command Syntax Figure 3-10 Arithmetic operations with NULL values Dr. Chen, Oracle Database System (Oracle) 32 ALTER TABLE…ADD Command Figure 3-12 The ALTER TABLE … ADD command Dr. Chen, Oracle Database System (Oracle) 33 ALTER TABLE…MODIFY Command Figure 3-18 The ALTER TABLE … MODIFY command to increase the column width Dr. Chen, Oracle Database System (Oracle) 34 Modification Guidelines • Column must be as wide as the data it already contains • If a NUMBER column already contains data, size cannot be decreased • Adding or changing default data does not affect existing data Dr. Chen, Oracle Database System (Oracle) 35 ALTER TABLE…SET UNUSED Command • Once marked for deletion, a column cannot be restored • Storage space is freed at a later time 36 Dr. Chen, Oracle Database System (Oracle) 36 ALTER TABLE…DROP UNUSED Command • Frees up storage space from columns previously marked as unused However, once a table is set “UNUSED” it can’t be DROPPED using the following (regular) command: ALTER TABLE tablename DROP COLUMN colname; Then, what command can drop the “UNUSED” columns? ALTER TABLE author DROP UNUSED COLUMNS; Dr. Chen, Oracle Database System (Oracle) Show: test_UNUSED.sql and test_UNUSED.docx 37 AUTHOR AuthorID LName VARCHAR2(4) VARCHAR2(10) FName VARCHAR2(10) SQL> SELECT * FROM author; AUTH ---S100 J100 A100 M100 K100 P100 A105 B100 P105 W100 W105 LNAME ---------SMITH JONES AUSTIN MARTINEZ KZOCHSKY PORTER ADAMS BAKER PETERSON WHITE WHITE FNAME ---------SAM JANICE JAMES SHEILA TAMARA LISA JUAN JACK TINA WILLIAM LISA AUTH ---R100 F100 W110 LNAME ---------ROBINSON FIELDS WILKINSON FNAME ---------ROBERT OSCAR ANTHONY 14 rows selected. Dr. Chen, Oracle Database System (Oracle) 38 AUTHOR AuthorID LName VARCHAR2(4) VARCHAR2(10) FName VARCHAR2(10) SQL> describe author; Name Null? Type ------------ -------- --------------AUTHORID NOT NULL VARCHAR2(4) LNAME VARCHAR2(10) FNAME VARCHAR2(10) SQL> SQL> ALTER TABLE author SET UNUSED COLUMN fname; Table altered. SQL> describe author; Name Null? Type ----------- -------- ------------AUTHORID NOT NULL VARCHAR2(4) LNAME VARCHAR2(10) SQL> Dr. Chen, Oracle Database System (Oracle) Show: test_UNUSED.sql and test_UNUSED.doc SQL> ALTER TABLE author DROP COLUMN lname; Table altered. SQL> ALTER TABLE author DROP COLUMN fname; ALTER TABLE author DROP COLUMN fname * ERROR at line 1: ORA-00904: "FNAME": invalid identifier SQL> ALTER TABLE author 2 DROP UNUSED COLUMNS; Table altered. SQL> describe author; Name Null? Type ----------- -------- ------------AUTHORID NOT NULL VARCHAR2(4) SQL> 39 AUTHOR AuthorID LName VARCHAR2(4) VARCHAR2(10) FName VARCHAR2(10) SQL> SELECT * FROM author; AUTH ---A100 A105 B100 F100 J100 K100 M100 P100 P105 R100 S100 AUTH ---W100 W105 W110 14 rows selected. Dr. Chen, Oracle Database System (Oracle) 40 • Practice all the rest of examples in the text. • A Script file is available on the Bb (file name: Ch3Queries.sql) • After completing all examples, do the HW. Dr. Chen, Oracle Database System (Oracle) 41 Homework - Hands-On Assignments Email me with one attachment (Oracle_ch3_Spool_Lname_Fname.) to: chen@jepson.gonzaga.edu with subject title of Bmis441-01_Oracle_ch3 (or Bmis441-02_Oracle_ch3) Read and Practice all examples on Chapters 3 • 1. Run the script files (in the folder \oradata\chapter3\): JLDB_Build_3.sql • 2. Read Oracle assignment and create a script file Oracle_ch3_Lname_Fname.sql for questions (#1 to #8; p.94) on “Hands-on Assignments”. . • 3. Execute and test one problem at a time and make sure they are all running successfully. • 4. When you done, spool the script files (see next slide for spooling instructions) and email the file (Oracle_ch3_Spool_Lname_Fname.txt) to me by the midnight before the next class. Turn in a hardcopy to me in the class. Dr. Chen, Oracle Database System (Oracle) 42 How to Spool your Script and Output Files After you tested the script file of Oracle_ch3_Lname_Fname.sql successfully, follow the instructions below to spool both script and output files: Step 0. Run the following script file from SQL*Plus (since you have created JLDB tables) – Start c:\oradata\chapter3J\LDB_Build_3.sql • 1. type the following on SQL> – Spool c:\oradata\Oracle_ch3_Spool_Lname_Fname.txt (make sure your name is entered) • 2. open Oracle_ch3_Lname_Fname.sql that you already tested • 3. copy and paste all the SQL commands (including all comments) to the SQL*PLUS • 4. type Spool Off on the SQL> The output should contain your personal information, all SQL commands and their solution on the .txt file and saved in C: drive (oradata\ folder) Email me with the spooled file (.txt) with attachment to: chen@jepson.gonzaga.edu with subject title of Bmis441-01_Oracle_ch3 (or Bmis441-02_Oracle_ch3) Dr. Chen, Oracle Database System (Oracle) 43 • End of chapter 3 Dr. Chen, Oracle Database System (Oracle) 44