Oracle PL/SQL Programming, Fourth Edition by Steven Feuerstein, Bill Pribyl This errata page lists errors corrected in the most recent printing. If you have technical questions or error reports, you can send them to booktech@oreilly.com. Please specify the printing date of your copy. This page was updated August 6, 2007. Here's a key to the markup: [page-number]: serious technical mistake {page-number}: minor technical mistake : important language/formatting problem (page-number): language change or minor formatting problem ?page-number?: reader question or request for clarification {31} 2nd paragraph, 3rd bullet; '(see "Healing Invalids" in Chapter 20)' should be: '(see "Recompiling Invalid Code" in Chapter 20)' (38) 2nd paragraph, point 1.; The path to glogin.sql references a folder named "qlplus" which should, of course, be "sqlplus". (196) Sentence following heading "Concatenating Strings"; You missed the "t" in "two". (224) Last paragraph; UNISTR(string1) ...This is the opposite of ASCISTR. ... ASCISTR ==> ASCIISTR {362} code block; It says: DECLARE SUBTYPE temperature IS NUMBER; SUBTYPE coordinate_axis IS PLS_INTEGER; TYPE temperature_x IS TABLE OF temp INDEX BY coordinate_axis; TYPE temperature_xy IS TABLE OF tempx INDEX BY coordinate_axis; TYPE temperature_xyz IS TABLE OF tempxy INDEX BY coordinate_axis; temperature_3d temperature_xyz; BEGIN temperature_3d (1) (2) (3) := 45; END; / It should be: DECLARE SUBTYPE temperature IS NUMBER; SUBTYPE coordinate_axis IS PLS_INTEGER; TYPE temperature_x IS TABLE OF temperature INDEX BY coordinate_axis; TYPE temperature_xy IS TABLE OF temperature_x INDEX BY coordinate_axis; TYPE temperature_xyz IS TABLE OF temperature_xy INDEX BY coordinate_axis; temperature_3d temperature_xyz; BEGIN temperature_3d (1) (2) (3) := 45; END; / {427} subsection "The INSERT statement", 2nd bullet point. INSERT INTO table [(col1, col2, ..., coln)] AS SELECT ...; The correct synthax should be (according to Oracle 10.2 documentation) without AS like that: INSERT INTO table [(col1, col2, ..., coln)] SELECT ...; {442} Middle of code listing, UPDATE statement; In the statement: UPDATE books SET page_count WHERE isbn = my_books (book_index); change: SET page_count to SET page_count = page_count / 2 {443} third bullet point about %BULK_ROWCOUNT; The third bullet point (just before section "ROLLBACK behavior with FORALL") talks about "deletes and inserts". It should be "deletes and updates", as inserts are covered by bullet point #2. {448} 2nd paragraph, below description table; the Boolean indices collection had no element defined at position 13067. should be: the "values of" collection had no element whose value equaled 13067. (476) example at top of page; The example that starts on page 475 has an error on page 476: the DBMS_OUTPUT statement at the end refers to an undeclared variable. "DBMS_OUTPUT.put_line (l_foundsome);" should be "DBMS_OUTPUT.put_line (l_numfound);". {485} 2nd bullet item ("If you have opened a SELECT FOR UPDATE query,..."); Remove entire bullet item. [498] Last 2 sentences on page; "Without the NOWAIT clause, your process will block until the table is available. There is no limit to the wait time unless the table is remote." should be: "Use the WAIT clause to specify the maximum number of seconds Oracle should wait to obtain the lock. If no wait behavior is specified, then your process will be blocked until the table is available." [499] 1st complete sentence on page; "For remote objects, the Oracle initialization parameter, DISTRIBUTED_LOCK_TIMEOUT, is used to set the limit." should be: "For remote objects, the Oracle "hidden" initialization parameter, _DISTRIBUTED_LOCK_TIMEOUT, is used to set the limit." {511} 1st paragraph under "Scope of cursor object" heading; Remove this text from the 1st sentence: "(unless declared in a package, which makes the variable globally accessible)" {517} 4th bullet item under "Restrictions on Cursor Expressions" heading; Remove the entire bullet item ("A cursor expression can be used as an argument to table functions,...") (520) 4th paragraph (the one before the tip section); The closing parentheses are missing after "(Data Manipulation Language" and "(Data Definition Language". {550} middle of page; Please change cols.col_name to cols (colind).col_name (559) first example; Line #13 (the last one) should look like "END;" instead of "* END;;". (560) second line on page; Line #16 (the last one) of the example that spans from the previous page should look like "END;" instead of "* END;". (610) First sentence of first paragraph under "Table Functions" near middle of page.; The first sentence is missing the word, "it" -- i.e., "as if it were a relational table." {876} The line numbered listing under the 1st paragraph; Line 6 of the code listing is missing information: 6 audit_condition => 'SALARY >= 150000, should be, according to the subsequent description: 6 audit_condition => 'SALARY >= 150000 OR EMPID = 100', {1012} Middle of page; Please change: Lines 10, 12, 14, 16 These statements use the ANYDATA.ConvertNNN member functions introduced in the Oracle 9i Database Release 2... to: Lines 10, 12, 14, 16 These statements use the ANYDATA.AccessNNN member functions introduced in the Oracle 9i Database Release 2...