20
Copyright Oracle Corporation, 1999. All rights reserved. 18 18 Interacting with the Oracle Server

Copyright Oracle Corporation, 1999. All rights reserved. 18 Interacting with the Oracle Server

Embed Size (px)

Citation preview

Page 1: Copyright  Oracle Corporation, 1999. All rights reserved. 18 Interacting with the Oracle Server

Copyright Oracle Corporation, 1999. All rights reserved.

1818

Interacting with the Oracle ServerInteracting with

the Oracle Server

Page 2: Copyright  Oracle Corporation, 1999. All rights reserved. 18 Interacting with the Oracle Server

18-2 Copyright Oracle Corporation, 1999. All rights reserved.

ObjectivesObjectivesAfter completing this lesson, you should After completing this lesson, you should be able to do the following:be able to do the following:

• Write a successful SELECT statement in PL/SQL

• Declare the datatype and size of a PL/SQL variable dynamically

• Write DML statements in PL/SQL

• Control transactions in PL/SQL

• Determine the outcome of SQL DML statements

After completing this lesson, you should After completing this lesson, you should be able to do the following:be able to do the following:

• Write a successful SELECT statement in PL/SQL

• Declare the datatype and size of a PL/SQL variable dynamically

• Write DML statements in PL/SQL

• Control transactions in PL/SQL

• Determine the outcome of SQL DML statements

Page 3: Copyright  Oracle Corporation, 1999. All rights reserved. 18 Interacting with the Oracle Server

18-3 Copyright Oracle Corporation, 1999. All rights reserved.

SQL Statements in PL/SQLSQL Statements in PL/SQL

• Extract a row of data from the database by using the SELECT command. Only a single set of values can be returned.

• Make changes to rows in the database by using DML commands.

• Control a transaction with the COMMIT, ROLLBACK, or SAVEPOINT command.

• Determine DML outcome with implicit cursors.

• Extract a row of data from the database by using the SELECT command. Only a single set of values can be returned.

• Make changes to rows in the database by using DML commands.

• Control a transaction with the COMMIT, ROLLBACK, or SAVEPOINT command.

• Determine DML outcome with implicit cursors.

Page 4: Copyright  Oracle Corporation, 1999. All rights reserved. 18 Interacting with the Oracle Server

18-4 Copyright Oracle Corporation, 1999. All rights reserved.

SELECT Statements in PL/SQLSELECT Statements in PL/SQL

Retrieve data from the database with Retrieve data from the database with SELECT.SELECT.

SyntaxSyntax

Retrieve data from the database with Retrieve data from the database with SELECT.SELECT.

SyntaxSyntaxSELECT select_listINTO {variable_name[, variable_name]...

| record_name} FROM tableWHERE condition;

Page 5: Copyright  Oracle Corporation, 1999. All rights reserved. 18 Interacting with the Oracle Server

18-5 Copyright Oracle Corporation, 1999. All rights reserved.

SELECT Statements in PL/SQLSELECT Statements in PL/SQL

The INTO clause is required.The INTO clause is required.

ExampleExample

The INTO clause is required.The INTO clause is required.

ExampleExampleDECLARE v_deptno NUMBER(2); v_loc VARCHAR2(15);BEGIN SELECT deptno, loc INTO v_deptno, v_loc FROM dept WHERE dname = 'SALES'; ...END;

DECLARE v_deptno NUMBER(2); v_loc VARCHAR2(15);BEGIN SELECT deptno, loc INTO v_deptno, v_loc FROM dept WHERE dname = 'SALES'; ...END;

Page 6: Copyright  Oracle Corporation, 1999. All rights reserved. 18 Interacting with the Oracle Server

18-6 Copyright Oracle Corporation, 1999. All rights reserved.

Retrieving Data in PL/SQLRetrieving Data in PL/SQLRetrieve the order date and the ship date for the specified Retrieve the order date and the ship date for the specified order.order.

ExampleExample

Retrieve the order date and the ship date for the specified Retrieve the order date and the ship date for the specified order.order.

ExampleExample

DECLARE v_orderdate ord.orderdate%TYPE; v_shipdate ord.shipdate%TYPE; BEGIN SELECT orderdate, shipdate INTO v_orderdate, v_shipdate FROM ord WHERE id = 620;

...END;

DECLARE v_orderdate ord.orderdate%TYPE; v_shipdate ord.shipdate%TYPE; BEGIN SELECT orderdate, shipdate INTO v_orderdate, v_shipdate FROM ord WHERE id = 620;

...END;

Page 7: Copyright  Oracle Corporation, 1999. All rights reserved. 18 Interacting with the Oracle Server

18-7 Copyright Oracle Corporation, 1999. All rights reserved.

Retrieving Data in PL/SQLRetrieving Data in PL/SQL

Return the sum of the salaries for all Return the sum of the salaries for all employees in the specified department.employees in the specified department.

ExampleExample

Return the sum of the salaries for all Return the sum of the salaries for all employees in the specified department.employees in the specified department.

ExampleExample

DECLARE v_sum_sal emp.sal%TYPE; v_deptno NUMBER NOT NULL := 10; BEGIN SELECT SUM(sal) -- group function INTO v_sum_sal FROM emp WHERE deptno = v_deptno;END;

Page 8: Copyright  Oracle Corporation, 1999. All rights reserved. 18 Interacting with the Oracle Server

18-8 Copyright Oracle Corporation, 1999. All rights reserved.

INSERT

UPDATE

DELETE

Manipulating Data Using PL/SQLManipulating Data Using PL/SQL

Make changes to database tables by using Make changes to database tables by using DML commands:DML commands:

• INSERT

• UPDATE

• DELETE

Make changes to database tables by using Make changes to database tables by using DML commands:DML commands:

• INSERT

• UPDATE

• DELETE

Page 9: Copyright  Oracle Corporation, 1999. All rights reserved. 18 Interacting with the Oracle Server

18-9 Copyright Oracle Corporation, 1999. All rights reserved.

Inserting DataInserting Data

Add new employee information to the Add new employee information to the EMP table.EMP table.

ExampleExample

Add new employee information to the Add new employee information to the EMP table.EMP table.

ExampleExample

BEGIN INSERT INTO emp(empno, ename, job, deptno) VALUES (empno_sequence.NEXTVAL, 'HARDING',

'CLERK', 10);END;

BEGIN INSERT INTO emp(empno, ename, job, deptno) VALUES (empno_sequence.NEXTVAL, 'HARDING',

'CLERK', 10);END;

Page 10: Copyright  Oracle Corporation, 1999. All rights reserved. 18 Interacting with the Oracle Server

18-10 Copyright Oracle Corporation, 1999. All rights reserved.

Updating DataUpdating Data

Increase the salary of all employees in the Increase the salary of all employees in the EMP table who are Analysts.EMP table who are Analysts.

ExampleExample

Increase the salary of all employees in the Increase the salary of all employees in the EMP table who are Analysts.EMP table who are Analysts.

ExampleExample

DECLARE v_sal_increase emp.sal%TYPE := 2000; BEGIN UPDATE emp SET sal = sal + v_sal_increase WHERE job = 'ANALYST';END;

Page 11: Copyright  Oracle Corporation, 1999. All rights reserved. 18 Interacting with the Oracle Server

18-11 Copyright Oracle Corporation, 1999. All rights reserved.

Deleting DataDeleting Data

Delete rows that belong to department 10 Delete rows that belong to department 10 from the EMP table.from the EMP table.

ExampleExample

Delete rows that belong to department 10 Delete rows that belong to department 10 from the EMP table.from the EMP table.

ExampleExample

DECLARE v_deptno emp.deptno%TYPE := 10; BEGIN DELETE FROM emp WHERE deptno = v_deptno;END;

DECLARE v_deptno emp.deptno%TYPE := 10; BEGIN DELETE FROM emp WHERE deptno = v_deptno;END;

Page 12: Copyright  Oracle Corporation, 1999. All rights reserved. 18 Interacting with the Oracle Server

18-12 Copyright Oracle Corporation, 1999. All rights reserved.

Naming ConventionsNaming Conventions

• Use a naming convention to avoid ambiguity in the WHERE clause.

• Database columns and identifiers should have distinct names.

• Syntax errors can arise because PL/SQL checks the database first for a column in the table.

• Use a naming convention to avoid ambiguity in the WHERE clause.

• Database columns and identifiers should have distinct names.

• Syntax errors can arise because PL/SQL checks the database first for a column in the table.

Page 13: Copyright  Oracle Corporation, 1999. All rights reserved. 18 Interacting with the Oracle Server

18-13 Copyright Oracle Corporation, 1999. All rights reserved.

Naming ConventionsNaming ConventionsDECLARE orderdate ord.orderdate%TYPE; shipdate ord.shipdate%TYPE; ordid ord.ordid%TYPE := 601; BEGIN SELECT orderdate, shipdate INTO orderdate, shipdate FROM ord WHERE ordid = ordid; END;SQL> /DECLARE*ERROR at line 1:ORA-01422: exact fetch returns more than requested number of rowsORA-06512: at line 6

DECLARE orderdate ord.orderdate%TYPE; shipdate ord.shipdate%TYPE; ordid ord.ordid%TYPE := 601; BEGIN SELECT orderdate, shipdate INTO orderdate, shipdate FROM ord WHERE ordid = ordid; END;SQL> /DECLARE*ERROR at line 1:ORA-01422: exact fetch returns more than requested number of rowsORA-06512: at line 6

Page 14: Copyright  Oracle Corporation, 1999. All rights reserved. 18 Interacting with the Oracle Server

18-14 Copyright Oracle Corporation, 1999. All rights reserved.

COMMIT and ROLLBACK Statements

COMMIT and ROLLBACK Statements

• Initiate a transaction with the first DML command to follow a COMMIT or ROLLBACK.

• Use COMMIT and ROLLBACK SQL statements to terminate a transaction explicitly.

• Initiate a transaction with the first DML command to follow a COMMIT or ROLLBACK.

• Use COMMIT and ROLLBACK SQL statements to terminate a transaction explicitly.

Page 15: Copyright  Oracle Corporation, 1999. All rights reserved. 18 Interacting with the Oracle Server

18-15 Copyright Oracle Corporation, 1999. All rights reserved.

SQL CursorSQL Cursor

• A cursor is a private SQL work area.

• There are two types of cursors:

– Implicit cursors

– Explicit cursors

• The Oracle Server uses implicit cursors to parse and execute your SQL statements.

• Explicit cursors are explicitly declared by the programmer.

• A cursor is a private SQL work area.

• There are two types of cursors:

– Implicit cursors

– Explicit cursors

• The Oracle Server uses implicit cursors to parse and execute your SQL statements.

• Explicit cursors are explicitly declared by the programmer.

Page 16: Copyright  Oracle Corporation, 1999. All rights reserved. 18 Interacting with the Oracle Server

18-16 Copyright Oracle Corporation, 1999. All rights reserved.

SQL Cursor AttributesSQL Cursor Attributes

Using SQL cursor attributes, you can test Using SQL cursor attributes, you can test the outcome of your SQL statements. the outcome of your SQL statements. Using SQL cursor attributes, you can test Using SQL cursor attributes, you can test the outcome of your SQL statements. the outcome of your SQL statements. SQL%ROWCOUNT Number of rows affected by the

most recent SQL statement (an integer value)

SQL%FOUND Boolean attribute that evaluates to TRUE if the most recent SQL statement affects one or more rows

SQL%NOTFOUND Boolean attribute that evaluates to TRUE if the most recent SQLstatement does not affect any rows

SQL%ISOPEN Always evaluates to FALSE because PL/SQL closes implicit cursorsimmediately after they are executed

Page 17: Copyright  Oracle Corporation, 1999. All rights reserved. 18 Interacting with the Oracle Server

18-17 Copyright Oracle Corporation, 1999. All rights reserved.

SQL Cursor AttributesSQL Cursor Attributes

Delete rows that have the specified order Delete rows that have the specified order number from the ITEM table. Print the number from the ITEM table. Print the number of rows deleted.number of rows deleted.

ExampleExample

Delete rows that have the specified order Delete rows that have the specified order number from the ITEM table. Print the number from the ITEM table. Print the number of rows deleted.number of rows deleted.

ExampleExample VARIABLE rows_deleted VARCHAR2(30)DECLARE v_ordid NUMBER := 605;BEGIN DELETE FROM item WHERE ordid = v_ordid; :rows_deleted := (SQL%ROWCOUNT || ' rows deleted.');END;/PRINT rows_deleted

Page 18: Copyright  Oracle Corporation, 1999. All rights reserved. 18 Interacting with the Oracle Server

18-18 Copyright Oracle Corporation, 1999. All rights reserved.

SummarySummary

• Embed SQL in the PL/SQL block:

SELECT, INSERT, UPDATE, DELETE

• Embed transaction control statements in a PL/SQL block:

COMMIT, ROLLBACK, SAVEPOINT

• Embed SQL in the PL/SQL block:

SELECT, INSERT, UPDATE, DELETE

• Embed transaction control statements in a PL/SQL block:

COMMIT, ROLLBACK, SAVEPOINT

Page 19: Copyright  Oracle Corporation, 1999. All rights reserved. 18 Interacting with the Oracle Server

18-19 Copyright Oracle Corporation, 1999. All rights reserved.

SummarySummary• There are two cursor types: implicit and

explicit.

• Implicit cursor attributes verify the outcome of DML statements:

– SQL%ROWCOUNT

– SQL%FOUND

– SQL%NOTFOUND

– SQL%ISOPEN

• Explicit cursors are defined by the programmer.

• There are two cursor types: implicit and explicit.

• Implicit cursor attributes verify the outcome of DML statements:

– SQL%ROWCOUNT

– SQL%FOUND

– SQL%NOTFOUND

– SQL%ISOPEN

• Explicit cursors are defined by the programmer.

Page 20: Copyright  Oracle Corporation, 1999. All rights reserved. 18 Interacting with the Oracle Server

18-20 Copyright Oracle Corporation, 1999. All rights reserved.

Practice OverviewPractice Overview

• Creating a PL/SQL block to select data from a table

• Creating a PL/SQL block to insert data into a table

• Creating a PL/SQL block to update data in a table

• Creating a PL/SQL block to delete a record from a table

• Creating a PL/SQL block to select data from a table

• Creating a PL/SQL block to insert data into a table

• Creating a PL/SQL block to update data in a table

• Creating a PL/SQL block to delete a record from a table