Copyright Oracle Corporation, 1998. All rights reserved.
18 18 Interacting with the Oracle Server Interacting with the Oracle Server 18-2 Copyright Oracle Corporation, 1998. All rights reserved. Objectives Objectives After completing this lesson, you should 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 be After completing this lesson, you should be able to do the following: 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 18-3 Copyright Oracle Corporation, 1998. All rights reserved. SQL Statements in PL/SQL SQL 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. 18-4 Copyright Oracle Corporation, 1998. All rights reserved. SELECT Statements in PL/SQL SELECT Statements in PL/SQL Retrieve data from the database with SELECT. Syntax Retrieve data from the database with SELECT. Retrieve data from the database with SELECT. Syntax Syntax SELECT select_list INTO {variable_name[, variable_name]... | record_name} FROM table WHERE condition; SELECT select_list INTO {variable_name[, variable_name]... | record_name} FROM table WHERE condition; PL/SQL - Interactiunea cu serverul Oracle -2 18-5 Copyright Oracle Corporation, 1998. All rights reserved. SELECT Statements in PL/SQL SELECT Statements in PL/SQL INTO clause is required. Example INTO clause is required. INTO clause is required. Example Example DECLARE 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; 18-6 Copyright Oracle Corporation, 1998. All rights reserved. Retrieving Data in PL/SQL Retrieving Data in PL/SQL Retrieve the order date and the ship date for the specified order. Example Retrieve the order date and the ship date for Retrieve the order date and the ship date for the specified order. the specified order. Example Example DECLARE v_orderdate ord.orderdate%TYPE; v_shipdate ord.shipdate%TYPE; BEGIN SELECT orderdate, shipdate INTO v_orderdate, v_shipdate FROM ord WHERE id = 157; ... 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 = 157; ... END; 18-7 Copyright Oracle Corporation, 1998. All rights reserved. Retrieving Data in PL/SQL Retrieving Data in PL/SQL Return the sum of the salaries for all employees in the specified department. Example 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. Example Example 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; 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; 18-8 Copyright Oracle Corporation, 1998. All rights reserved. INSERT UPDATE DELETE Manipulating Data Using PL/SQL Manipulating Data Using PL/SQL Make changes to database tables by using 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 PL/SQL - Interactiunea cu serverul Oracle -3 18-9 Copyright Oracle Corporation, 1998. All rights reserved. Inserting Data Inserting Data Add new employee information to the emp table. Example Add new employee information to the Add new employee information to the emp emp table. table. Example Example DECLARE v_empno emp.empno%TYPE; BEGIN SELECT empno_sequence.NEXTVAL INTO v_empno FROM dual; INSERT INTO emp(empno, ename, job, deptno) VALUES(v_empno, 'HARDING', 'CLERK', 10); END; DECLARE v_empno emp.empno%TYPE; BEGIN SELECT empno_sequence.NEXTVAL INTO v_empno FROM dual; INSERT INTO emp(empno, ename, job, deptno) VALUES(v_empno, 'HARDING', 'CLERK', 10); END; 18-10 Copyright Oracle Corporation, 1998. All rights reserved. Updating Data Updating Data Increase the salary of all employees in the emp table who are Analysts. Example Increase the salary of all employees in the Increase the salary of all employees in the emp emp table who are Analysts. table who are Analysts. Example Example DECLARE v_sal_increase emp.sal%TYPE := 2000; BEGIN UPDATE emp SET sal = sal + v_sal_increase WHERE job = 'ANALYST'; END; 18-11 Copyright Oracle Corporation, 1998. All rights reserved. Deleting Data Deleting Data Delete rows that have belong to department 10 from the emp table. Example Delete rows that have belong to department Delete rows that have belong to department 10 from the 10 from the emp emp table. table. Example Example 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; 18-12 Copyright Oracle Corporation, 1998. All rights reserved. Naming Conventions Naming 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. PL/SQL - Interactiunea cu serverul Oracle -4 18-13 Copyright Oracle Corporation, 1998. All rights reserved. Naming Conventions Naming Conventions DECLARE order_date ord.orderdate%TYPE; ship_date ord.shipdate%TYPE; v_date DATE := SYSDATE; BEGIN SELECT orderdate, shipdate INTO order_date, ship_date FROM ord WHERE shipdate = v_date; END; SQL> / DECLARE * ERROR at line 1: ORA-01403: no data found ORA-06512: at line 6 DECLARE order_date ord.orderdate%TYPE; ship_date ord.shipdate%TYPE; v_date DATE := SYSDATE; BEGIN SELECT orderdate, shipdate INTO order_date, ship_date FROM ord WHERE shipdate = v_date; END; SQL> / DECLARE * ERROR at line 1: ORA-01403: no data found ORA-06512: at line 6 18-14 Copyright Oracle Corporation, 1998. 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. 18-15 Copyright Oracle Corporation, 1998. All rights reserved. SQL Cursor SQL 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. 18-16 Copyright Oracle Corporation, 1998. All rights reserved. SQL Cursor Attributes SQL Cursor Attributes Using SQL cursor attributes, you can test the outcome of your SQL statements. Using SQL cursor attributes, you can test the Using SQL cursor attributes, you can test the outcome of your SQL statements. 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 SQL statement does not affect any rows. SQL%ISOPEN Always evaluates to FALSE because PL/SQL closes implicit cursors immediately after they are executed. PL/SQL - Interactiunea cu serverul Oracle -5 18-17 Copyright Oracle Corporation, 1998. All rights reserved. SQL Cursor Attributes SQL Cursor Attributes Delete rows that have the specified order number from the ITEM table. Print the number of rows deleted. Example Delete rows that have the specified order Delete rows that have the specified order number from the ITEM table. Print the number number from the ITEM table. Print the number of rows deleted. of rows deleted. Example Example VARIABLE rows_deleted DECLARE v_ordid NUMBER := 605; BEGIN DELETE FROM item WHERE ordid = v_ordid; rows_deleted := SQL%ROWCOUNT ||' rows deleted.'); END; PRINT rows_deleted 18-18 Copyright Oracle Corporation, 1998. All rights reserved. Summary Summary 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. 18-19 Copyright Oracle Corporation, 1998. All rights reserved. Summary Summary 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 user. 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 user. 18-20 Copyright Oracle Corporation, 1998. All rights reserved. Practice Overview Practice 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