.

Tuesday, December 18, 2018

'Sql Study Matetial\r'

' oracle/SQL Tutorial1 Michael Gertz entropybase and entropy Systems Group De set outment of Com regurgitateer Science University of California, Davis [email&# virtuoso hundred sixty;protected] ucdavis. edu http://www. db. cs. ucdavis. edu This prophet/SQL tutorial provides a particul atomic number 18d inst whateveration to the SQL interrogative phrase and the illusionist Relational entropybase vigilance System. tho tuition close to(prenominal) Oracle and SQL posterior be shew on the web put togethertle www. db. cs. ucdavis. edu/dbs. Comments, slide downions, or fititions to these n adepts argon welcome. M distributively thanks to Christina Chung for signalizes on the previous r finish upering. Recomm rarityed LiteratureGeorge Koch and Kevin L whizzy: Oracle8 The Complete Reference (The Single close Comprehensive Sourcebook for Oracle Server, Includes CD with electronic version of the book), 1299 pages, McGraw-Hill/Osborne, 1997. Michael Abbey and Michael Co rey: Oracle8 : A Beginner’s Guide [A extreme show for First-time Users], 767 pages, McGraw-Hill/Osborne, 1997. St however Feuerstein, Bill Pribyl, Debby Russell: Oracle PL/SQL computer programing (2nd Edition), O’Reilly & Associates, 1028 pages, 1997. C. J. Date and Hugh Darwen: A Guide to the SQL Standard (4th Edition), Addison-Wesley, 1997. Jim Melton and Alan R.Simon: grounds the New SQL: A Complete Guide (2nd Edition, declination 2000), The Morgan Kaufmann Series in entropy Management Systems, 2000. 1 revised Version 1. 01, January 2000, Michael Gertz, Copyright 2000. Contents 1. SQL †coordinate Query lyric 1. 1. delays 1. 2. Queries (Part I) 1. 3. Data De? nition in SQL 1. 4. Data Modi? cations in SQL 1. 5. Queries (Part II) 1. 6. Views 1 3 6 9 11 19 2. SQL* prescribed (Minimal User Guide, editor in chief in chief program Commands, Help System) 20 3. Oracle Data dictionary 23 4. Application Programming 4. 1. PL/SQL 4. 1. 1 Introduction 4. 1 . 2 Structure of PL/SQL Blocks 4. 1. Declarations 4. 1. 4 speech communication Elements 4. 1. 5 Exception Handling 4. 1. 6 Procedures and Functions 4. 1. 7 Packages 4. 1. 8 Programming in PL/SQL 4. 2. Embedded SQL and Pro*C 26 27 27 28 32 34 36 38 39 5. faithfulness Constraints and Triggers 5. 1. Integrity Constraints 5. 1. 1 Check Constraints 5. 1. 2 international Key Constraints 5. 1. 3 More About Column- and Table Constraints 5. 2. Triggers 5. 2. 1 Over witness 5. 2. 2 Structure of Triggers 5. 2. 3 role model Triggers 5. 2. 4 Programming Triggers 6. System Arc bump intoecture 6. 1. retentivity Management and Processes 6. 2. Logical Database Structures 6. 3.Physical Database Structures 6. 4. Steps in touch on an SQL Statement 6. 5. Creating Database Objects 46 47 49 50 50 53 55 58 60 61 63 63 1 SQL †merged Query Language 1. 1 Tables In resemblanceal entropybase arrangements (DBS) cultivation atomic bet 18 represented smashment remands ( relations ). A c e pr ecise into question get laidd once against the DBS in all grounds ensues in a conf implement. A dodge has the chase social system: Column 1 Column 2 . . . Column n … … … … A prorogue is uniquely identi? ed by its micturate and consists of bourns that throw the m singletary fundd in editionation, sever exclusivelyy course of action containing exactly unity tuple (or record ). A tabular array puke brace private or to a greater extent editorials.A chromatography towboat is make up of a editorial agnomen and a in th actors stock certificateation waste-to doe wi whencece, and it describes an put of the tuples. The building of a submit, as well c al angiotensin-converting enzymeed relation schema, thus is de? ned by its rebootences. The eccentric person of in stageion to be stored in a prorogue is de? ned by the info subjects of the arrogates at instrument panel mental hospital time. SQL put ons the basis tabulari se, row, and newspaper editorial for relation, tuple, and attri thoe, respectively. In this tutorial we willing exp remnantiture the terms interchangeably. A card give the gate let up to 254 tugs which whitethorn confound di? e exact or aforementi geniusnessd(prenominal) entropy theatrical roles and unb mop upings of determines (domains), respectively.Possible domains be alphanumeric entropy ( draw draw), make senses and accompaniment arranges. Oracle o? ers the pursual basic info suits: • char(n): Fixed- distance fiber claimive entropy ( arrange), n characters extensive. The train best size for n is 255 bytes (2000 in Oracle8). government n sensation and serious now(a) that a string of type char is invariably padded on right with blanks to full length of n. ( drive out be memory consuming). illustration: char(40) • varchar2(n): Variable-length character string. The level best size for n is 2000 (4000 in Oracle8). wholly the byte s utilise for a string look storage. sheath: varchar2(80) • chip(o, d): Numeric info type for integers and reals. = over transactly tour of digits, d = recite of digits to the right of the decimal point. maximum determines: o =38, d= ? 84 to +127. mannequins: quash(8), hail(5,2) mark that, e. g. , number(5,2) pot non contain anything larger than 999. 99 without going in an error. Data types derived from number atomic number 18 int[eger], dec[imal], downheartedint and real. • att dismiss: Date pick outive nurture type for storing date and time. The evasion format for a date is: DD-MMM-YY. lawsuits : ’13-OCT-94’, ’07-JAN-98’ 1 • tenacious: Character entropy up to a length of 2GB. Only unrivaled(a) long column is tout ensemble in completely(prenominal)owed per gameboard. an nonating: In Oracle-SQL in that location is no data type boolean.It give the gate, however, be fake by exploitation either char(1 ) or number(1). As long as no reserve secures the potential shoess of an lot, it may keep the particular re n mavin range in well-grounded (for un cognise). This nourish is di? erent from the number 0, and it is excessively di? erent from the pinpoint string ’’. Further properties of h emeritus overs ar: • the revision in which tuples search in a confuse is non relevant (unless a head requires an explicit sorting). • a gameboard has no duplicate tuples (dep annihilateing on the doubt, however, duplicate tuples mountain appear in the enquiry answer). A database schema is a as definite of relation schemas.The quotation of a database schema at database run-time is called a database good example or database, for short. 1. 1. 1 illustrationful Database In the interest talk overions and examples we use an example database to manage randomness to the highest degree employees, discussion sections and profit scales. The fit dining tabulates ass be induced chthonic the UNIX shell utilise the education demobld. The circuit boards evict be dropped by issuing the expect demodrop under the UNIX shell. The slacken EMP is utilise to store information to the highest degree employees: EMPNO ENAME teleph atomic number 53 circuit MGR HIREDATE SAL DEPTNO 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 30 7521WARD SALESMAN 7698 22-FEB-81 1250 30 ………………………………………………….. 7698 BLAKE MANAGER 01-MAY-81 3850 30 7902 FORD ANALYST 7566 03-DEC-81 3000 10 For the propertys, the hobby data types be de? ned: EMPNO:number(4), ENAME:varchar2(30), strain:char(10), MGR:number(4), HIREDATE:date, SAL:number(7,2), DEPTNO:number(2) for from for each(prenominal) one one one row (tuple) from the accede is interpreted as follows: an employee has a number, a build, a hypot hecate appellation and a salary. Further more, for each employee the number of his/her theater director, the date he/she was engage, and the number of the incision where he/she is on the joke(p) be stored. 2The bow DEPT stores information near subdivisions (number, disclose, and location): DEPTNO 10 20 30 40 DNAME STORE RESEARCH SALES trade LOC CHICAGO DALLAS NEW YORK BOSTON Finally, the accede SALGRADE contains all information about the salary scales, more precisely, the maximum and minimum salary of each scale. GRADE 1 2 3 4 5 1. 2 LOSAL 700 1201 1401 2001 3001 HISAL 1200 1400 2000 3000 9999 Queries (Part I) In allegeing to retrieve the information stored in the database, the SQL interrogation language is utilise. In the pursuance we restrict our attention to simplistic SQL queries and defer the discussion of more complex queries to function 1. In SQL a call into question has the chase (simpli? ed) form (components in brackets [ ] be natural getional): make out [distinct] from [ where ] [ ramble by ] 1. 2. 1 alloting Columns The columns to be readed from a add-in atomic number 18 speci? ed aft(prenominal) the primalword distribute. This subprogram is likewise called flipion. For example, the question drive LOC, DEPTNO from DEPT; lists scarcely the number and the location for each tuple from the relation DEPT. If all columns should be distinguished, the asterisk symbol â€Å"? ” kindle be utilise to de none all attributes. The query require ? from EMP; retrieves all tuples with all columns from the table EMP. preferably of an attribute evoke, the mete out article may besides contain arithmetical vistas involving arithmetic operators and so on hire ENAME, DEPTNO, SAL ? 1. 55 from EMP; 3 For the di? erent data types supported in Oracle, several operators and functions ar provided: • for be racket: abs, cos, sin, exp, log, power, mod, sqrt, +, ? , ? , /, . . . • for strings: chr, concat( string1, string2), trim, fastness, stand in(string, search string, replacement string), translate, substr(string, m, n), length, to date, . . . • for the date data type: add month, month betwixt, next day, to char, . . The practice of these public presentations is described in detail in the SQL*addition assistant system (see likewise variance 2). Consider the query rent DEPTNO from EMP; which retrieves the discussion section number for each tuple. Typically, some numbers will appear more than but erst in the query result, that is, duplicate result tuples atomic number 18 non mechanically eliminated. Inserting the primevalword distinct after the keyword recognise, however, forces the elimination of duplicates from the query result. It is in addition mathematical to state a sorting order in which the result tuples of a query are displayed.For this the order by article is apply and which has one or more attributes listed in the postulate article as controv ersy. desc speci? es a descending order and asc speci? es an ascending order (this is also the default order). For example, the query select ENAME, DEPTNO, HIREDATE from EMP; from EMP order by DEPTNO [asc], HIREDATE desc; displays the result in an ascending order by the attribute DEPTNO. If 2 tuples have the kindred attribute appreciate for DEPTNO, the sorting criteria is a descending order by the attribute honour of HIREDATE. For the to a higher place query, we would get the following yield: ENAME DEPTNO HIREDATEFORD 10 03-DEC-81 SMITH 20 17-DEC-80 BLAKE 30 01-MAY-81 WARD 30 22-FEB-81 ALLEN 30 20-FEB-81 ……………………… 1. 2. 2 option of Tuples Up to now we have lone(prenominal) center on selecting (some) attributes of all tuples from a table. If one is implicated in tuples that satisfy certain rails, the where article is utilise. In a where clause simple physical bodys based on similitude operators give the sack be un ite victimisation the logical connectives and, or, and non to form complex fits. Conditions may also include pattern matching operations and even subqueries ( office 1. 5). 4 archetype:List the job title and the salary of those employees whose motorcoach has the number 7698 or 7566 and who garner more than 1500: select pipe disembowel, SAL from EMP where (MGR = 7698 or MGR = 7566) and SAL > 1500; For all data types, the comparison operators =, ! = or , , are deed overed in the peg downs of a where clause. Further comparison operators are: • desexualize Conditions: [not] in () Example: select ? from DEPT where DEPTNO in (20,30); • invalid apprize: is [not] useless, i. e. , for a tuple to be selected at that place essential(prenominal) (not) exist a de? ned value for this column. Example: select ? from EMP where MGR is not nil; Note: the operations = idle and ! trivial are not de? ned! • Domain conditions: [not] amidst and Example: • sel ect EMPNO, ENAME, SAL from EMP where SAL amid 1500 and 2500; • select ENAME from EMP where HIREDATE between ’02-APR-81’ and ’08-SEP-81’; 1. 2. 3 String Operations In order to compare an attribute with a string, it is required to ring the string by apostrophes, e. g. , where LOCATION = ’DALLAS’. A almighty operator for pattern matching is the like operator. in concert with this operator, two special characters are employ: the percent sign % (also called wild card), and the underline , also called go under marker.For example, if one is interested in all tuples of the table DEPT that contain two C in the name of the surgical incision, the condition would be where DNAME like ’%C%C%’. The percent sign means that any (sub)string is allowed in that location, even the give up string. In counterpoint, the underline stands for exactly one character. indeed the condition where DNAME like ’%C C%’ would require that exactly one character appears between the two Cs. To test for inequality, the not clause is use. Further string operations are: • upper() takes a string and converts any earns in it to upper study, e. g. DNAME = upper(DNAME) (The name of a subdivision must(prenominal) consist altogether of upper baptismal font letters. ) • lower() converts any letter to lowercase, • initcap() converts the initial letter of every word in to uppercase. • length() returns the length of the string. • substr(, n [, m]) clips out a m character piece of music of , starting at position n. If m is not speci? ed, the end of the string is assumed. substr(’DATABASE SYSTEMS’, 10, 7) returns the string ’SYSTEMS’. 5 1. 2. 4 flux Functions Aggregate functions are statistical functions such as count, min, max etc. They are employ to compute a single value from a laid of attribute locate of a column: count ax min sum avg Note: 1. 3 1. 3. 1 Counting Rows Example: How legion(predicate) tuples are stored in the relation EMP? select count(? ) from EMP; Example: How many di? erent job titles are stored in the relation EMP? select count(distinct cable) from EMP; Maximum value for a column Minimum value for a column Example: List the minimum and maximum salary. select min(SAL), max(SAL) from EMP; Example: Compute the di? erence between the minimum and maximum salary. select max(SAL) †min(SAL) from EMP; Computes the sum of values ( and applicable to the data type number) Example: Sum of all salaries of employees working in the incision 30. elect sum(SAL) from EMP where DEPTNO = 30; Computes average value for a column (only applicable to the data type number) avg, min and max ignore tuples that have a aught value for the speci? ed attribute, but count considers nil values. Data De? nition in SQL Creating Tables The SQL neglect for creating an empty table has the following form: make water table ( [not unavailing] [unique] [], ……… [not null] [unique] [], [] ); For each column, a name and a data type must be speci? ed and the column name must be unique at heart the table de? nition. Column de? nitions are uncaring by colons. thither is no di? rence between label in lower case letters and names in upper case letters. In fact, the only place where upper and lower case letters numerate are strings comparisons. A not null 6 inhibit is directly speci? ed after the data type of the column and the constraint requires de? ned attribute values for that column, di? erent from null. The keyword unique speci? es that no two tuples rear have the aforesaid(prenominal) attribute value for this column. Unless the condition not null is also speci? ed for this column, the attribute value null is allowed and two tuples having the attribute value null for this column do not violate the constraint.Example: The create table ensure for our EMP table has the form create table EMP ( EMPNO number(4) not null, ENAME varchar2(30) not null, JOB varchar2(10), MGR number(4), HIREDATE date, SAL number(7,2), DEPTNO number(2) ); Remark: Except for the columns EMPNO and ENAME null values are allowed. 1. 3. 2 Constraints The de? nition of a table may include the speci? cation of truth constraints. Basically two types of constraints are provided: column constraints are associated with a single column whereas table constraints are typically associated with more than one column.However, any column constraint arsehole also be formulated as a table constraint. In this section we consider only very simple constraints. More complex constraints will be discussed in department 5. 1. The speci? cation of a (simple) constraint has the following form: [constraint ] ancient key | unique | not null A constraint provoke be named. It is advisable to name a constraint in order to get more important information when this constraint is violated due to, e. g. , an introduceion of a tuple t hat violates the constraint. If no name is speci? ed for the constraint, Oracle freeally generates a name of the pattern SYS C.The two nearly simple types of constraints have already been discussed: not null and unique. Probably the more or less historic type of fair play constraints in a database are primary key constraints. A primary key constraint enables a unique identi? cation of each tuple in a table. establish on a primary key, the database system ensures that no duplicates appear in a table. For example, for our EMP table, the speci? cation create table EMP ( EMPNO number(4) constraint pk emp primary key, . . . ); 7 de? nes the attribute EMPNO as the primary key for the table. to each one value for the attribute EMPNO thus must appear only once in the table EMP.A table, of course, may only have one primary key. Note that in contrast to a unique constraint, null values are not allowed. Example: We extremity to create a table called find out to store information about aims. For each project, we want to store the number and the name of the project, the employee number of the project’s manager, the figure and the number of persons working on the project, and the start date and end date of the project. Furthermore, we have the following conditions: †a project is identi? ed by its project number, †the name of a project must be unique, †the manager and the budget must be de? ed. Table de? nition: create table PROJECT ( PNO number(3) constraint prj pk primary key, PNAME varchar2(60) unique, PMGR number(4) not null, PERSONS number(5), reckon number(8,2) not null, PSTART date, PEND date); A unique constraint shadow include more than one attribute. In this case the pattern unique(, . . . , ) is employ. If it is required, for example, that no two projects have the equal start and end date, we have to add the table constraint constraint no same dates unique(PEND, PSTART) This constraint has to be de? ned in the create table pre vail after both columns PEND and PSTART have been de? ed. A primary key constraint that includes more than only one column butt be speci? ed in an analogous direction. Instead of a not null constraint it is sometimes serviceable to testify a default value for an attribute if no value is assumption, e. g. , when a tuple is get ined. For this, we use the default clause. Example : If no start date is condition when close ining a tuple into the table PROJECT, the project start date should be plant to January 1st, 1995: PSTART date default(’01-JAN-95’) Note: Unlike integrity constraints, it is not thinkable to specify a name for a default. 8 1. 3. 3 Checklist for Creating TablesThe following provides a small determinelist for the issues that read to be considered forrader creating a table. • What are the attributes of the tuples to be stored? What are the data types of the attributes? Should varchar2 be employ rather of char ? • Which columns build the primary key? • Which columns do (not) allow null values? Which columns do (not) allow duplicates ? • Are thither default values for certain columns that allow null values ? 1. 4 Data Modi? cations in SQL after a table has been created victimisation the create table look across, tuples fecal matter be inserted into the table, or tuples arse be set offd or modi? ed. 1. 4. 1Insertions The intimately simple way to insert a tuple into a table is to use the insert contestation insert into [()] values (); For each of the listed columns, a corresponding (matching) value must be speci? ed. Thus an insertion does not necessarily have to follow the order of the attributes as speci? ed in the create table debate. If a column is omitted, the value null is inserted instead. If no column list is given, however, for each column as de? ned in the create table bidding a value must be given. Examples: insert into PROJECT(PNO, PNAME, PERSONS, BUDGET, PSTART) values(313, â€⠄¢DBS’, 4, 150000. 42, ’10-OCT-94’); r insert into PROJECT values(313, ’DBS’, 7411, null, 150000. 42, ’10-OCT-94’, null); If there are already some data in other tables, these data tramp be employ for insertions into a new table. For this, we spell a query whose result is a set of tuples to be inserted. much(prenominal) an insert tale has the form insert into [()] Example: Suppose we have de? ned the following table: 9 create table OLDEMP ( ENO number(4) not null, HDATE date); We now rear use the table EMP to insert tuples into this new relation: insert into OLDEMP (ENO, HDATE) select EMPNO, HIREDATE from EMP where HIREDATE < ’31-DEC-60’; 1. 4. 2 UpdatesFor modifying attribute values of (some) tuples in a table, we use the update narrative: update set = , . . . , = [where ]; An expression consists of either a constant (new value), an arithmetic or string operation, or an SQL query. Note that the new value to fi x to must a the matching data type. An update instruction without a where clause results in changing respective attributes of all tuples in the speci? ed table. Typically, however, only a (small) portion of the table requires an update. Examples: • The employee JONES is transfered to the department 20 as a manager and his salary is increased by 1000: pdate EMP set JOB = ’MANAGER’, DEPTNO = 20, SAL = SAL +1000 where ENAME = ’JONES’; • All employees working in the departments 10 and 30 get a 15% salary increase. update EMP set SAL = SAL ? 1. 15 where DEPTNO in (10,30); Analogous to the insert statement, other tables drive out be utilise to retrieve data that are used as new values. In such a case we have a instead of an . Example: All salesmen working in the department 20 get the same salary as the manager who has the lowest salary among all managers. update EMP set SAL = (select min(SAL) from EMP where JOB = ’MANAGER’) where JO B = ’SALESMAN’ and DEPTNO = 20; invoice: The query retrieves the minimum salary of all managers. This value then is destine to all salesmen working in department 20. 10 It is also likely to specify a query that retrieves more than only one value (but still only one tuple! ). In this case the set clause has the form set() = . It is of the essence(p) that the order of data types and values of the selected row exactly correspond to the list of columns in the set clause. 1. 4. 3 Deletions All or selected tuples washstand be deleted from a table utilize the delete govern: delete from [where ]; If the where clause is omitted, all tuples are deleted from the table.An bowdlerizenative take for deleting all tuples from a table is the truncate table summons. However, in this case, the deletions cannot be undone (see subsequent Section 1. 4. 4). Example: Delete all projects (tuples) that have been ? nished in advance the actual date (system date): delete from PROJECT w here PEND < sysdate; sysdate is a function in SQL that returns the system date. Another important SQL function is exploiter, which returns the name of the exploiter logged into the flow rate Oracle session. 1. 4. 4 Commit and Rollback A installment of database modi? cations, i. e. , a sequence of insert, update, and delete statements, is called a transaction.Modi? cations of tuples are temporarily stored in the database system. They become permanent only after the statement commit; has been issued. As long as the exploiter has not issued the commit statement, it is feasible to undo all modi? cations since the dwell commit. To undo modi? cations, one has to issue the statement rollback;. It is advisable to complete each modi? cation of the database with a commit (as long as the modi? cation has the expected e? ect). Note that any data de? nition domination such as create table results in an internal commit. A commit is also implicitly executed when the substance abuser te rminates an Oracle session. . 5 Queries (Part II) In Section 1. 2 we have only focused on queries that refer to exactly one table. Furthermore, conditions in a where were restricted to simple comparisons. A major(ip) feature of relational databases, however, is to combine (join) tuples stored in di? erent tables in order to display more meaningful and complete information. In SQL the select statement is used for this kind of queries joining relations: 11 select [distinct] [. ], . . . , [. ] from [], . . . , [] [where ] The speci? cation of table fictitious namees in the from clause is necessary to refer to columns that have the same name in di? rent tables. For example, the column DEPTNO occurs in both EMP and DEPT. If we want to refer to either of these columns in the where or select clause, a table alias has to be speci? ed and put in the front of the column name. Instead of a table alias also the complete relation name can be put in front of the column such as DEPT. DEPTNO, but this sometimes can lead to rather elongated query formulations. 1. 5. 1 Joining Relations Comparisons in the where clause are used to combine rows from the tables listed in the from clause. Example : In the table EMP only the numbers of the departments are stored, not their name.For each salesman, we now want to retrieve the name as well as the number and the name of the department where he is working: select ENAME, E. DEPTNO, DNAME from EMP E, DEPT D where E. DEPTNO = D. DEPTNO and JOB = ’SALESMAN’; business relationship: E and D are table aliases for EMP and DEPT, respectively. The computation of the query result occurs in the following manner (without optimization): 1. all(prenominal) row from the table EMP is combined with each row from the table DEPT (this operation is called Cartesian excavateuct ). If EMP contains m rows and DEPT contains n rows, we thus get n ? m rows. 2.From these rows those that have the same department number are selected (where E. DEPT NO = D. DEPTNO). 3. From this result ? nally all rows are selected for which the condition JOB = ’SALESMAN’ holds. In this example the joining condition for the two tables is based on the equality operator â€Å"=”. The columns compared by this operator are called join columns and the join operation is called an equijoin. Any number of tables can be combined in a select statement. Example: For each project, retrieve its name, the name of its manager, and the name of the department where the manager is working: select ENAME, DNAME, PNAME rom EMP E, DEPT D, PROJECT P where E. EMPNO = P. MGR and D. DEPTNO = E. DEPTNO; 12 It is even practical to join a table with itself: Example: List the names of all employees together with the name of their manager: select E1. ENAME, E2. ENAME from EMP E1, EMP E2 where E1. MGR = E2. EMPNO; translation: The join columns are MGR for the table E1 and EMPNO for the table E2. The equijoin comparison is E1. MGR = E2. EMPNO. 1. 5. 2 Su bqueries Up to now we have only concentrated on simple comparison conditions in a where clause, i. e. , we have compared a column with a constant or we have compared two columns.As we have already seen for the insert statement, queries can be used for assignments to columns. A query result can also be used in a condition of a where clause. In such a case the query is called a subquery and the complete select statement is called a nested query. A respective condition in the where clause then can have one of the following forms: 1. Set-valued subqueries [not] in () [any|all] () An can either be a column or a computed value. 2. campaign for (non)existence [not] exists () In a where clause conditions using subqueries can be combined arbitrarily by using the logical connectives and and or.Example: List the name and salary of employees of the department 20 who are leading a project that started before December 31, 1990: select ENAME, SAL from EMP where EMPNO in (select PMGR from PROJECT where PSTART < ’31-DEC-90’) and DEPTNO =20; Explanation: The subquery retrieves the set of those employees who manage a project that started before December 31, 1990. If the employee working in department 20 is contained in this set (in operator), this tuple belongs to the query result set. Example: List all employees who are working in a department find in BOSTON: 13 select ? from EMP where DEPTNO in select DEPTNO from DEPT where LOC = ’BOSTON’); The subquery retrieves only one value (the number of the department located in Boston). Thus it is viable to use â€Å"=” instead of in. As long as the result of a subquery is not cognize in advance, i. e. , whether it is a single value or a set, it is advisable to use the in operator. A subquery may use again a subquery in its where clause. Thus conditions can be nested arbitrarily. An important sectionalization of subqueries are those that refer to its surrounding (sub)query and the tables liste d in the from clause, respectively. Such type of queries is called cor associate subqueries.Example: List all those employees who are working in the same department as their manager (note that components in [ ] are optional: select ? from EMP E1 where DEPTNO in (select DEPTNO from EMP [E] where [E. ]EMPNO = E1. MGR); Explanation: The subquery in this example is link to its surrounding query since it refers to the column E1. MGR. A tuple is selected from the table EMP (E1) for the query result if the value for the column DEPTNO occurs in the set of values select in the subquery. wizard can think of the evaluation of this query as follows: For each tuple in the table E1, the subquery is evaluated individually.If the condition where DEPTNO in . . . evaluates to true, this tuple is selected. Note that an alias for the table EMP in the subquery is not necessary since columns without a preceding alias listed there incessantly refer to the inner intimately query and tables. Conditions o f the form [any|all] are used to compare a given with each value selected by . • For the clause any, the condition evaluates to true if there exists at least(prenominal) on row selected by the subquery for which the comparison holds. If the subquery stomachs an empty result set, the condition is not satis? ed. For the clause all, in contrast, the condition evaluates to true if for all rows selected by the subquery the comparison holds. In this case the condition evaluates to true if the subquery does not yield any row or value. Example: reanimate all employees who are working in department 10 and who earn at least as much as any (i. e. , at least one) employee working in department 30: select ? from EMP where SAL >= any (select SAL from EMP where DEPTNO = 30) and DEPTNO = 10; 14 Note: in any case in this subquery no aliases are necessary since the columns refer to the inner close from clause.Example: List all employees who are not working in department 30 and who earn m ore than all employees working in department 30: select ? from EMP where SAL > all (select SAL from EMP where DEPTNO = 30) and DEPTNO 30; For all and any, the following equivalences hold: in ? = any not in ? all or ! = all frequently a query result depends on whether certain rows do (not) exist in (other) tables. Such type of queries is formulated using the exists operator. Example: List all departments that have no employees: select ? from DEPT where not exists (select ? from EMP where DEPTNO = DEPT.DEPTNO); Explanation: For each tuple from the table DEPT, the condition is square uped whether there exists a tuple in the table EMP that has the same department number (DEPT. DEPTNO). In case no such tuple exists, the condition is satis? ed for the tuple under consideration and it is selected. If there exists a corresponding tuple in the table EMP, the tuple is not selected. 1. 5. 3 Operations on Result Sets sometimes it is multipurpose to combine query results from two or more q ueries into a single result. SQL supports trinity set operators which have the pattern: The set operators are: commingle [all] returns a table consisting of all rows either appearing in the result of or in the result of . Duplicates are automatically eliminated unless the clause all is used. • hybridize returns all rows that appear in both results and . • disconfirming returns those rows that appear in the result of but not in the result of . 15 Example: strickle that we have a table EMP2 that has the same structure and columns as the table EMP: • All employee numbers and names from both tables: select EMPNO, ENAME from EMP union select EMPNO, ENAME from EMP2; • Employees who are listed in both EMP and EMP2: select ? from EMP intersect select ? from EMP2; Employees who are only listed in EMP: select ? from EMP electronegative select ? from EMP2; Each operator requires that both tables have the same data types for the columns to which the operator is a pplied. 1. 5. 4 classify In Section 1. 2. 4 we have seen how inwardness functions can be used to compute a single value for a column. Often applications require radicaling rows that have certain properties and then applying an accumulate function on one column for each group separately. For this, SQL provides the clause group by . This clause appears after the where clause and must refer to columns of tables listed in the from clause. select from here group by [having ]; Those rows retrieved by the selected clause that have the same value(s) for are grouped. Aggregations speci? ed in the select clause are then applied to each group separately. It is important that only those columns that appear in the clause can be listed without an aggregate function in the select clause ! Example: For each department, we want to retrieve the minimum and maximum salary. select DEPTNO, min(SAL), max(SAL) from EMP group by DEPTNO; Rows from the table EMP are grouped such that all rows in a group have the same department number. The aggregate functions are then applied to each such group.We thus get the following query result: 16 DEPTNO 10 20 30 MIN(SAL) 1300 800 950 MAX(SAL) 5000 3000 2850 Rows to form a group can be restricted in the where clause. For example, if we add the condition where JOB = ’CLERK’, only respective rows build a group. The query then would retrieve the minimum and maximum salary of all clerks for each department. Note that is not allowed to specify any other column than DEPTNO without an aggregate function in the select clause since this is the only column listed in the group by clause (is it also easy to see that other columns would not make any sense).Once groups have been formed, certain groups can be eliminated based on their properties, e. g. , if a group contains less than trey rows. This type of condition is speci? ed using the having clause. As for the select clause also in a having clause only and aggregations can be used. Examp le: find oneself the minimum and maximum salary of clerks for each department having more than three clerks. select DEPTNO, min(SAL), max(SAL) from EMP where JOB = ’CLERK’ group by DEPTNO having count(? ) > 3; Note that it is even possible to specify a subquery in a having clause.In the above query, for example, instead of the constant 3, a subquery can be speci? ed. A query containing a group by clause is covered in the following way: 1. Select all rows that satisfy the condition speci? ed in the where clause. 2. From these rows form groups according to the group by clause. 3. jug all groups that do not satisfy the condition in the having clause. 4. Apply aggregate functions to each group. 5. Retrieve values for the columns and aggregations listed in the select clause. 1. 5. 5 any(prenominal) Comments on Tables Accessing tables of other usersProvided that a user has the claim to glide slope tables of other users (see also Section 3), she/he can refer to these tables in her/his queries. Let be a user in the Oracle system and a table of this user. This table can be approach pathed by other (privileged) users using the command select ? from . ; 17 In case that one much refers to tables of other users, it is useful to use a equivalent word instead of .. In Oracle-SQL a synonym can be created using the command create synonym for . ; It is then possible to use simply in a from clause. Synonyms can also be created for one’s own tables. Adding Comments to De? nitionsFor applications that include numerous tables, it is useful to add comments on table de? nitions or to add comments on columns. A comment on a table can be created using the command comment on table is ’’; A comment on a column can be created using the command comment on column . is ’’; Comments on tables and columns are stored in the data dictionary. They can be admission feeed using the data dictionary charms exploiter TAB COMMENTS and subs tance abuser COL COMMENTS (see also Section 3). Modifying Table- and Column De? nitions It is possible to modify the structure of a table (the relation schema) even if rows have already been inserted into this table.A column can be added using the interchange table command alter table add( [default ] []); If more than only one column should be added at one time, respective add clauses need to be separated by colons. A table constraint can be added to a table using alter table add (); Note that a column constraint is a table constraint, too. not null and primary key constraints can only be added to a table if none of the speci? ed columns contains a null value. Table de? nitions can be modi? ed in an analogous way. This is useful, e. g. , when the size of strings that can be stored needs to be increased.The phrase structure of the command for modifying a column is alter table modify( [] [default ] []); Note: In earlier versions of Oracle it is not possible to delete single columns from a table de? nition. A workaround is to create a temporary table and to re-create respective columns and rows into this new table. Furthermore, it is not possible to rename tables or columns. In the most new-fangled version (9i), using the alter table command, it is possible to rename a table, columns, and constraints. In this version, there also exists a drop column clause as part of the alter table statement. Deleting a TableA table and its rows can be deleted by issuing the command drop table [cascade constraints];. 18 1. 6 Views In Oracle the SQL command to create a view (virtual table) has the form create [or replace] view [()] as [with kibosh option [constraint ]]; The optional clause or replace re-creates the view if it already exists. names the columns of the view. If is not speci? ed in the view de? nition, the columns of the view get the same names as the attributes listed in the select statement (if possible). Example: The following view contains the name, job titl e and the annual salary of employees working in the department 20: create view DEPT20 as elect ENAME, JOB, SAL? 12 yearbook SALARY from EMP where DEPTNO = 20; In the select statement the column alias ANNUAL SALARY is speci? ed for the expression SAL? 12 and this alias is taken by the view. An alternative formulation of the above view de? nition is create view DEPT20 (ENAME, JOB, ANNUAL SALARY) as select ENAME, JOB, SAL ? 12 from EMP where DEPTNO = 20; A view can be used in the same way as a table, that is, rows can be retrieved from a view (also respective rows are not physically stored, but derived on basis of the select statement in the view de? ition), or rows can even be modi? ed. A view is evaluated again each time it is accessed. In Oracle SQL no insert, update, or delete modi? cations on views are allowed that use one of the following bring into beings in the view de? nition: • Joins • Aggregate function such as sum, min, max etc. • set-valued subqueries ( in, any, all) or test for existence (exists) • group by clause or distinct clause In combination with the clause with check option any update or insertion of a row into the view is rejected if the new/modi? ed row does not meet the view de? nition, i. e. these rows would not be selected based on the select statement. A with check option can be named using the constraint clause. A view can be deleted using the command delete . 19 2 SQL* sum gist Introduction SQL*Plus is the interactive (low-level) user embrasure to the Oracle database management system. Typically, SQL*Plus is used to issue ad-hoc queries and to view the query result on the secrete. almost of the features of SQL*Plus are: • A built-in command line editor can be used to edit (incorrect) SQL queries. Instead of this line editor any editor installed on the computer can be upgraded. There are numerous commands to format the produce of a query. • SQL*Plus provides an online- function. • Query results can be stored in ? les which then can be printed. Queries that are frequently issued can be andd to a ? le and invoked later. Queries can be parameterized such that it is possible to invoke a deliver query with a parameter. A Minimal User Guide sooner you start SQL*Plus make sure that the following UNIX shell variable quantitys are properly set (shell variables can be checked using the env command, e. g. , env | grep visionary): • ORACLE sign, e. g. , ORACLE HOME=/usr/pkg/oracle/734 • ORACLE SID, e. , ORACLE SID=prod In order to invoke SQL*Plus from a UNIX shell, the command sqlplus has to be issued. SQL*Plus then displays some information about the product, and brisks you for your user name and intelligence for the Oracle system. gertz(catbert)54: sqlplus SQL*Plus: let go 3. 3. 4. 0. 1 †employment on Sun Dec 20 19:16:52 1998 Copyright (c) Oracle muckle 1979, 1996. All rights reserved. Enter user-name: scott Enter tidings: connected to: Oracle7 Server Release 7. 3. 4. 0. 1 †Production Release With the distributed option PL/SQL Release 2. 3. 4. 0. 0 †Production SQL> 20SQL> is the prompt you get when you are connected to the Oracle database system. In SQL*Plus you can divide a statement into separate lines, each continuing line is indicated by a prompt such 2>, 3> etc. An SQL statement must always be terminate by a semicolon (;). In addendum to the SQL statements discussed in the previous section, SQL*Plus provides some special SQL*Plus commands. These commands need not be terminate by a semicolon. Upper and lower case letters are only important for string comparisons. An SQL query can always be disrupt by using C. To travel by SQL*Plus you can either type exit or quit.Editor Commands The most lately issued SQL statement is stored in the SQL bu? er, independent of whether the statement has a correct syntax or not. You can edit the bu? er using the following commands: • l[ist] lists all lines in the SQL bu? er and sets the current line (marked with an ”? ”) to the last line in the bu? er. • l sets the actual line to • c[hange]// replaces the ? rst occurrence of by (for the actual line) • a[ppend] appends to the current line • del deletes the current line • r[un] executes the current bu? er table of contents • get reads the data from the ? le into the bu? er • save writes the current bu? r into the ? le • edit invokes an editor and loads the current bu? er into the editor. After exiting the editor the modi? ed SQL statement is stored in the bu? er and can be executed (command r). The editor can be de? ned in the SQL*Plus shell by typewriting the command de? ne editor = , where can be any editor such as emacs, vi, joe, or jove. SQL*Plus Help System and new(prenominal) usable Commands • To get the online help in SQL*Plus just type help , or just help to get information about how to use the help command. In Oracle Version 7 one can get the complete list of possible commands by typing help command. To change the password, in Oracle Version 7 the command alter user identi? ed by ; is used. In Oracle Version 8 the command passw prompts the user for the old/new password. • The command desc[ribe] lists all columns of the given table together with their data types and information about whether null values are allowed or not. • You can invoke a UNIX command from the SQL*Plus shell by using host . For example, host ls -la *. sql lists all SQL ? les in the current directory. 21 • You can log your SQL*Plus session and thus queries and query results by using the command spool .All information displayed on screen is then stored in which automatically gets the extension . lst. The command spool o? turns spooling o?. • The command copy can be used to copy a complete table. For example, the command copy from scott/tiger create EMPL using select ? from EMP; copies the table EM P of the user scott with password tiger into the relation EMPL. The relation EMP is automatically created and its structure is derived based on the attributes listed in the select clause. • SQL commands saved in a ? le . sql can be loaded into SQL*Plus and executed using the command @. Comments are introduced by the clause rem[ark] (only allowed between SQL statements), or ††(allowed within SQL statements). Formatting the Output SQL*Plus provides numerous commands to format query results and to build simple reports. For this, format variables are set and these settings are only valid during the SQL*Plus session. They get lost after terminating SQL*Plus. It is, however, possible to save settings in a ? le named login. sql in your home directory. Each time you invoke SQL*Plus this ? le is automatically loaded. The command column . . . is used to format columns of your query result.The most frequently used options are: • format A For alphanumeric data, this option sets the length of to . For columns having the data type number, the format command can be used to specify the format before and after the decimal point. For example, format 99,999. 99 speci? es that if a value has more than three digits in front of the decimal point, digits are separated by a colon, and only two digits are displayed after the decimal point. • The option heading relabels and gives it a new heading. • null is used to specify the output of null values (typically, null values are not displayed). column clear deletes the format de? nitions for . The command set linesize can be used to set the maximum length of a single line that can be displayed on screen. set pagesize sets the total number of lines SQL*Plus displays before printing the column names and headings, respectively, of the selected rows. Several other formatting features can be enabled by setting SQL*Plus variables. The command show all displays all variables and their current values. To set a va riable, type set . For example, set measure on causes SQL*Plus to display timing statistics for each SQL command that is executed. et pause on [] makes SQL*Plus calculate for you to press Return after the number of lines de? ned by set pagesize has been displayed. is the message SQL*Plus will display at the bottom of the screen as it waits for you to hit Return. 22 3 Oracle Data mental lexicon The Oracle data dictionary is one of the most important components of the Oracle DBMS. It contains all information about the structures and objects of the database such as tables, columns, users, data ? les etc. The data stored in the data dictionary are also often called metadata.Although it is usually the domain of database administrators (DBAs), the data dictionary is a valuable source of information for end users and developers. The data dictionary consists of two levels: the internal level contains all base tables that are used by the various(a) DBMS software components and they are o rdinarily not affable by end users. The outside level provides numerous views on these base tables to access information about objects and structures at di? erent levels of detail. 3. 1 Data Dictionary Tables An installation of an Oracle database always includes the creation of three standard Oracle users: SYS: This is the owner of all data dictionary tables and views. This user has the highest privileges to manage objects and structures of an Oracle database such as creating new users. • SYSTEM: is the owner of tables used by di? erent tools such SQL*Forms, SQL*Reports etc. This user has less privileges than SYS. • PUBLIC: This is a â€Å"dummy” user in an Oracle database. All privileges assigned to this user are automatically assigned to all users know in the database. The tables and views provided by the data dictionary contain information about • users and their privileges, tables, table columns and their data types, integrity constraints, indexes, â €¢ statistics about tables and indexes used by the optimizer, • privileges granted on database objects, • storage structures of the database. The SQL command select ? from DICT[IONARY]; lists all tables and views of the data dictionary that are genial to the user. The selected information includes the name and a short description of each table and view. Before issuing this query, check the column de? nitions of DICT[IONARY] using desc DICT[IONARY] and set the appropriate values for column using the format command. The query select ? from TAB; etrieves the names of all tables owned by the user who issues this command. The query select ? from COL; 23 returns all information about the columns of one’s own tables. Each SQL query requires various internal accesses to the tables and views of the data dictionary. Since the data dictionary itself consists of tables, Oracle has to generate numerous SQL statements to check whether the SQL command issued by a user is cor rect and can be executed. Example: The SQL query select ? from EMP where SAL > 2000; requires a veri? cation whether (1) the table EMP exists, (2) the user has the privilege to access this table, (3) the column SAL is de? ed for this table etc. 3. 2 Data Dictionary Views The external level of the data dictionary provides users a front end to access information relevant to the users. This level provides numerous views (in Oracle7 just about 540) that represent (a portion of the) data from the base tables in a readable and understandable manner. These views can be used in SQL queries just like radiation pattern tables. The views provided by the data dictionary are change integrity into three groups: user, ALL, and DBA. The group name builds the pre? x for each view name. For some views, there are associated synonyms as given in brackets below. exploiter : Tuples in the user views contain information about objects owned by the account performing the SQL query (current user) d rug user TABLES user USER USER USER USER USER CATALOG COL COMMENTS CONSTRAINTS INDEXES OBJECTS TAB COLUMNS USER USER USER USER TAB COMMENTS TRIGGERS USERS VIEWS all tables with their name, number of columns, storage information, statistical information etc. (TABS) tables, views, and synonyms (CAT) comments on columns constraint de? nitions for tables all information about indexes created for tables (IND) all database objects owned by the user (OBJ) columns of the tables and views owned by the user COLS) comments on tables and views triggers de? ned by the user information about the current user views de? ned by the user • ALL : Rows in the ALL views include rows of the USER views and all information about objects that are accessible to the current user. The structure of these views is analogous to the structure of the USER views. 24 ALL CATALOG owner, name and type of all accessible tables, views, and synonyms ALL TABLES owner and name of all accessible tables ALL OBJECTS own er, type, and name of accessible database objects ALL TRIGGERS . . . ALL USERS … ALL VIEWS … DBA : The DBA views encompass information about all database objects, regardless of the owner. Only users with DBA privileges can access these views. DBA DBA DBA DBA DBA TABLES CATALOG OBJECTS DATA FILES USERS tables of all users in the database tables, views, and synonyms de? ned in the database object of all users information about data ? les information about all users known in the database 25 4 Application Programming 4. 1 4. 1. 1 PL/SQL Introduction The development of database applications typically requires language constructs similar to those that can be found in programming languages such as C, C++, or Pascal.These constructs are necessary in order to implement complex data structures and algorithms. A major restriction of the database language SQL, however, is that many tasks cannot be unadulterated by using only the provided language elements. PL/SQL (Procedural Langua ge/SQL) is a procedural extension of Oracle-SQL that o? ers language constructs similar to those in exacting programming languages. PL/SQL allows users and designers to develop complex database applications that require the usage of control structures and procedural elements such as procedures, functions, and modules. The basic construct in PL/SQL is a pack.Blocks allow designers to combine logically related (SQL-) statements into units. In a overgorge, constants and variables can be entertaind, and variables can be used to store query results. Statements in a PL/SQL head off include SQL statements, control structures ( tats), condition statements (if-then-else), exception handling, and calls of other PL/SQL closings. PL/SQL blocks that specify procedures and functions can be grouped into packages. A package is similar to a module and has an interface and an implementation part. Oracle o? ers several prede? ned packages, for example, input/output routines, ? le handling, job scheduling etc. see directory $ORACLE HOME/rdbms/admin). Another important feature of PL/SQL is that it o? ers a mechanism to process query results in a tuple-oriented way, that is, one tuple at a time. For this, pointers are used. A pointer basically is a pointer to a query result and is used to read attribute values of selected tuples into variables. A arrow typically is used in combination with a eyelet construct such that each tuple read by the arrow can be processed individually. In summary, the major goals of PL/SQL are to • increase the expressiveness of SQL, • process query results in a tuple-oriented way, • optimize combined SQL statements, develop standard database application programs, • reuse program code, and • reduce the equal for maintaining and changing applications. 26 4. 1. 2 Structure of PL/SQL-Blocks PL/SQL is a block-structured language. Each block builds a (named) program unit, and blocks can be nested. Blocks that build a pr ocedure, a function, or a package must be named. A PL/SQL block has an optional declare section, a part containing PL/SQL statements, and an optional exception-handling part. Thus the structure of a PL/SQL looks as follows (brackets [ ] enclose optional parts): [] [declare ] begin [exception ] end; The block header speci? s whether the PL/SQL block is a procedure, a function, or a package. If no header is speci? ed, the block is said to be an anonymous PL/SQL block. Each PL/SQL block again builds a PL/SQL statement. Thus blocks can be nested like blocks in conventional programming languages. The range of tell variables (i. e. , the part of the program in which one can refer to the variable) is analogous to the background knowledge of variables in programming languages such as C or Pascal. 4. 1. 3 Declarations Constants, variables, cursors, and exceptions used in a PL/SQL block must be declared in the declare section of that block.Variables and constants can be declared as follows : [constant] [not null] [:= ]; Valid data types are SQL data types (see Section 1. 1) and the data type boolean. Boolean data may only be true, false, or null. The not null clause requires that the declared variable must always have a value di? erent from null. is used to determine a variable. If no expression is speci? ed, the value null is assigned to the variable. The clause constant states that once a value has been assigned to the variable, the value cannot be changed (thus the variable becomes a constant). Example: declare hire date job title mp found salary incr … begin . . . end; date; /* implicit low-level formatting with null */ varchar2(80) := ’Salesman’; boolean; /* implicit initialization with null */ constant number(3,2) := 1. 5; /* constant */ 27 Instead of specifying a data type, one can also refer to the data type of a table column (so-called anchored promulgation). For example, EMP. Empno% example refers to the data type of the column Empno i n the relation EMP. Instead of a single variable, a record can be declared that can store a complete tuple from a given table (or query result). For example, the data type DEPT%ROWTYPE speci? s a record suitable to store all attribute values of a complete row from the table DEPT. Such records are typically used in combination with a cursor. A ? eld in a record can be accessed using . , for example, DEPT. Deptno. A cursor solvent speci? es a set of tuples (as a query result) such that the tuples can be processed in a tuple-oriented way (i. e. , one tuple at a time) using the obtain statement. A cursor declaration has the form cursor [()] is ; The cursor name is an unavowed identi? er, not the name of any PL/SQL variable. A parameter has the form . Possible parameter types are char, archar2, number, date and boolean as well as corresponding subtypes such as integer. Parameters are used to assign values to the variables that are given in the select statement. Example: We want to ret rieve the following attribute values from the table EMP in a tupleoriented way: the job title and name of those employees who have been hired after a given date, and who have a manager working in a given department. cursor employee cur (start date date, dno number) is select JOB, ENAME from EMP E where HIREDATE > start date and exists (select ? from EMP where E. MGR = EMPNO and DEPTNO = dno);If (some) tuples selected by the cursor will be modi? ed in the PL/SQL block, the clause for update[()] has to be added at the end of the cursor declaration. In this case selected tuples are locked and cannot be accessed by other users until a commit has been issued. Before a declared cursor can be used in PL/SQL statements, the cursor must be opened, and after processing the selected tuples the cursor must be closed. We discuss the usage of cursors in more detail below. Exceptions are used to process errors and warnings that occur during the execution of PL/SQL statements in a controlled man ner.Some exceptions are internally de? ned, such as ZERO DIVIDE. Other exceptions can be speci? ed by the user at the end of a PL/SQL block. User de? ned exceptions need to be declared using exception. We will discuss exception handling in more detail in Section 4. 1. 5 4. 1. 4 Language Elements In addition to the declaration of variables, constants, and cursors, PL/SQL o? ers various language constructs such as variable assignments, control structures ( draw ins, if-then-else), procedure and function calls, etc. However, PL/SQL does not allow commands of the SQL data de? nition language such as the create table statement.For this, PL/SQL provides special packages. 28 Furthermore, PL/SQL uses a modi? ed select statement that requires each selected tuple to be assigned to a record (or a list of variables). There are several alternatives in PL/SQL to a assign a value to a variable. The most simple way to assign a value to a variable is declare counter integer := 0; … begin count er := counter + 1; set to assign to a variable can also be retrieved from the database using a select statement select into from where ; It is important to ensure that the select statement retrieves at most one tuple !Otherwise it is not possible to assign the attribute values to the speci? ed list of variables and a runtime error occurs. If the select statement retrieves more than one tuple, a cursor must be used instead. Furthermore, the data types of the speci? ed variables must match those of the retrieved attribute values. For most data types, PL/SQL performs an automatic type conversion (e. g. , from integer to real). Instead of a list of single variables, a record can be given after the keyword into. Also in this case, the select statement must retrieve at most one tuple ! declare mployee rec EMP%ROWTYPE; max sal EMP. SAL%TYPE; begin select EMPNO, ENAME, JOB, MGR, SAL, COMM, HIREDATE, DEPTNO into employee rec from EMP where EMPNO = 5698; select max(SAL) into max sal from EMP ; … end; PL/SQL provides while- entwines, two types of for- closed circuits, and straight loops. Latter ones are used in combination with cursors. All types of loops are used to execute a sequence of statements multiple times. The speci? cation of loops occurs in the same way as known from imperative programming languages such as C or Pascal. A while-loop has the pattern [>] while loop ; end loop [] ; 9 A loop can be named. Naming a loop is useful whenever loops are nested and inner loops are completed categorically using the exit ; statement. Whereas the number of grummets through a while loop is unknown until the loop completes, the number of iterations through the for loop can be speci? ed using two integers. [>] for in [reverse] .. loop end loop [] ; The loop counter is declared implicitly. The scope of the loop counter is only the for loop. It overrides the scope of any variable having the same name outside the loop. internal the for loop, can be referenced like a constant. ay appear in expressions, but one cannot assign a value to . Using the keyword reverse causes the iteration to proceed downwards from the higher bound to the lower bound. Processing Cursors: Before a cursor can be used, it must be opened using the open statement open [()] ; The associated select statement then is processed and the cursor references the ? rst selected tuple. Selected tuples then can be processed one tuple at a time using the set about command fetch into ; The fetch command assigns the selected attribute values of the current tuple to the list of variables.After the fetch command, the cursor advances to the next tuple in the result set. Note that the variables in the list must have the same data types as the selected values. After all tuples have been processed, the close command is used to disable the cursor. close ; The example below illustrates how a cursor is used together with a continuous loop: declare cursor emp cur is select ? from EMP; emp rec EM P%ROWTYPE; emp sal EMP. SAL%TYPE; begin open emp cur; loop fetch emp cur into emp rec; exit when emp cur%NOT rig; emp sal := emp rec. sal; end loop; close emp cur; … end; 30Each loop can be completed unconditionally using the exit clause: exit [] [when ] Using exit without a block label causes the completion of the loop that contains the exit statement. A condition can be a simple comparison of values. In most cases, however, the condition refers to a cursor. In the example above, %NOTFOUND is a predicate that evaluates to false if the most recent fetch command has read a tuple. The value of %NOTFOUND is null before the ? rst tuple is fetched. The predicate evaluates to true if the most recent fetch failed to return a tuple, and false otherwise. FOUND is the logical opposite of %NOTFOUND. Cursor for loops can be used to simplify the usage of a cursor: [>] for in [()] loop end loop []; A record suitable to store a tuple fetched by the cursor is implicitly declared. Furthermo re, this loop implicitly performs a fetch at each iteration as well as an open before the loop is entered and a close after the loop is left. If at an iteration no tuple has been fetched, the loop is automatically terminated without an exit. It is even possible to specify a query instead of in a for loop: for in () loop end loop; That is, a cursor needs not be speci? d before the loop is entered, but is de? ned in the select statement. Example: for sal rec in (select SAL + COMM total from EMP) loop … ; end loop; total is an alias for the expression computed in the select statement. Thus, at each iteration only one tuple is fetched. The record sal rec, which is implicitly de? ned, then contains only one entry which can be accessed using sal rec. total. Aliases, of course, are not necessary if only attributes are selected, that is, if the select statement contains no arithmetic operators or aggregate functions. For conditional control, PL/SQL o? rs if-then-else\r\n'

No comments:

Post a Comment