1. | Given the following two tables:
NAMES ------------------------ NAME NUMBER ---------- ------- Wayne Gretzky 99 Jaromir Jagr 68 Bobby Orr 4 Bobby Hull 23 Mario Lemieux 66 POINTS ------------------------ NAME POINTS ---------- ------- Wayne Gretzky 244 Bobby Orr 129 Brett Hull 121 Mario Lemieux 189 Joe Sakic 94 How many rows would be returned using the following statement?
SELECT name FROM names, points
|
| ||||||||
2. | Given the following two tables:
TAB1 ------------------- COL_1 COL_2 ----- ----- A 10 B 12 C 14 TAB2 ------------------- COL_A COL_B ----- ----- A 21 C 23 D 25 Assuming the following results are desired:
COL_1 COL_2 COL_A COL_B A 10 A 21 B 12 - - C 14 C 23 - - D 25 Which of the following joins will produce the desired results?
|
| ||||||||
3. | Given the following table:
TAB1 ------------------- COL1 COL2 ----- ----- A 10 B 20 C 30 A 10 D 40 C 30 Assuming the following results are desired:
TAB1 ------------------- COL1 COL2 ----- ----- A 10 B 20 C 30 D 40 Which of the following statements will produce the desired results?
|
| ||||||||
4. | Given the following two tables:
EMPLOYEE ID NAME DEPTID -- -------------- ------- 01 Mick Jagger 10 02 Keith Richards 20 03 Ronnie Wood 20 04 Charlie Watts 20 05 Bill Wyman 30 06 Brian Jones - DEPARTMENT ID DEPTNAME -- --------------- 10 Executive Staff 20 Sales 30 Marketing 40 Engineering 50 Human Resources Which two of the following queries will display the employee name and department name for all employees that are in Sales?
|
| ||||||||
5. | Given the following queries:
SELECT c1 FROM tab1; SELECT c1 FROM tab2; Which of the following set operators can be used to produce a result data set that contains only records that are not found in the result data set produced by each query after duplicate rows have been eliminated?
|
| ||||||||
6. | Given the following two tables:
NAMES ------------------------ NAME NUMBER ---------- ------- Wayne Gretzky 99 Jaromir Jagr 68 Bobby Orr 4 Bobby Hull 23 Brett Hull 16 Mario Lemieux 66 Mark Messier 11 POINTS ------------------------ NAME POINTS ---------- ------ Wayne Gretzky 244 Jaromir Jagr 168 Bobby Orr 129 Brett Hull 121 Mario Lemieux 189 Joe Sakic 94 Which of the following statements will display the player name, number, and points for all players that have scored points?
|
| ||||||||
7. | Given the following tables:
YEAR_2006 EMPID NAME ----- ----------- 1 Jagger, Mick 2 Richards, Keith 3 Wood, Ronnie 4 Watts, Charlie 5 Jones, Darryl 6 Leavell, Chuck YEAR_1962 EMPID NAME ----- ----------- 1 Jagger, Mick 2 Richards, Keith 3 Jones, Brian 4 Wyman, Bill 5 Watts, Charlie 6 Stewart, Ian If the following SQL statement is executed, how many rows will be returned?
SELECT name FROM year_2007 UNION ALL SELECT name FROM year_1962
|
| ||||||||
8. | Given the following table:
EMPLOYEE EMPID NAME INSTRUMENT --- --------- ----- 1 Jagger, Mick 01 2 Richards, Keith 02 3 Wood, Ronnie 02 4 Watts, Charlie 03 5 Jones, Darryl 04 6 Leavell, Chuck 05 If the following query is executed:
SELECT name, CASE WHEN instrument = '01' THEN 'HARMONICA' WHEN instrument = '02' THEN 'GUITAR' WHEN instrument = '03' THEN 'DRUMS' ELSE 'UNKNOWN' END AS instrument FROM employee What will be the results?
|
| ||||||||
9. | Given the following table definition:
SALES --------------------------------------- INVOICE_NO CHAR(20) NOT NULL SALES_DATE DATE SALES_PERSON VARCHAR(25) REGION CHAR(20) SALES_AMT DECIMAL(9,2) Which of the following queries will return SALES information, sorted by SALES_PERSON, from A to Z, and SALES_DATE, from most recent to earliest?
|
| ||||||||
10. | Given the following statement:
SELECT hyear, AVG(salary) FROM SELECT YEAR(hiredate) AS hyear, salary FROM employee WHERE salary > 30000) GROUP BY hyear Which of the following describes the result if this statement is executed?
|
| ||||||||
11. | Which two of the following statements are true about the HAVING clause?
|
| ||||||||
12. | Given the following table:
CURRENT_EMPLOYEES -------------------------- EMPID INTEGER NOT NULL NAME CHAR(20) SALARY DECIMAL(10,2) PAST_EMPLOYEES -------------------------- EMPID INTEGER NOT NULL NAME CHAR(20) SALARY DECIMAL(10,2) Assuming both tables contain data, which of the following statements will NOT successfully add data to table CURRENT_EMPLOYEES?
|
| ||||||||
13. | Given the following UPDATE statement:
UPDATE employees SET workdept = (SELECT deptno FROM department WHERE deptno = 'A01') WHERE workdept IS NULL Which of the following describes the result if this statement is executed?
|
| ||||||||
14. | Given the following table definition:
SALES -------------------------- SALES_DATE DATE SALES_PERSON CHAR(20) REGION CHAR(20) SALES INTEGER Which of the following SQL statements will remove all rows that had a SALES_DATE in the year 1995?
|
| ||||||||
15. | Given the following table definition:
EMPLOYESS -------------------------- EMP ID INTEGER NAME CHAR(20) DEPT CHAR(10) SALARY DECIMAL (10, 2) COMMISSION DECIMAL (8, 2) Assuming the DEPT column contains the values 'ADMIN', 'PRODUCTION', and 'SALES', which of the following statements will produce a result data set in which all ADMIN department employees are grouped together, all PRODUCTION department employees are grouped together, and all SALES department employees are grouped together?
|
| ||||||||
16. | The following SQL statement:
DELETE FROM tab1 WHERE CURRENT OF csr1 WITH RR Is used to perform which type of delete operation?
|
| ||||||||
17. | Given the following data:
TAB1 C1 C2 -- --- 200 abc 250 abc 150 def 300 ghi 175 def If the following query is executed:
WITH subset (col1, col2) AS (SELECT c1, c2 FROM tab1 WHERE c1 > 150) SELECT col2, SUM(col1) AS col1_sum FROM subset GROUP BY col2 ORDER BY col2 Which of the following result data sets will be produced?
|
| ||||||||
18. | Given the following table definitions:
TABLE1 ----------------------------------- ID INT NAME CHAR(30) PERSON INT CITIES INT TABLE2 ----------------------------------- ID INT LASTNAME CHAR(30) Which of the following statements will remove all rows in table TABLE1 that have matching PERSONs in table TABLE2?
|
| ||||||||
19. | Given the following two tables:
NAMES NAME NUMBER ----------- -------------- Wayne Gretzky 99 Jaromir Jagr 68 Bobby Orr 4 Bobby Hull 23 Brett Hull 16 Mario Lemieux 66 Mark Messier 11 POINTS NAME POINTS ----------- -------------- Wayne Gretzky 244 Jaromir Jagr 168 Bobby Orr 129 Brett Hull 121 Mario Lemieux 189 Joe Sakic 94 Which of the following statements will display the player name, number, and points for all players that have scored points?
|
| ||||||||
20. | Given the following table definitions:
EMPLOYEES ------------------------------------------------ EMPID INTEGER NAME CHAR(20) DEPTID CHAR(3) SALARY DECIMAL(10,2) COMMISSION DECIMAL(8,2) DEPARTMENTS ------------------------------------------------ DEPTNO INTEGER DEPTNAME CHAR(20) Which of the following statements will produce a result data set that satisfies all of these conditions:
|
| ||||||||
21. | Given the following table:
CURRENT_EMPLOYEES -------------------------------------- EMPID INTEGER NOT NULL NAME CHAR(20) SALARY DECIMAL(10,2) PAST_EMPLOYEES -------------------------------------- EMPID INTEGER NOT NULL NAME CHAR(20) SALARY DECIMAL(10,2) Assuming both tables contain data, which of the following statements will NOT successfully add data to table CURRENT_EMPLOYEES?
|
| ||||||||
22. | Given the following table:
STOCK -------------------------- CATEGORY CHAR(1) PARTNO CHAR(12) DESCRIPTION VARCHAR(40) QUANTITY INTEGER PRICE DEC(7,2) If items are indicated to be out of stock by setting DESCRIPTION to NULL and QUANTITY and PRICE to zero, which of the following statements updates the STOCK table to indicate that all items except those with CATEGORY of 'S' are temporarily out of stock?
|
| ||||||||
23. | Given the following SQL statements:
CREATE TABLE tab1 (col1 INTEGER) INSERT INTO tab1 VALUES (NULL) INSERT INTO tab1 VALUES (1) CREATE TABLE tab2 (col2 INTEGER) INSERT INTO tab2 VALUES (NULL) INSERT INTO tab2 VALUES (1) INSERT INTO tab2 VALUES (2) What will be the result when the following statement is executed?
SELECT * FROM tab1 WHERE col1 IN (SELECT col2 FROM tab2)
|
| ||||||||
24. | Given the following table definition:
SALES --------------------------------------------- INVOICE_NO CHAR(20) NOT NULL SALES_DATE DATE SALES_PERSON CHAR(20) REGION CHAR(20) SALES INTEGER If the following SELECT statement is executed, which of the following describes the order of the rows in the result data set produced?
SELECT * FROM sales
|
| ||||||||
25. | Given the following tables:
YEAR_2006 EMPID NAME --------------------------------- 1 Jagger, Mick 2 Richards, Keith 3 Wood, Ronnie 4 Watts, Charlie 5 Jones, Darryl 6 Leavell, Chuck YEAR_1962 EMPID NAME --------------------------------- 1 Jagger, Mick 2 Richards, Keith 3 Jones, Brian 4 Wyman, Bill 5 Chapman, Tony 6 Stewart, Ian If the following SQL statement is executed, how many rows will be returned?
SELECT name FROM year_2006 UNION SELECT name FROM year_1962
|
| ||||||||
26. | Which of the following best describes a unit of work?
|
| ||||||||
27. | Given the following set of statements:
CREATE TABLE tab1 (col1 INTEGER, col2 CHAR(20)); COMMIT; INSERT INTO tab1 VALUES (123, 'Red'); INSERT INTO tab1 VALUES (456, 'Yellow'); SAVEPOINT s1 ON ROLLBACK RETAIN CURSORS; DELETE FROM tab1 WHERE col1 = 123; INSERT INTO tab1 VALUES (789, 'Blue'); ROLLBACK TO SAVEPOINT s1; INSERT INTO tab1 VALUES (789, 'Green'); UPDATE tab1 SET col2 = NULL WHERE col1 = 789; COMMIT; Which of the following records would be returned by the following statement?
SELECT * FROM tab1
|
| ||||||||
28. | Given the following table:
TAB1 COL1 COL2 ----- ----- A 10 B 20 C 30 D 40 E 50 And the following SQL statements:
DECLARE c1 CURSOR WITH HOLD FOR SELECT * FROM tab1 ORDER BY col_1; OPEN c1; FETCH c1; FETCH c1; FETCH c1; COMMIT; FETCH c1; CLOSE c1; FETCH c1; Which of the following is the last value obtained for COL_2?
|
| ||||||||
29. | A stored procedure has been created with the following statement:
CREATE PROCEDURE proc1 (IN var1 VARCHAR(10), OUT rc INTEGER) SPECIFIC myproc LANGUAGE SQL … What is the correct way to invoke this procedure from the command line processor (CLP)?
|
| ||||||||
30. | Given the following table:
TEMP_DATA TEMP DATE ----- ----- 45 12/25/2006 51 12/26/2006 67 12/27/2006 72 12/28/2006 34 12/29/2006 42 12/30/2006 And the following SQL statement:
CREATE FUNCTION degf_to_c (temp INTEGER) RETURNS INTEGER LANGUAGE SQL CONTAINS SQL NO EXTERNAL ACTION DETERMINISTIC BEGIN ATOMIC DECLARE newtemp INTEGER; SET newtemp = temp - 32; SET newtemp = newtemp * 5; RETURN newtemp / 9; END Which two of the following SQL statements illustrate the proper way to invoke the scalar function DEGF_TO_C?
|
| ||||||||
31. | Given the following CREATE TABLE statement:
CREATE TABLE customer(custid INTEGER, info XML) And the following INSERT statements:
INSERT INTO customer VALUES (1000, '<customerinfo xmlns="http://custrecord.dat" cust> <name>John Doe</name> <addr country="United States"> <street>25 East Creek Drive</street> <city>Raleigh</city> <state-prov>North Carolina</state-prov> <zip-pcode>27603</zip-pcode> </addr> <phone type="work">919-555-1212</phone> <email>john.doe@abc.com</email> </customerinfo>'); INSERT INTO customer VALUES (1000, '<customerinfo xmlns="http://custrecord.dat" cust> <name>Paul Smith</name> <addr country="Canada"> <street>412 Stewart Drive</street> <city>Toronto</city> <state-prov>Ontario</state-prov> <zip-pcode>M8X-3T6</zip-pcode> </addr> <phone type="work">919-555-4444</phone> <email>psmith@xyz.com</email> </customerinfo>'); What is the result of the following XQuery expression?
XQUERY declare default element namespace "http://custrecord.dat"; for $info in db2-fn:xmlcolumn('CUSTOMER.INFO')/customerinfo where $info/addr/state-prov="Ontario" return $info/name/text();
|
|
Answers
1. | The correct answer is D. When a SELECT statement such as the one shown is executed, the result data set produced will contain all possible combinations of the rows found in each table specified (otherwise known as the Cartesian product). Every row in the result data set produced is a row from the first table referenced concatenated with a row from the second table referenced, concatenated in turn with a row from the third table referenced, and so on. The total number of rows found in the result data set produced is the product of the number of rows in all the individual table-references; in this case, 5 x 5 = 25. | ||||||||||||||||||||||||
2. | The correct answer is D. When a full outer join operation is performed, rows that would have been returned by an inner join operation, together with all rows stored in both tables of the join operation that would have been eliminated by the inner join operation are returned in the result data set produced. An inner join can be thought of as the cross product of two tables, in which every row in one table that has a corresponding row in another table is combined with that row to produce a new record. When a left outer join operation is performed, rows that would have been returned by an inner join operation, together with all rows stored in the leftmost table of the join operation (i.e., the table listed first in the OUTER JOIN clause) that would have been eliminated by the inner join operation, are returned in the result data set produced. When a right outer join operation is performed, rows that would have been returned by an inner join operation, together with all rows stored in the rightmost table of the join operation (i.e., the table listed last in the OUTER JOIN clause) that would have been eliminated by the inner join operation, are returned in the result data set produced. | ||||||||||||||||||||||||
3. | The correct answer is B. If the DISTINCT clause is specified with a SELECT statement, duplicate rows are removed from the final result data set returned. Two rows are considered to be duplicates of one another if the value of every column of the first row is identical to the value of the corresponding column of the second row. | ||||||||||||||||||||||||
4. | The correct answers are A and E. An inner join can be thought of as the cross product of two tables, in which every row in one table that has a corresponding row in another table is combined with that row to produce a new record. The syntax for a SELECT statement that performs an inner join operation is:
SELECT [*|[Expression] <<AS> [NewColumnName]> ,...] FROM [[TableName] <<AS> [CorrelationName]> ,...] [JoinCondition] where:
The following syntax can also be used to create a SELECT statement that performs an inner join operation:
SELECT [*|[Expression] <<AS> [NewColumnName]> ,...] FROM [[TableName1] <<AS> [CorrelationName1]>] <INNER> JOIN [[TableName2] <<AS> [CorrelationName2]>] ON [JoinCondition] where:
| ||||||||||||||||||||||||
5. | The correct answer is C. When the EXCEPT set operator is used, the result data sets produced by each individual query are combined, all duplicate rows found are eliminated, and all records found in the first result data set that have a corresponding record in the second result data set are eliminated, leaving just the records that are not found in both result data sets. When the UNION set operator is used, the result data sets produced by each individual query are combined and all duplicate rows are eliminated; when the INTERSECT set operator is used, the result data sets produced by each individual query are combined, all duplicate rows found are eliminated, and all records found in the first result data set that do not have a corresponding record in the second result data set are eliminated, leaving just the records that are found in both result data sets; MERGE is not a set operator. | ||||||||||||||||||||||||
6. | The correct answer is C. When a right outer join operation is performed, rows that would have been returned by an inner join operation, together with all rows stored in the rightmost table of the join operation (i.e., the table listed last in the OUTER JOIN clause) that would have been eliminated by the inner join operation are returned in the result data set produced. In this case, we want to see all records found in the POINTS table, along with any corresponding records found in the NAMES table, so a right outer join is the appropriate join operation to use. | ||||||||||||||||||||||||
7. | The correct answer is D. When the UNION ALL set operator is used, the result data sets produced by each individual query are combined; all duplicate rows found are retained. Thus with this example, the results of both tables are combined (6 rows + 6 rows = 12 rows) and the duplicate rows for "Jagger, Mick", "Richards, Keith", and "Watts, Charlie" are retained. Had the UNION set operator been used instead, the result data sets produced by each individual query would have been combined and all duplicate rows would have been eliminated and the answer would have been 9 (12 - 3 = 9 rows). | ||||||||||||||||||||||||
8. | The correct answer is C. One efficient and concise way to display coded values in a readable format is to use one or more CASE expressions in the selection list of a query. Each CASE operation evaluates a specified expression and supplies a different value, depending on whether a certain condition is met. A CASE expression can take one of two forms: simple or searched. The CASE statement presented in the question is a searched CASE expression; in this example, if the INSTRUMENT column contains the value '01', the word 'HARMONICA' is returned, if the INSTRUMENT column contains the value '02', the word 'GUITAR' is returned, if the INSTRUMENT column contains the value '03', the word 'DRUMS' is returned, and if the INSTRUMENT column contains any other value, the word 'UNKNOWN' is returned. | ||||||||||||||||||||||||
9. | The correct answer is C. Data is stored in a table in no particular order, and unless otherwise specified, a query only returns data in the order in which it is found. The ORDER BY clause is used to tell the DB2 Database Manager how to sort and order the rows that are to be returned in a result data set produced in response to a query. When specified, the ORDER BY clause is followed by the name of one or more column(s) whose data values are to be sorted and a keyword that indicates the desired sort order. If the keyword ASC follows the column's name, ascending order is used, and if the keyword DESC follows the column name, descending order is used. If no keyword is specified, ascending order is used by default. | ||||||||||||||||||||||||
10. | The correct answer is B. The subselect produces a result data set that contains hire year and salary information for each employee whose salary is greater than $30,000.00. The GROUP BY clause is used to tell the DB2 Database Manager how to organize rows of data returned in the result data set produced in response to a query. (The GROUP BY clause specifies an intermediate result table consisting of a group of rows.) In this example, the GROUP BY clause tells the outer SELECT to calculate and group average salary information by hire year. | ||||||||||||||||||||||||
11. | The correct answers are B and C. The HAVING clause is used to apply further selection criteria to columns that are referenced in a GROUP BY clause. This clause behaves like the WHERE clause, except that it refers to data that has already been grouped by a GROUP BY clause (the HAVING clause is used to tell the DB2 Database Manager how to select the rows that are to be returned in a result data set from rows that have already been grouped). And like the WHERE clause, the HAVING clause is followed by a search condition that acts as a simple test that, when applied to a row of data, will evaluate to TRUE, FALSE, or Unknown. | ||||||||||||||||||||||||
12. | The correct answer is D. Because the EMPID column in each table was defined in such a way that it does not allow null values, a non-null value must be provided for this column any time data is inserted into either table. The INSERT statement shown in answer D does not provide a value for the EMPID column of the CURRENT_EMPLOYEES table, so the statement will fail. | ||||||||||||||||||||||||
13. | The correct answer is B . When the results of a query, or subselect, are used to provide values for one or more columns identified in the column name list provided for an UPDATE statement, the values retrieved from one base table or view are used to modify values stored in another. The number of values returned by the subselect must match the number of columns provided in the column name list specified, and only one record can be returned. | ||||||||||||||||||||||||
14. | The correct answer is B. The DELETE statement is used to remove specific records from a table (the DROP statement completely destroys the table object), and the correct syntax for the DELETE statement is DELETE FROM [TableName] … | ||||||||||||||||||||||||
15. | The correct answer is A. The ORDER BY clause is used to tell the DB2 Database Manager how to sort and order the rows that are to be returned in a result data set produced in response to a query. In this example, all rows containing the value "ADMIN" in the DEPT column would be listed first, followed by all rows containing the value "PRODUCTION", followed by all rows containing the value "SALES". | ||||||||||||||||||||||||
16. | The correct answer is A. Delete operations can be conducted in one of two ways: as searched delete operations or as positioned delete operations. To perform a positioned delete, a cursor must first be created, opened, and positioned on the row to be deleted. Then, the DELETE statement used to remove the row must contain a WHERE CURRENT OF [CursorName] clause (CursorName identifies the cursor being used). Because of their added complexity, positioned delete operations are typically performed by embedded SQL applications. | ||||||||||||||||||||||||
17. | The correct answer is B. Common table expressions are mechanisms that are used to construct local temporary tables that reside in memory and only exist for the life of the SQL statement that defines them. The syntax used to construct a common table expression is:
WITH [TableName]<([ColumnName] ,...])> AS ([SELECTStatement]) where:
So in this example, all of the data stored in table TAB1, with the exception of the record "150 - def" is copied to a common table named SUBSET, and then a query is run against this common table. | ||||||||||||||||||||||||
18. | The correct answer is C. Since we are looking for values in the PERSON column of TABLE1 that have a matching value in the ID column of TABLE2, the statement shown in Answer C is the only statement that is correct. (The SQL statements shown in Answers B and D are incorrect because there is no PERSON column in TABLE2; the statement shown in Answer A is incorrect because it is looking for values that match those in the ID column in TABLE1, not the PERSON column.) | ||||||||||||||||||||||||
19. | The correct answer is C. When a right outer join operation is performed, rows that would have been returned by an inner join operation, together with all rows stored in the rightmost table of the join operation (i.e., the table listed last in the OUTER JOIN clause) that would have been eliminated by the inner join operation are returned in the result data set produced. In this case, we want to see all records found in the POINTS table, along with any corresponding records found in the NAMES table, so a right outer join is the appropriate join operation to use. | ||||||||||||||||||||||||
20. | The correct answer is B. COUNT(empno) together with GROUP BY deptname displays the total number of employees in each department; SELECT deptname displays the corresponding department name for each department ID, and ORDER BY 2 DESC sorts the data by employee count (which is column 2) from greatest to least. | ||||||||||||||||||||||||
21. | The correct answer is D. Because the EMPID column was defined in such a way that it does not allow null values, a non-null value must be provided for this column anytime data is inserted into either table. The INSERT statement shown in Answer D does not provide a value for the EMPID column of the CURRENT_EMPLOYEES table, so the statement will fail. | ||||||||||||||||||||||||
22. | The correct answer is D. Because 'NULL' is treated as a string instead of a NULL value, the SQL statements shown in Answers A and C would not set the STATUS to NULL; the statement shown in Answer B is invalid because the SET keyword is only used once in the UPDATE statement. Therefore, statement D is the only UPDATE statement shown that will accomplish the desired task. | ||||||||||||||||||||||||
23. | The correct answer is A. The IN predicate is used to define a comparison relationship in which a value is checked to see whether or not it matches a value in a finite set of values. This finite set of values can consist of one or more literal values coded directly in the SELECT statement, or it can be composed of the non-null values found in the result data set generated by a subquery. So in this example, the non-null values that appear in the result data set produced by the subquery are the values 1 and 2, and the only row in TAB1 that has a matching value in COL1 is the row with the value 1 in it. | ||||||||||||||||||||||||
24. | The correct answer is D. Data is stored in a table in no particular order, and unless otherwise specified (with an ORDER BY clause), a query only returns data in the order in which it is found. | ||||||||||||||||||||||||
25. | The correct answer is C. When the UNION set operator is used, the result data sets produced by each individual query are combined and all duplicate rows are eliminated. Thus with this example, the results of both tables are combined (6 rows + 6 rows = 12 rows) and the duplicate rows for Jagger, Mick and Richards, Keith are removed (12 - 2 = 10 rows). So 10 rows are returned. | ||||||||||||||||||||||||
26. | The correct answer is C. A transaction (also known as a unit of work) is a sequence of one or more SQL operations grouped together as a single unit, usually within an application process. A given transaction can perform any number of SQL operations-from a single operation to many hundreds or even thousands, depending on what is considered a "single step" within your business logic. The initiation and termination of a single transaction defines points of data consistency within a database; either the effects of all operations performed within a transaction are applied to the database and made permanent (committed), or the effects of all operations performed are backed out (rolled back) and the database is returned to the state it was in before the transaction was initiated. In most cases, transactions are initiated the first time an executable SQL statement is executed after a connection to a database has been made or immediately after a preexisting transaction has been terminated. Once initiated, transactions can be implicitly terminated using a feature known as "automatic commit" (in this case, each executable SQL statement is treated as a single transaction, and any changes made by that statement are applied to the database if the statement executes successfully or discarded if the statement fails) or they can be explicitly terminated by executing the COMMIT or the ROLLBACK SQL statement. | ||||||||||||||||||||||||
27. | The correct answer is C. DB2 uses a mechanism known as a savepoint to allow an application to break the work being performed by a single large transaction into one or more subsets. Once created, a savepoint can be used in conjunction with a special form of the ROLLBACK SQL statement to return a database to the state it was in at the point in time a particular savepoint was created. The syntax for this form of the ROLLBACK statement is:
ROLLBACK <WORK> TO SAVEPOINT <[ SavepointName]> where:
So, in this example, every operation performed between the time savepoint S1 was created and the ROLLBACK TO SAVEPOINT statement was executed was undone. | ||||||||||||||||||||||||
28. | The correct answer is C. When a cursor that has been declared with the WITH HOLD option specified (as in the example shown) is opened, it will remain open across transaction boundaries until it is explicitly closed; otherwise, it will be implicitly closed when the transaction that opens it is terminated. In this example, the cursor is opened, the first three rows are fetched from it, the transaction is committed (but the cursor is not closed), another row is fetched from it, and then the cursor is closed. Thus, the last value obtained will be:
TAB1 --------------- COL1 COL2 ---- --- D 40 | ||||||||||||||||||||||||
29. | The correct answer is A. The CALL statement is used to invoke a stored procedure, so answer D is wrong; because a stored procedure cannot be invoked using its specific name, answer B is wrong; and since SALES is a character string value that is being passed to the procedure, it must be enclosed in single quotes. Therefore, answer C is wrong. | ||||||||||||||||||||||||
30. | The correct answers are A and B. How a user-defined function is invoked depends a lot on what it has been designed to do; scalar user-defined functions can be invoked as an expression in the select list of a query while table and row functions must be referenced by the FROM clause. In because the user-defined function used in this example is a scalar function that only returns a single value, answer B is the correct way to call it. A scalar function can also be invoked by executing a VALUES statement that looks something like the one shown in answer A. | ||||||||||||||||||||||||
31. | The correct answer is A. In XQuery, expressions are the main building blocks of a query. Expressions can be nested and form the body of a query. A query can also have a prolog that contains a series of declarations that define the processing environment for the query. Thus, if you wanted to retrieve customer names for all customers who reside in North Carolina from XML documents stored in the CUSTINFO column of a table named CUSTOMER (assuming this table has been populated with the INSERT statement we looked at earlier), you could do so by executing an XQuery expression that looks something like this:
XQUERY declare default element namespace "http://custrecord.dat"; for $info in db2-fn:xmlcolumn('CUSTOMER.CUSTINFO')/customerinfo where $info/addr/state-prov="North Carolina" return $info/name And when this XQuery expression is executed from the Command Line Processor, it should return information that looks like this (again, assuming this table has been populated with the INSERT statement we looked at earlier):
1 ------------------------------ <name xmlns="http://custrecord.dat">John Doe</name> If you wanted to remove the XML tags and just return the customer name, you could do so by executing an XQuery expression that looks like this instead:
XQUERY declare default element namespace "http://custrecord.dat"; for $info in db2-fn:xmlcolumn('CUSTOMER.CUSTINFO')/customerinfo where $info/addr/state-prov="North Carolina" return $info/name/text() Now, when the XQuery expression is executed from the Command Line Processor, it should return information that looks like this:
1 ------- John Doe |