Showing posts with label SQL. Show all posts
Showing posts with label SQL. Show all posts

Saturday, July 24, 2010

ORA-14080: partition cannot be split along the specified high bound

Problem Scenarios
SQL>    CREATE TABLE USER_ACTIVITY
2 (
3 COL1 NUMBER NOT NULL,
4 COL2 VARCHAR2(10) NULL,
5 COL3 NUMBER NOT NULL
6 )
7 TABLESPACE USERS
8 PARTITION BY RANGE (COL3)
9 (
10 PARTITION P10 VALUES LESS THAN (100),
11 PARTITION P20 VALUES LESS THAN (200),
12 PARTITION P_MAX VALUES LESS THAN (MAXVALUE)
13 );

Table created.

SQL> ALTER TABLE USER_ACTIVITY SPLIT PARTITION
2 P_MAX AT (200)
3 INTO
4 (
5 PARTITION P30,
6 PARTITION MAXPART
7 );
P_MAX AT (200)
*
ERROR at line 2:
ORA-14080: partition cannot be split along the specified high bound

Cause of the Problem
There is already a partition with a specified high bound of 200. You need to split the partition on a value higher than the next range down but lower that the next range up.

Solution of the Problem
The solution is to split the partition into appropriate bound. The following statement will split the partition at value 250. From the two, the first partition (P30) holding values 200
to 249 and the second partition (MAXPART) holding values 250 and above.

SQL> ALTER TABLE USER_ACTIVITY SPLIT PARTITION
2 P_MAX AT (250)
3 INTO
4 (
5 PARTITION P30,
6 PARTITION MAXPART
7 );

Table altered.

Friday, July 16, 2010

How to remove data mining option from database

Oracle data mining is a licensed database option that is generally installed by default. However if you want to uninstall it the following procedures will help you.

Uninstall for database versions 9iR2 (9.2.x) and 10gR1 (10.1.x)
From the Oracle Universal Installer (OUI) page, you should be able to deinstall Data Mining from the 'Deinstall' icon. This is a supported way.

If OUI does not work for some reasons, you may do the following to deinstall ODM.

1. Start SQLPLUS and connect with user sys as sysdba
$ sqlplus / as sysdba

2. Remove ODM repositories from the database.

2.1 For Database release 9iR2 (9.2.x).

- Drop ODM, ODM_MTR schemas.

SQL> DROP USER ODM_MTR CASCADE;
SQL> DROP USER ODM CASCADE;


- Drop ODM public synonyms.
SQL> set heading off
SQL> spool /home/oracle/drop_odm_synonyms.sql
SQL> select 'Drop public synonym ' || SYNONYM_NAME || ' ;' from DBA_SYNONYMS where TABLE_OWNER = 'ODM';
SQL> spool off
SQL> @/home/oracle/drop_odm_synonyms.sql
Note that 264 synonyms should be selected and dropped.

2.2 For Database release 10gR1 (10.1.x)

- Drop DMSYS schema.

SQL> DROP USER DMSYS CASCADE;

- Drop DMSYS public synonyms.
SQL> set heading off 
SQL> spool /home/oracle/drop_dmsys_synonyms.sql
SQL> select 'Drop public synonym '" || SYNONYM_NAME || '" ;' from DBA_SYNONYMS where TABLE_OWNER = 'DMSYS';
SQL> spool off
SQL> @/home/oracle/drop_dmsys_synonyms.sql
Note that 568 synonyms should be selected and dropped.

Issue the following DELETE statement.

SQL> DELETE FROM exppkgact$ WHERE SCHEMA='DMSYS';

3. Update the DBA registry :

Before updating the DBA registry, first make sure Data Mining is registered in your database by running the following:
SQL> connect / as sysdba; 
SQL> select comp_id, version, status from dba_registry;
If ODM (Data Mining) is returned by the above query than execute the following to remove Data Mining from the DBA registry:

SQL> exec dbms_registry.removed('ODM');

For UNIX Platform the following steps allow to remake Oracle executable without DM libraries.
1. Shutdown database
2. cd $ORACLE_HOME/rdbms/lib
3. make -f ins_rdbms.mk dm_off
4. make -f ins_rdbms.mk ioracle
5. startup the database

The sqlplus banner should no longer display the Data Mining option and v$option should show 'Oracle Data Mining' as false on a Unix system based install.

Please note that it is possible synonyms may exist for Data Mining objects. If any exist, remove them to complete the removal.

Uninstall for Database version 10gR2 (10.2.x)

With Database Release 10gR2, the only supported way to remove the Data Mining option is to use the Oracle Universal Installer.

The steps would be,

- Start The Oracle Universal Installer.

-In Installer , click on the "Deinstall" Button.

- Find you RDBMS home and expand it.

- Under it you will find 'Oracle Database 10g 10.2.0.x' . Expand it.

- Under it you will find another folder also called Oracle Database 10g 10.2.0.1'. Expand it.

- In the bottom of this tree you will find 'Oracle Data Mining RDBMS Files 10.2.0.1'. This is what you need to remove.

- This Data Mining uninstall process should relink oracle executable with dm_off target, which should be reflected in sys.v$option view and SQLPlus banner.

Note that on some platform (e.g: HP UX) you may notice that after selecting the 'Oracle Data Mining RDBMS Files 10.2.0.1' and pressing OK you will be asked if you're sure you want to remove basically everything, including "Oracle Database 10g" itself. If this is the case stop deinstall process and do the following:

On unix and linux platform,
1. Shutdown database
2. cd $ORACLE_HOME/rdbms/lib
3. make -f ins_rdbms.mk dm_off
4. make -f ins_rdbms.mk ioracle
5. startup database.
On all platforms,
Update the database registry to remove the Data Mining component from it by performing the following :

Start SQL*Plus and log in as SYSDBA and execute dbms_registry.removed('ODM')

SQL> conn / as sysdba
SQL> exec dbms_registry.removed('ODM');

The sqlplus banner should no longer display the Data Mining option and v$option should show 'Oracle Data Mining' as false on a Unix system based install.

Uninstall for Database version 11gR1 (11.1.x)

With 11g, Oracle Data Mining is installed as part of the database installation. Data Mining is now part of Oracle binary and SYS metadata.

The Data Mining option cannot be removed but it can be disabled:

On Linux/Unix platform as below:
1. Shutdown database 
2. cd $ORACLE_HOME/rdbms/lib
3. make -f ins_rdbms.mk dm_off
4. make -f ins_rdbms.mk ioracle
5. startup database

On Windows platform as below:

Use the remove option from the Universal Installer and select the Data Mining under Enterprise Edition.

To verify the option have been disabled:

- Start sqlplus
$ sqlplus /nolog

- Connect as DBA user
SQL> conn / as sysdba

- Query the sys.v$option using :
SQL> Select parameter, value from v$option where parameter ='Data Mining';

If the returned value for column "value" is FALSE, then the option have been disabled.

Thursday, April 8, 2010

How to check long running operations in Oracle

Long running sessions in oracle indicates the operations that run for longer than 6 seconds (in absolute time). They include many backup and recovery functions, statistics gathering, query execution etc. Based on newer oracle version many operations are added gradually.

To monitor long running operations in oracle the following two conditions must met.
1) Set the initialization parameter TIMED_STATISTICS or SQL_TRACE parameters to true.
2) Gather statistics for your objects with the ANALYZE statement or the DBMS_STATS package.

After you have met above two conditions you can easily monitor your long running operations by querying V$SESSION_LONGOPS view.
SQL> desc V$SESSION_LONGOPS
Name Null? Type
----------------------------------------- -------- ----------------------------
SID NUMBER
SERIAL# NUMBER
OPNAME VARCHAR2(64)
TARGET VARCHAR2(64)
TARGET_DESC VARCHAR2(32)
SOFAR NUMBER
TOTALWORK NUMBER
UNITS VARCHAR2(32)
START_TIME DATE
LAST_UPDATE_TIME DATE
TIMESTAMP DATE
TIME_REMAINING NUMBER
ELAPSED_SECONDS NUMBER
CONTEXT NUMBER
MESSAGE VARCHAR2(512)
USERNAME VARCHAR2(30)
SQL_ADDRESS RAW(4)
SQL_HASH_VALUE NUMBER
SQL_ID VARCHAR2(13)
SQL_PLAN_HASH_VALUE NUMBER
SQL_EXEC_START DATE
SQL_EXEC_ID NUMBER
SQL_PLAN_LINE_ID NUMBER
SQL_PLAN_OPERATION VARCHAR2(30)
SQL_PLAN_OPTIONS VARCHAR2(30)
QCSID NUMBER
From above view,
- SOFAR is units of work done so far.
- TIME_REMAINING is estimate (in seconds) of time remaining for the operation to complete

In order to monitor how much percentage of an operation is completed query as,
SQL> SELECT sid, to_char(start_time,'hh24:mi:ss') stime, 
message,( sofar/totalwork)* 100 percent
FROM v$session_longops;

If you have long running operations in your database then above query will return rows.

You can query long running operations based on they have started like,
SQL> select opname, target, sofar, totalwork,
units, elapsed_seconds, message
from v$session_longops order by start_time desc;

Related Documents
http://arjudba.blogspot.com/2009/12/oracle-object-type-exercises-varray.html
http://arjudba.blogspot.com/2009/12/practice-oracle-joins-examples.html
http://arjudba.blogspot.com/2009/12/oracle-security-practices.html
http://arjudba.blogspot.com/2009/12/exercises-with-oracle-create-table-add.html
http://arjudba.blogspot.com/2009/12/oracle-database-creation-exercises.html
http://arjudba.blogspot.com/2009/12/basic-oracle-sql-exercise.html
http://arjudba.blogspot.com/2009/08/format-model-modifiers-fx-and-fm.html
http://arjudba.blogspot.com/2009/08/number-format-models-in-oracle.html
http://arjudba.blogspot.com/2009/08/format-models-in-oracle.html
http://arjudba.blogspot.com/2009/07/sql-decode.html
http://arjudba.blogspot.com/2009/07/how-to-know-row-of-table-belong-to.html
http://arjudba.blogspot.com/2009/06/how-to-know-which-objects-are-being.html
http://arjudba.blogspot.com/2009/06/ddl-with-wait-option-in-11g.html
http://arjudba.blogspot.com/2009/06/ora-00939-too-many-arguments-when-case.html
http://arjudba.blogspot.com/2009/03/oracle-datatype-internal-code.html
http://arjudba.blogspot.com/2009/03/how-to-know-list-of-constraints-and.html
http://arjudba.blogspot.com/2009/02/how-to-know-dependent-objectswhich.html
http://arjudba.blogspot.com/2009/02/how-to-search-stringkey-value-from.html
http://arjudba.blogspot.com/2009/02/how-to-know-when-tableobjects-ddlcode.html
http://arjudba.blogspot.com/2009/02/ora-00920-invalid-relational-operator.html
http://arjudba.blogspot.com/2009/01/adding-default-value-to-column-on-table.html
http://arjudba.blogspot.com/2009/01/ora-12838-cannot-readmodify-object.html
http://arjudba.blogspot.com/2009/01/ora-01779-cannot-modify-column-which.html
http://arjudba.blogspot.com/2009/01/updating-table-based-on-another-table.html
http://arjudba.blogspot.com/2009/01/ora-00054-resource-busy-and-acquire.html
http://arjudba.blogspot.com/2008/12/troubleshoot-ora-02292-ora-02449-and.html

Saturday, December 5, 2009

Oracle Object type Exercises - VARRAY


For this lab you will begin by using the same set of tables that you used for Lab 1 so be sure that you are connected to Oracle as the DBM449_USER user.  The objective of this lab will be to create a series of object-relational tables using the SQL*Plus editor that will allow data to be stored in a more "real-world" format.  Data for your new tables can be found in the file Lab1_initialization.sql which is in the url http://arjudba.blogspot.com/2009/12/practice-oracle-joins-examples.html.  You will need to manipulate the data in various ways, but the file will give you access to the raw data to use.



L A B S T E P S

STEP 1: Create a table with a column data type




Modify the design of the COURSE table created in iLab 1 to incorporate the use of the column abstract data type.
  1. Write and execute the SQL to create an object type called COURSE_OBJ1 that contains the attributes course code and course name.  Remember that with abstract objects you must use the / after the CREATE statement to execute it.
  2. Next, write and execute the SQL to create a table called NEW_COURSE1 that contains COURSE_OBJ1 and applicable original attributes from the original COURSE table.  Keep in mind what attributes the new object type COURSE_OBJ1 contains.
  3. Using the data from the LAB4_DATA file create execute the insert statements to load the new table NEW_COURSE1.
  4. Run DESCRIBE command to describe structure of table NEW_COURSE1.
  5. SET DESCRIBE DEPTH 2 and run DESCRIBE NEW_COURSE1 again.
  6. Execute a SELECT statement to query the data from the new table.  Use the COLUMN column_name FORMAT A## session command to format columns within the table to keep the result set data from wrapping around.  Be sure that you properly display data inside the object column. (HINT: When querying attributes of an abstract data type, you must use a correlation variable for the table.)


STEP 2: Create an object table with a row data type




Create a second COURSE table, this time as an object table using the row abstract data type.

  1. Write and execute the SQL to create an object called COURSE_OBJ2 that contains the attributes course code, course name, course date, instructor, and location.
  2. Write and execute the SQL to create a table called NEW_COURSE2 with each row defined by COURSE_OBJ2.
  3. Using the data from the LAB4_DATA file create execute the insert statements to load the new table NEW_COURSE2.
  4. Execute a SELECT statement to query the data from the new table.


STEP 3: Create a Varying Array




Modify the design of the CLIENT table created in iLab 1 to incorporate the use of the Varying Array.





  • Write and execute the SQL to create a Varying Array to represent the phone contact information for the client (up to 3 phone numbers). Name the varying array as PHONE_LIST.



  • Write and execute the SQL to create a table called NEW_CLIENT that contains the attributes that the original CLIENT table contained plus the phone list array.



  • Using the data from the LAB4_DATA file create execute the insert statements to load the new table NEW_CLIENT.



  • Execute a SELECT statement to query the data from the new table.


  • Related Documents

    Basic Oracle Sql Exercise




    Practice Oracle Joins Examples

    Before starting this lab let's assume that you have the following two files Lab1_initialization.sql and  2.PUPBLD.SQL

    Lab1_initialization.sql



    DROP USER DBM449_USER CASCADE;

    CREATE USER DBM449_USER
    IDENTIFIED BY DEVRY
    DEFAULT TABLESPACE USERS
    TEMPORARY TABLESPACE TEMP;

    GRANT CONNECT, RESOURCE TO DBM449_USER;

    GRANT CREATE MATERIALIZED VIEW, CREATE DATABASE LINNK TO DBM449_USER;

    CONN DBM449_USER/DEVRY@db####.WORLD

    DROP TABLE CLIENT;
    DROP TABLE COURSE;
    DROP TABLE COURSE_ACTIVITY;
    DROP TABLE CORP_EXTRACT1;
    DROP TABLE CORP_EXTRACT2;

    CREATE TABLE CLIENT (
    CLIENT_NO CHAR(8) PRIMARY KEY,
    CLIENT_COMPANY VARCHAR(35) NOT NULL,
    CLIENT_NAME VARCHAR(35) NOT NULL,
    CLIENT_EMAIL VARCHAR(35),
    CLIENT_PROGRAM CHAR(3) NOT NULL,
    CLIENT_SCORE NUMBER NOT NULL);


    CREATE TABLE COURSE (
    COURSE_CODE CHAR(8)PRIMARY KEY,
    COURSE_NAME VARCHAR(35) NOT NULL,
    COURSE_DATE DATE NOT NULL,
    COURSE_INSTRUCTOR VARCHAR(35) NOT NULL,
    COURSE_LOCATION VARCHAR(20) NOT NULL);


    CREATE TABLE COURSE_ACTIVITY (
    ACTIVITY_CODE CHAR(8) PRIMARY KEY,
    CLIENT_NO CHAR(8) NOT NULL,
    COURSE_CODE CHAR(8) NOT NULL,
    GRADE CHAR(1),
    INSTR_NOTES VARCHAR (50));


    CREATE TABLE CORP_EXTRACT1 (
    EXTRACT_NO CHAR(3) PRIMARY KEY,
    CLIENT_NO CHAR(8) NOT NULL,
    CLIENT_NAME VARCHAR(35) NOT NULL,
    CLIENT_EMAIL VARCHAR(35),
    CLIENT_COMPANY VARCHAR(35) NOT NULL,
    CLIENT_PROGRAM CHAR(3) NOT NULL,
    CLIENT_SCORE NUMBER NOT NULL,
    COURSE_NAME VARCHAR(35) NOT NULL,
    COURSE_DATE DATE NOT NULL,
    COURSE_INSTRUCTOR VARCHAR(35) NOT NULL,
    COURSE_LOCATION VARCHAR(20) NOT NULL,
    Course_STATUS VARCHAR(10) NOT NULL);

    CREATE TABLE CORP_EXTRACT2 (
    EXTRACT_NO NUMBER PRIMARY KEY,
    CLIENT_NO CHAR(8) NOT NULL,
    CLIENT_NAME VARCHAR(45) NOT NULL,
    CLIENT_EMAIL VARCHAR(35),
    CLIENT_COMPANY VARCHAR(35) NOT NULL,
    CLIENT_PROGRAM CHAR(8) NOT NULL,
    CLIENT_SCORE NUMBER NOT NULL,
    COURSE_NAME VARCHAR(35) NOT NULL,
    COURSE_DATE DATE NOT NULL,
    COURSE_INSTRUCTOR VARCHAR(35) NOT NULL,
    COURSE_LOCATION VARCHAR(20) NOT NULL,
    Course_STATUS VARCHAR(10) NOT NULL);




    /* Loading data rows */
    /* Turn Escape character on */
    /* Default escape character "\" */
    /* Used to enter special characters (&) */
    SET ESCAPE ON;


    /* CLIENT rows */
    INSERT INTO CLIENT VALUES('C2122542','Bryson, Inc.' ,'Smithson','smithson@bryson.com' ,'DBA',47);
    INSERT INTO CLIENT VALUES('C2122356','SuperLoo, Inc.' ,'Flushing','flushing@superloo.com' ,'DBA',38);
    INSERT INTO CLIENT VALUES('C2123871','D\&E Supply' ,'Singh' ,'rsingh@desupply.com' ,'EAI',42);
    INSERT INTO CLIENT VALUES('C2134452','Gomez Bros.' ,'Ortega' ,'ortega@gomez.com' ,'DBA',39);
    INSERT INTO CLIENT VALUES('C2256716','Dome Supply' ,'Smith' ,'smith@dome' ,'ADM',41);

    /* COURSE rows */
    INSERT INTO COURSE VALUES('DBA12345','DBA 101' ,'03-OCT-2005','Phung' ,'Kaanapali');
    INSERT INTO COURSE VALUES('DBA12346','Advanced DBA' ,'23-NOV-2005','Browne' ,'San Mateo');
    INSERT INTO COURSE VALUES('EAI12345','EAI Intro' ,'30-NOV-2005','Luss' ,'Danbury');
    INSERT INTO COURSE VALUES('DBA12347','DBA 101' ,'08-JAN-2006','Fiorillo' ,'Paramus');
    INSERT INTO COURSE VALUES('DBA12348','DBA 101' ,'28-FEB-2006','Majmundar' ,'Racine');

    /* COURSE ACTIVITY rows */
    INSERT INTO COURSE_ACTIVITY VALUES('A0000001','C2122542','DBA12345','A',NULL);
    INSERT INTO COURSE_ACTIVITY VALUES('A0000002','C2122356','DBA12347','F',NULL);
    INSERT INTO COURSE_ACTIVITY VALUES('A0000003','C2134452','DBA12345','B',NULL);
    INSERT INTO COURSE_ACTIVITY VALUES('A0000004','C2122542','DBA12346','A',NULL);
    INSERT INTO COURSE_ACTIVITY VALUES('A0000005','C2123871','EAI12345','A',NULL);
    INSERT INTO COURSE_ACTIVITY VALUES('A0000006','C2122356','DBA12345',NULL,NULL);

    /* CORP_EXTRACT1 rows */
    INSERT INTO CORP_EXTRACT1 VALUES ('001','C2122542','Smithson','smithson@bryson.com','Bryson, Inc.','DBA',47,'EAI Intro','01-MAR-2007','Luss','Hilo','Enrolled');
    INSERT INTO CORP_EXTRACT1 VALUES ('002','C2122356','Flushing','flushing@superloo.com','SuperLoo, Inc.','DBA',38,'DBA 101','03-OCT-2005','Luss','Hilo','Dropped');
    INSERT INTO CORP_EXTRACT1 VALUES ('003','C2172249','Bizet','gbizet@bryson.com','Bryson, Inc.','EAI',44,'EAI Intro','01-MAR-2007','Luss','Hilo','Enrolled');

    COMMIT;

    GRANT SELECT ON COURSE TO PUBLIC;
    GRANT SELECT ON CLIENT TO PUBLIC;
    GRANT SELECT ON COURSE_ACTIVITY TO PUBLIC;

    SET ESCAPE OFF;



    2.PUPBLD.SQL





    conn system/manager@db1000.world

    drop synonym product_user_profile;

    create table sqlplus_product_profile as
    select product, userid, attribute, scope, numeric_value, char_value,
    date_value from product_user_profile;

    drop table product_user_profile;
    alter table sqlplus_product_profile add (long_value long);

    rem +---------------------------------------+
    rem | Create SQLPLUS_PRODUCT_PROFILE from scratch |
    rem +---------------------------------------+

    create table sqlplus_product_profile
    (
    product varchar2 (30) not null,
    userid varchar2 (30),
    attribute varchar2 (240),
    scope varchar2 (240),
    numeric_value decimal (15,2),
    char_value varchar2 (240),
    date_value date,
    long_value long
    );

    rem
    rem Remove SQL*Plus V3 name for sqlplus_product_profile
    rem
    drop table product_profile;


    rem +------------------------------------------------------------------+
    rem | Create the view PRODUCT_PRIVS and grant access to that |
    rem +------------------------------------------------------------------+

    drop view product_privs;
    create view product_privs as
    select product, userid, attribute, scope,
    numeric_value, char_value, date_value, long_value
    from sqlplus_product_profile
    where userid = 'PUBLIC' or user like userid;

    grant select on product_privs to public;
    drop public synonym product_profile;
    create public synonym product_profile for system.product_privs;
    drop synonym product_user_profile;
    create synonym product_user_profile for system.sqlplus_product_profile;
    drop public synonym product_user_profile;
    create public synonym product_user_profile for system.product_privs;

    rem +---------------------------------------------------------------+
    rem | CONNECT BACK AS THE SYS USER |
    rem +---------------------------------------------------------------+

    conn sys/oracle@DB###.world as sysdba
    Exercise Description
    My colleague, Ann Henry, operates a regional training center for a commercial software organization. She created a database to track client progress so she can analyze effectiveness of the certification program. CLIENT, COURSE, and COURSE_ACTIVITY are three of the tables in her database. The CLIENT table contains client name, company, client number, pre-test score, certification program and email address. The COURSE_ACTIVITY table contains client number, course code, grade, and instructor notes. The COURSE table contains the course code, course name, instructor, course date, and location. Although she and her instructors enter much of the data themselves, some of the data are extracted from the corporate database and loaded into her tables.Loading the initial data was easy. For grade entry at the end of each course, a former employee created a data entry form for the instructors. Updating most client information and generating statistics on client progress is not easy because Ann does not know much SQL. For now, she exports the three tables into three spreadsheets. To look up a grade in the COURSE_ACTIVITY spreadsheet, she first has to look up client number in the CLIENT spreadsheet. While this is doable, it is certainly not practical. For statistics, she sorts the data in the COURSE_ACTIVITY spreadsheet using multiple methods to get the numbers she needs.Every month, Ann's database tables need to be refreshed to reflect changes in the corporate database. Ann describes this unpleasant task. She manually compares the contents of newly extracted data from corporate to the data in her spreadsheets, copies in the new values, and then replaces the database contents with the new values.Ann needs our help. Let’s analyze her situation and determine what advanced SQL she could use to make her tasks easier.

    L A B O V E R V I E W

    Scenario/Summary
    The purpose of this lab is to explore join operators to determine which, if any, are appropriate for solving Ann's business problems, as described in this week's lecture.Since Ann prefers to work from Excel spreadsheets, she wants her CLIENT and COURSE_ACTIVITY tables exported into one spreadsheet rather than two, as she is currently using. We need to determine which, if any, of the join operators will provide the data she wants for the single spreadsheet. (Note: we will not perform the export, just determine how to retrieve the necessary data.) Using the spreadsheet, she will be able to determine:
    1. Which course(s) a specific client has taken
    2. What grade(s) a specific client has earned in a specific course
    3. Which clients did not take any courses
    4. Which courses were not taken by any client
    Here are results from DESCRIBE commands that show structure (columns and their data types) of tables CLIENT and COURSE_ACTIVITY. You may refer to it while constructing your queries. For this lab you will be creating several documents. First, write your queries in Notepad to create a script file that will contain all of the queries asked for in lab steps 4 through 13. You can (and should) test each query as you write it to make sure that it works and is returning the correct data. Once you have all of your queries written then create a SPOOL session and run your entire script file. Be sure that you execute a SET ECHO ON session command before running the file so that both the query and the output will be captured in the SPOOL file. IMPORTANT: If you are using Windows Vista you will need to create a directory on your C: drive to SPOOL your file into. Vista will not allow you to write a file directly to the C: drive. This will give you two files for the lab. The third file will the be the Lab1 Report document found in Doc Sharing. You will need to put your responses to the questions asked in the various lab steps.Now let's begin. 

    L A B S T E P S

    STEP 1: Start Oracle SQL*Plus via Citrix
    Your browser may not support display of this image.
    Start Citrix Metaframe. Select SQL Plus and log in to your database instance. Use "sys" as User Name, and "oracle" as the Password. Enter the Host String as "DB9999.world as sysdba" where 9999 is the database number you have been assigned.
    STEP 2: Initialize tables
    Your browser may not support display of this image.
    Download the Lab1_initialization.sql and pupbld.sql files associated with the links to your C: drive or to the F: drive in your Citrix environment. You will need to open each of the files and edit the connection string to match your instance name. Once you have done this then run the pupbld.sql script first (DO NOT copy and paste it) in your SQL*Plus session. The script will create the product_user_profile synonym in the SYSTEM account which will be used each time you log in as a normal user. Next run the lab1_initalization.sql script in your session. The script will create a new user (DBM449_USER) that will be used in various labs in this course. Disregard the DROP TABLE error messages. They occur because the script is designed to work regardless of whether you have already created the tables or not. This way, you may run it if you ever decide to resent the contents of your tables to the original values. When you run the script for the first time, the error messages appear as you attempt to drop tables that do not exist.Once the script has finished you will be logged into the new user and ready to start your lab.
    STEP 3: Verify your tables
    Your browser may not support display of this image.
    You want to verify that everything completed successfully. To do this execute a SELECT * FROM TAB statement to make sure all 5 tables were created and then you can execute a SELECT COUNT(*) FROM statement using each of the table names. You should find the following numbers of records for each table.
    • CLIENT table - 5 rows
    • COURSE table - 5 rows
    • COURSE_ACTIVITY table - 6 rows
    • CORP_EXTRACT1 table - 3 rows
    • CORP_EXTRACT2 table - 0 rows
    STEP 4: Using the FULL OUTER JOIN operator
    Your browser may not support display of this image.
    Join the CLIENT and COURSE_ACTIVITY tables using a FULL OUTER JOIN.
    • Write and execute the SQL statement that produces the client number and name, course code and grade that the client got in this course.
    Will the FULL OUTER JOIN be helpful to Ann? Place your response in the lab report document for this step.
    STEP 5: Using the RIGHT OUTER JOIN operator
    Your browser may not support display of this image.
    Join the CLIENT and COURSE_ACTIVITY tables using a RIGHT OUTER JOIN.
    • Write and execute the SQL statement that produces the client number and name, course code and grade that the client got in this course.
    Will the RIGHT OUTER JOIN be helpful to Ann? Place your response in the lab report document for this step.
    STEP 6: Using the LEFT OUTER JOIN operator
    Your browser may not support display of this image.
    Join the CLIENT and COURSE_ACTIVITY tables using a LEFT OUTER JOIN.
    • Write and execute the SQL statement that produces the client number and name, course code and grade that the client got in this course.
    Will the LEFT OUTER JOIN be helpful to Ann? Place your response in the lab report document for this step.
    STEP 7: Using the NATURAL JOIN operator
    Your browser may not support display of this image.
    Join the CLIENT and COURSE_ACTIVITY tables using a NATURAL JOIN.
    • Write and execute the SQL statement that produces the client number and name, course code and grade that the client got in this course.
    • Will the NATURAL JOIN be helpful to Ann? Place your response in the lab report document for this step.
    STEP 8: Using the INNER JOIN operator
    Your browser may not support display of this image.
    Join the CLIENT and COURSE_ACTIVITY tables using a INNER JOIN.
    • Write and execute the SQL statement that produces the client number and name, course code and grade that the client got in this course.
    Will the INNER JOIN be helpful to Ann? Place your response in the lab report document for this step.Write a conclusion based on the five steps above, which join - if any - should Ann use to populate the spreadsheet that can answer her questions. 
    STEP 9: Using the UNION operator
    Your browser may not support display of this image.
    Examine the clients and courses in Ann’s tables and the CORP_EXTRACT1 table using the UNION operator.
    • Write and execute the SQL statement that examines client numbers in CLIENT and CORP_EXTRACT1.
    • Write and execute the SQL statement that examines client numbers in COURSE_ACTIVITY and CORP_EXTRACT1.
    • Write and execute the SQL statement that examines course names in COURSE and CORP_EXTRACT1.
    Which of these statements, if any, will be helpful to Ann? Place your response in the lab report document for this step.
    STEP 10: Using the UNION ALL operator
    Your browser may not support display of this image.
    Examine the clients and courses in Ann’s tables and the CORP_EXTRACT1 table using the UNION ALL operator.
    • Write and execute the SQL statement that examines client numbers in CLIENT and CORP_EXTRACT1.
    • Write and execute the SQL statement that examines client numbers in COURSE_ACTIVITY and CORP_EXTRACT1.
    • Write and execute the SQL statement that examines course names in COURSE and CORP_EXTRACT1.
    Which of these statements, if any, will be helpful to Ann? Place your response in the lab report document for this step.
    STEP 11: Using the INTERSECT operator
    Your browser may not support display of this image.
    Examine the clients and courses in Ann’s tables and the CORP_EXTRACT1 table using the INTERSECT operator.
    • Write and execute the SQL statement that examines client numbers in CLIENT and CORP_EXTRACT1.
    • Write and execute the SQL statement that examines client numbers in COURSE_ACTIVITY and CORP_EXTRACT1.
    • Write and execute the SQL statement that examines course names in COURSE and CORP_EXTRACT1.
    Which of these statements, if any, will be helpful to Ann? Place your response in the lab report document for this step.
    STEP 12: Using the MINUS operator
    Your browser may not support display of this image.
    Examine the clients and courses in Ann’s tables and the CORP_EXTRACT1 table using the MINUS operator.
    • Write and execute the SQL statement that examines client numbers in CLIENT and CORP_EXTRACT1.
    • Write and execute the SQL statement that examines client numbers in COURSE_ACTIVITY and CORP_EXTRACT1.
    • Write and execute the SQL statement that examines course names in COURSE and CORP_EXTRACT1.
    Which of these statements, if any, will be helpful to Ann? Place your response in the lab report document for this step.
    STEP 13: Using subqueries
    Your browser may not support display of this image.
    Examine the clients and courses in Ann’s tables and the CORP_EXTRACT1 table using a subquery with NOT IN operator.
    • Write and execute the SQL statement that examines client numbers in CLIENT and CORP_EXTRACT1.
    • Write and execute the SQL statement that examines client numbers in COURSE_ACTIVITY and CORP_EXTRACT1.
    • Write and execute the SQL statement that examines course names in COURSE and CORP_EXTRACT1.
    Which of these statements, if any, will be helpful to Ann? Place your response in the lab report document for this step.
    Related Documents

    Basic Oracle Sql Exercise