Chapter 8 Embedded SQL.

Slides:



Advertisements
Similar presentations
Basic SQL Introduction Presented by: Madhuri Bhogadi.
Advertisements

Concepts of Database Management Seventh Edition Chapter 3 The Relational Model 2: SQL.
Chapter 8 Embedded SQL.
Copyright © 2011 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 13 Introduction to SQL Programming Techniques.
Chapter 4B: More Advanced PL/SQL Programming
1 Minggu 6, Pertemuan 11 Programmatic SQL Matakuliah: T0206-Sistem Basisdata Tahun: 2005 Versi: 1.0/0.0.
A Guide to SQL, Seventh Edition. Objectives Understand the concepts and terminology associated with relational databases Create and run SQL commands in.
Chapter 7 Advanced SQL Database Systems: Design, Implementation, and Management, Sixth Edition, Rob and Coronel.
Concepts of Database Management Sixth Edition
A Guide to SQL, Seventh Edition. Objectives Embed SQL commands in PL/SQL programs Retrieve single rows using embedded SQL Update a table using embedded.
Concepts of Database Management Sixth Edition
Chapter 3: SQL – Part I Yong Choi School of Business CSU, Bakersfield.
SQL – Part I Yong Choi School of Business CSU, Bakersfield.
DB2. 2 Copyright © 2005, Infosys Technologies Ltd ER/CORP/CRS/DB01/003 Version No:2.0a Session Plan SPUFI Hands On Introduction to Embedded SQL DCLGEN.
Jump-Start Embedded SQL into RPG Presented by: Robert Arce.
A Guide to SQL, Eighth Edition Chapter Three Creating Tables.
Bordoloi and Bock CURSORS. Bordoloi and Bock CURSOR MANIPULATION To process an SQL statement, ORACLE needs to create an area of memory known as the context.
1 An Introduction to SQL. 2 Objectives  Understand the concepts and terminology associated with relational databases  Create and run SQL commands 
Introduction to SQL Yong Choi School of Business CSU, Bakersfield.
CPS120: Introduction to Computer Science Information Systems: Database Management Nell Dale John Lewis.
Cursor and Exception Handling By Nidhi Bhatnagar.
Oracle10g Developer: PL/SQL Programming1 Objectives Manipulating data with cursors Managing errors with exception handlers Addressing exception-handling.
Chapter 4 Cursors and Exception Handling Oracle10g Developer:
Concepts of Database Management Seventh Edition
Concepts of Database Management, Fifth Edition Chapter 4: The Relational Model 3: Advanced Topics.
Chapter 4 The Relational Model 3: Advanced Topics Concepts of Database Management Seventh Edition.
A Free sample background from © 2006 By Default! R.SARAVANA KUMAR S.NAVEEN Relational Database Model.
Printing on power systems Program/ Command Data Report Layout (Printer File) Job Output Queue *FILE Spooled File.
Converting To Anthony Tichonoff Florida Hospital MIS January 2007 With Ease Multi-Row Fetch.
Overview · What is PL/SQL · Advantages of PL/SQL · Basic Structure of a PL/SQL Block · Procedure · Function · Anonymous Block · Types of Block · Declaring.
Dr Gordon Russell, Napier University Unit Embedded SQL - V3.0 1 Embedded SQL Unit 5.1.
1 Database Administration. 2 Objectives  Understand, create, and drop views  Grant and revoke users’ privileges  Understand and obtain information.
Chapter 6 Database Administration
Concepts of Database Management Seventh Edition
1 A Guide to SQL Chapter 2. 2 Introduction Mid-1970s: SQL developed under the name SEQUEL at IBM by San Jose research facilities to be the data manipulation.
1 Multiple Table Queries. 2 Objectives  Retrieve data from more than one table by joining tables  Using IN and EXISTS to query multiple tables  Nested.
Programmatic SQL Shaista Khan CS 157B. Topic Embedded SQL statements in high-level programming languages.
Chapter 15 Introduction to PL/SQL. Chapter Objectives  Explain the benefits of using PL/SQL blocks versus several SQL statements  Identify the sections.
PL/SQLPL/SQL Oracle10g Developer: PL/SQL Programming Chapter 3 Handling Data in PL/SQL Blocks.
1 Chapter 6 Database Administration. 2 Introduction Database administration The process of managing a database Database administrator A person or an entire.
SQL – Part I Yong Choi School of Business CSU, Bakersfield.
Concepts of Database Management Eighth Edition Chapter 3 The Relational Model 2: SQL.
Inserting SQL into HLL programs
Objectives Database triggers and syntax
PL/SQLPL/SQL Oracle10g Developer: PL/SQL Programming Chapter 9 Database Triggers.
Chapter 8 Advanced SQL Database Systems: Design, Implementation, and Management, Seventh Edition, Rob and Coronel.
Chapter 4: SQL Complex Queries Complex Queries Views Views Modification of the Database Modification of the Database Joined Relations Joined Relations.
Chapter 4 An Introduction to SQL. Copyright © 2004 Pearson Addison-Wesley. All rights reserved.4-2 Topics in this Chapter SQL: History and Overview The.
Oracle10g Developer: PL/SQL Programming1 Objectives SQL queries within PL/SQL Host or bind variables The %TYPE attribute Include queries and control structures.
A Guide to SQL, Eighth Edition Chapter Eight SQL Functions and Procedures.
PL/SQLPL/SQL Oracle10g Developer: PL/SQL Programming Chapter 9 Database Triggers.
Oracle11g: PL/SQL Programming Chapter 3 Handling Data in PL/SQL Blocks.
implicit and an explicit cursor
In this module, we will design a program to work with the PROJECT table, learning to insert a new project into the table, to delete one or more projects.
1 Stored Procedures in MySQL Part I. 2 Objectives SQL Vs. MySQL SP MySQL SP Parameters MySQL SP Control Structures.
Lu Wei1 Outline Introduction Basic SQL Setting Up and Using PostgreSQL Advanced SQL Embeded SQL.
RETRIEVE A NO. OF ROWS ¦ Declare a cursor ¦ Open the cursor ¦ Fetch rows of data ¦ Stop fetching rows ¦ Close the cursor.
A Guide to SQL, Sixth Edition 1 Chapter 5 Updating Data.
1 Section 10 - Embedded SQL u Many computer languages allow you to embed SQL statements within the code (e.g. COBOL, PowerBuilder, C++, PL/SQL, etc.) u.
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe.
Chapter 4 An Introduction to SQL. Copyright © 2004 Pearson Addison-Wesley. All rights reserved.4-2 Topics in this Chapter SQL: History and Overview The.
Concepts of Database Management, Fifth Edition Chapter 3: The Relational Model 2: SQL.
Chapter 4 An Introduction to SQL.
A Guide to SQL, Seventh Edition
Chapter 2 Handling Data in PL/SQL Blocks Oracle9i Developer:
Unit I-2.
Yong Choi School of Business CSU, Bakersfield
Oracle9i Developer: PL/SQL Programming Chapter 8 Database Triggers.
Handling Data in PL/SQL Blocks
Presentation transcript:

Chapter 8 Embedded SQL

Objectives Embed SQL commands in COBOL statements Retrieve single rows using embedded SQL Update a table using embedded INSERT, UPDATE, and DELETE commands Use cursors to retrieve multiple rows in embedded SQL Update a database using cursors Learn how to handle errors in programs containing embedded SQL commands

Introduction Use a procedural language to use embedded SQL commands to accomplish tasks beyond the capabilities of SQL Use EXEC SQL and END-SQL in COBOL programming to distinguish embedded SQL commands from standard COBOL statements

Introduction DATA DIVISION (WORKING-STORAGE SECTION) contains statements declaring the tables that will be used in processing the database Communications area includes items that allow SQL to communicate various aspects of processing to the program

Introduction SQLCODE contains a code indicating the fate of the executed statement Normal = zero Not normal = value in SQLCODE that indicates problem PROCEDURE DIVISION contain new statements that will be SQL statements with slight variations

DATA DIVISION Tables to be processed are declared in WORKING-STORAGE Use the DECLARE TABLE command

Create SALES_REP Table EXEC SQL DECLARE SALES_REP TABLE (SLSREP_NUMBER DECIMAL (2), LAST CHAR (10), FIRST CHAR (8), STREET CHAR (15), CITY CHAR (15), STATE CHAR (2), ZIP_CODE CHAR (5), TOTAL_COMMISSION DECIMAL (7,2), COMMISSION_RATE DECIMAL (3,2) ) END-EXEC.

Code for Using Library EXEC SQL INCLUDE DECSALES_REP END-EXEC.

COBOL Variables 01 W-SALES-REP. 03 W-SLSREP_NUMBER PIC S9(2) COMP-3. 03 W-LAST PIC X(10). 03 W-FIRST PIC X(8). 03 W-STREET PIC X(15). 03 W-CITY PIC X(15). 03 W-STATE PIC X(2). 03 W-ZIP-CODE PIC X(5). 03 W-TOTAL-COMMISSION PIC S9(5)V9(2) COMP-3. 03 W-COMMISSION-RATE PIC S9V9(2) COMP-3.

SQLCA SQL communication area provides feedback to the program Example: EXEC SQL INCLUDE SQLCA END-EXEC.

PROCEDURE DIVISION Use Host variables Proceed the variable with a colon Replace results of SQL queries in host variables in the INTO CLAUSE SELECT LAST INTO :W-LAST FROM SALES_REP WHERE SLSREP_NUMBER = “03” Make provisions for exceptional conditions

Example 1 Obtain the last name of sales rep number 03 and place it in W-LAST

Retrieve a Single Row and Column In SQL: SELECT LAST FROM SALES_REP WHERE SLSREP_NUMBER = “03”; In COBOL: EXEC SQL INTO :W-LAST WHERE SLSREP_NUMBER = “03” END-EXEC.

Example 2 Obtain all information about the sales rep whose number is stored in the host variable W-SLSREP-NUMBER

Retrieve a Single Row and All Columns EXEC SQL SELECT LAST, FIRST, STREET, CITY, STATE, ZIP_CODE, TOTAL_COMMISSION, COMMISSION RATE INTO :W-LAST, :W-FIRST, :W-STREEET, :W-CITY, :W-STATE, :W-ZIP-CODE, :W-TOTAL-COMMISSION, :W-COMMISSION-RATE FROM SALES_REP WHERE SLSREP_NUMBER = :W-SLSREP-NUMBER END-EXEC.

Program to Display Sales Rep Information

Program to Display Sales Rep Information (version 2)

Example 3 Obtain the last name, first name, and address of the customer whose customer number is stored in the host variable, W-CUSTOMER-NUMBER, as well as the number, last name, and first name of the sales rep who represents this customer

Retrieve a Single Row from a Join EXEC SQL SELECT CUSTOMER.LAST, CUSTOMER.FIRST, CUSTOMER.STREET, CUSTOMER.CITY, CUSTOMER.STATE, CUSTOMER.ZIP_CODE, CUSTOMER.SLSREP_NUMBER, SALES_REP.LAST, SALES_REP.FIRST INTO :W-LAST OF :W-CUSTOMER, :W-FIRST OF :W-CUSTOMER, :W-STREET OF :W-CUSTOMER, :W-CITY OF :W-CUSTOMER, :W-STATE OF :W-CUSTMOER, :W-ZIP-CODE OF :W-CUSTOMER, :W-SLSREP-NUMBER OF :W-CUSTOMER, :W-LAST OF :W-SLAES-REP, :W-FIRST OF :W-SALES-REP FROM SALES-REP, CUSTOMER WHERE SALES-REP.SLSREP_NUMBER = CUSTOMER.SLSREP_NUMBER AND CUSTOMER.CUSTOMER_NUMBER = :W-CUSTOMER-NUMBER END-EXEC.

Example 4 Add a row to the SALES_REP table The sales rep number, last name, first name address, total commission, and credit limit already have been placed in the variables W-SLSREP-NUMBER, W-LAST, W-FIRST, W-STREET, W-CITY, W-STATE, W-ZIP-CODE, W-TOTAL-COMMISION, and W-COMMISSION-RATE, respectively.

Insert a Row Into a Table EXEC SQL INSERT INTO SALES_REP VALUES (:W-SLSREP-NUMBER, :W-LAST, :W-FIRST, :W-STREET, :W-CITY, :W-STATE, :W-ZIP-CODE, :W-TOTAL-COMMISSION, :W-COMMISSION-RATE) END-EXEC.

Program to Add Sales Reps

Example 5 Change the last name of the sales rep whose number currently is stored in W-SLSREP-NUMBER to the value currently stored in W-LAST

Change A Single Row In A Table EXEC SQL UPDATE SALES_REP SET LAST = :W-LAST WHERE SLSREP_NUMBER = :WSLSREP-NUMBER END-EXEC.

Example 6 Add the amount stored in the host variable INCREASE-IN-RATE to the commission rate for all sales reps who currently represent any customer having a credit limit of $1,000

Change Multiple Rows in a Table EXEC SQL UPDATE SALES_REP SET COMMISSION_RATE = COMMISSION_RATE + :INCREASE-IN-RATE WHERE SLSREP_NUMBER IN (SELECT SLSREP_NUMBER FROM CUSTOMER WHERE CREDIT_LIMIT = 1000) END-EXEC.

Example 7 Delete the sales rep whose number currently is stored in W-SLSREP-NUMBER from the SALES_REP table

Delete a Single Row From a Table EXEC SQL DELETE FROM SALES_REP WHERE SLSREP_NUMBER = :W-SLSREP-NUMBER END-EXEC.

Example 8 Delete every order line for the order whose order number currently is stored in the host variable W-ORDER-NUMBER from the ORDER_LINE table

DELETE Multiple Rows From a Table EXEC SQL DELETE FROM ORDER_LINE WHERE ORDER_NUMBER = :W-ORDER-NUMBER END-EXEC.

Multiple-Row SELECT Example of SELECT statement producing multiple rows EXEC SQL SELECT CUSTOMER_NUMBER, LAST, FIRST INTO :W-CUSTOMER-NUMBER, :W-LAST, :W-FIRST FROM CUSTOMER WHERE SLSREP_NUMBER = :W-SLSREP-NUMBER END-EXEC Problem: COBOL can process only one record at a time, where this SQL command produces multiple rows (records)

Cursors Cursor A pointer to a row in the collection of rows retrieved by a SQL statement Advances one row at time to provide sequential, record-at-a-time access to the retrieved rows so COBOL can process the rows Using a cursor, COBOL can process the set of retrieved rows as though they were records in a sequential file.

Example 9 Retrieve the number, last name, and first name of every customer represented by the sales rep whose number is stored in the host variable W-SLSREP-NUMBER

Using a Cursor EXEC SQL DECLARE CUSTGROUP CUROSR FOR SELECT CUSTOMER_NUMER, LAST, FIRST FROM CUSTOMER WHERE SLSREP_NUMBER = :W-SLSREP-NUMBER END-EXEC.

OPEN, FETCH,CLOSE OPEN, FETCH, and CLOSE commands are used in processing a cursor Analogous to the OPEN, READ, and CLOSE commands used in processing a sequential file

Opening a Cursor EXEC SQL OPEN CUSTGROUP END-EXEC.

Before OPEN

After OPEN, But Before First FETCH

Fetching Rows from a Cursor EXEC SQL FETCH CUSTGROUP INTO :W-CUSTOMER-NUMBER, :W-LAST, :W-FIRST END-EXEC.

After First FETCH

After Second FETCH

After Third FETCH

After Attempting a Fourth FETCH

Closing a Cursor EXEC SQL CLOSE CUSTGROUP END-EXEC.

After CLOSE

Program to Display Customers of a Given Sales Rep

Example 10 For every order that contains an order line for the part whose part number is stored in W-PART-NUMBER, retrieve the order number, order date, last name, and first name of the customer who placed the order, and the number, last name, and first name of the sales rep who represent the customer Sort the results by customer number

More Complex Cursors EXEC SQL DECLARE ORDGROUP CURSOR FOR SELECT ORDERS.ORDER_NUMBER, ORDERS.ORDER_DATE, CUSTOMER.CUSTOMER_NUMBER, CUSTOMER.LAST, FIRST, SALES_REP.SLSREP_NUMBER, SALES_REP.LAST, FIRST FROM ORDER_LINE, ORDERS, CUSTOMER, SALES_REP WHERE ORDER_LINE.PART_NUMBER = :W-PART-NUMBER AND ORDER_LINE.ORDER_NUMBER = ORDERS.ORDER_NUMBER AND ORDERS.CUSTOMER_NUMBER = CUSTOMER.CUSTOMER_NUMBER AND CUSTOMER.SLSREP_NUMBER = SALES_REP.SLSREP_NUMBER ORDER BY CUSTOMER.CUSTOMER_NUMBER END-EXEC.

Advantages of Cursors The coding the in the program is greatly simplified A special component of the database management system called the optimizer determines the best way to access the data If the database structure changes in such a way that the necessary information is still obtainable using a different query, the only change required in the program is the cursor definition in WORKING-STORAGE (PRODECURE DIVISION code is not affected)

Example 11 Add $100 to the credit limit for every customer represented by the sales rep whose number currently is stored in the host variable W-SLSREP-NUMBER, whose balance is not over the credit limit, and whose credit limit is $500 or less Add $200 to the credit limit of every customer of this sales rep whose balance is not over the credit limit and whose credit limit is more than $500 Write the number, last name, and first name of every customer of this sales rep whose balance is greater than the credit limit

Updating Cursors EXEC SQL DECLARE CREDGROUP CURSOR FOR SELECT CUSTOMER_NUMBER, LAST, FIRST, BALANCE, CREDIT_LIMIT FROM CUSTOMER WHERE SLSREP_NUMBER = :W-SLSREP-NUMBER FOR UPDATE OF CREDIT-LIMIT END-EXEC.

Code to FETCH a Row EXEC SQL FETCH CREDGROUP INTO :W-CUSTOMER-NUMBER, :W-LAST, :W-FIRST, :W-BALANCE, :W-CREDIT-LIMIT END-EXEC IF SQLCODE = 100 MOVE “NO” TO ARE-THERE-MORE-CUSTOMERS ELSE PERFORM CUSTOMER-UPDATE. CUSTOMER-UPDATE. IF W-CREDIT-LIMIT > W-BLANCE DISPLAY W-FIRST, W-LAST ELSE IF W-CREDIT-LIMIT > 500 UPDATE CUSTOMER SET CREDIT-LIMIT = CREDIT_LIMIT + 200 WHERE CURRENT OF CREDGROUP SET CREDIT_LIMIT = CREDIT_LIMIT + 100 END-EXEC.

Error Handling Two types of error conditions Unusual but normal conditions Abnormal and unexpected conditions or fatal errors.

Unusual Conditions Errors The value in SQLCODE will be a positive number Appropriate action is to print an error message and continue processing Appropriate action for END OF DATA (SQLCODE-100) is termination of some loop and continuation with the rest of the program No error message is required

Abnormal and Unexpected Errors Value in SQLCODE is a negative number Appropriate action is to print a final message that indicates the problem and terminate the program Use the WHENEVER statement to handle these errors in a global way

WHENEVER Statement EXEC SQL WHENEVER SQLERROR GOTO ERROR-PROCESSING-ROUTINE END-EXEC. WHENEVER SQLWARNING CONTINUE WHENEVER NOT FOUND CONTINUE

Error Codes SQLERROR = abnormal or fatal condition (SQLCODE < 0) SQLWARNING = unusual but normal conditions (SQLCODE > 0) NOT FOUND = special warning END OF DATA (SQLCODE =100)

Summary To embed SQL commands in a COBOL program, precede the SQL command with EXEC SQL, and follow the command with END-EXEC Statements to define the tables to be accessed must appear in the DATA DIVISION The DATA DIVISION must contain the INCLUDE SQLCA statement, which allows access to the SQL communication area You can use host language variables (variables that are not columns within a table) in embedded SQL commands by preceding the variable name with a colon

Summary You can use SELECT statements as embedded SQL commands in COBOL programs only when a single row is retrieved To place the results of a SELECT statement into host language variables, use the INTO clause in the SELECT command You can use INSERT, UPDATE, and DELETE statements in COBOL programs, even when they affect more than one row If a SELECT statement is to retrieve more than one row, it must be used to define a cursor that will be used to select one row at a time

Summary To activate a cursor, use the OPEN command to execute the query in the cursor definition To select the next row in COBOL, use the FETCH command To deactivate a cursor, use the CLOSE command. The rows initially retrieved will not longer be available to COBOL DATA in the tables on which a cursor is based can be updated by including the WHERE CURRENT OF cursor name clause in the update statement This clause updates only the current (most recently fetched) row

Summary To see if an error has occurred, examine the value in SQLCODE Rather than checking SQLCODE in every place in the program where errors could occur, use the WHENEVER clause