Errata

Oracle PL/SQL Programming

Errata for Oracle PL/SQL Programming

Submit your own errata for this product.

The errata list is a list of errors and their corrections that were found after the product was released. If the error was corrected in a later version or reprint the date of the correction will be displayed in the column titled "Date Corrected".

The following errata were submitted by our customers and approved as valid errors by the author or editor.

Color key: Serious technical mistake Minor technical mistake Language or formatting error Typo Question Note Update

Version Location Description Submitted By Date submitted Date corrected
Printed
Page 4
Last paragraph;

"In 1991, Oracle Corporation released Version 6.0 ..."

NOW READS:
"In 1988, Oracle Corporation released Version 6.0 ..."

Anonymous    Oct 01, 2003
Printed
Page 15
IN PRINT: first line of the first example

CREATE TYPE empnos_list_t IS VARRARY(100) OF NUMBER;

NOW READS:
CREATE TYPE empnos_list_t IS VARRAY(100) OF NUMBER;

Anonymous    Feb 01, 2003
Printed
Page 15
both examples

CREATE OR REPLACE del_emps

NOW READS:
CREATE OR REPLACE PROCEDURE del_emps

Anonymous    Feb 01, 2003
Printed
Page 15
IN PRINT: del_emps procedure

FORALL listnum IN list_in.FIRST .. list_in.LAST
LOOP
DELETE FROM ...

NOW READS:
FORALL listnum IN list_in.FIRST .. list_in.LAST
DELETE FROM ...

Anonymous    Feb 01, 2003
Printed
Page 17
Oracle 9i New Features, Record-based DML, concerning INSERT a row-level struture.

INSERT INTO books VALUES (book_in);

NOW READS:
INSERT INTO books VALUES book_in;

Anonymous    Sep 01, 2004
Printed
Page 40
IN PRINT: Half way down

SQL SET AUTOMCOMMIT OFF

NOW READS:
SQL SET AUTOCOMMIT OFF

Anonymous    Feb 01, 2003
Printed
Page 74
Last line above footnote

"SQL> SELECT * FROM V$RESERVED_WORD;"

NOW READS:
"SQL> SELECT * FROM V$RESERVED_WORDS;"

pg 89 IN PRINT: 89, top

"provides a way to handle multiple, mutually exclusive alternatives. The general
format for this variation of the IF statement is:"

NOW READS:
"provides a way to handle multiple conditions within a single IF statement.
In general, you should use ELSIF with mutually exclusive alternatives (ie
only one condition can be TRUE for any execution of the IF statement). The
general format for this variation of IF is:"

Anonymous    Feb 01, 2003
Printed
Page 109
Section titled 'The simple loop'

The second sentence reads: "Notice the IF statement used to guard against executing
the loop when the maximum rank is negative." There is no IF statement in the code.

Anonymous   
Printed
Page 109
IN PRINT: 5th row from the bottom

Rows 4 and 5 from the bottom:
WHILE ranking_level <= max_rank_in
LOO

NOW READ:
WHILE ranking_level <= max_rank_in
LOOP

Anonymous    Feb 01, 2003
Printed
Page 119
line 4

FROM occupancy WHERE occupied_dt = TRUNC (SYSDATE;)

NOW READS:
FROM occupancy WHERE occupied_dt = TRUNC (SYSDATE);

the same error was repeated in the middle of the same page and is likewise CORRECTED.

Anonymous    Sep 01, 2004
Printed
Page 143
Bottom of code

DBMS_OUTPUT.PUTLINE --(occurs twice without underscore)

NOW READS:
DBMS_OUTPUT.PUT_LINE

Anonymous    Oct 01, 2003
Printed
Page 161
Last declaration in the sample code section

l_stevenCONSTANT person :=

NOW READS:
l_steven CONSTANT person :=

Anonymous    Oct 01, 2003
Printed
Page 199
IN PRINT: 2nd last para in CONCAT

"...CONCAT(CONCAT('abc','def'),'efg')

NOW READS:
"...CONCAT(CONCAT('abc','def'),'ghi')

Anonymous    Feb 01, 2003
Printed
Page 221
Halfway down the page, first bulleted example

The result of the first example was incorrectly listed without the trailing period.
-> 'Brighten the corner where you are'

NOW READS:
-> 'Brighten the corner where you are.'

Anonymous    Oct 01, 2003
Printed
Page 224
IN PRINT: 1st paragraph

"...the word "ijzen" (Dutch for "iron")..."

NOW READS:
"...the word "ijzer" (Dutch for "iron")..."

Anonymous    Feb 01, 2003
Printed
Page 264
IN PRINT: Bottom - expiration_date function

CREATE TABLE good_for

NOW READS:
CREATE TABLE shelf_life

Anonymous    Feb 01, 2003
Printed
Page 268
second to last line; missing a comma.

SYEAR, YEAR SYear,

NOW READS:
SYEAR, YEAR, SYear,

Anonymous    Oct 01, 2003
Printed
Page 280
IN PRINT: 4th paragraph

"With RR you can enter dates from the 21st century before the year 2000,
and dates from the 20th century (like the birthdays of employees and customers) after
the year 2000."

This sentences HAS BEEN DELETED.

pg 339 IN PRINT: 3rd paragraph, 1st line:
"...theoretical limits on an associative array..."

NOW READS:
"...theoretical limits on an associative array indexed by BINARY_INTEGER..."

pg 341 IN PRINT: 3rd section, TYPE example:
INDEX BY [ BINARY_INTEGER | VARCHAR2(size_limit)]

NOW READS:
INDEX BY [ BINARY_INTEGER | subtype of BINARY_INTEGER |
VARCHAR2(size_limit)]

pg 352. Specifications for DELETE method have replaced PLS_INTEGER references to:
[BINARY_INTEGER | VARCHAR2(size_limit)]

NOW READS:
PROCEDURE DELETE (i [BINARY_INTEGER | VARCHAR2(size_limit)];
PROCEDURE DELETE (i [BINARY_INTEGER | VARCHAR2(size_limit)], j [BINARY_INTEGER | VARCHAR2(size_limit)]);

pg 353 Specifications for EXIST header have replaced PLS_INTEGER references to:
[BINARY_INTEGER | VARCHAR2(size_limit)]

NOW READS:
FUNCTION EXISTS (i IN [BINARY_INTEGER | VARCHAR2(size_limit)]) RETURN BOOLEAN;

pg 356 - Specifications for PRIOR and NEXT headers have replaced PLS_INTEGER references to:
[BINARY_INTEGER | VARCHAR2(size_limit)]

NOW READS:
FUNCTION PRIOR (i [BINARY_INTEGER | VARCHAR2(size_limit)]) RETURN [BINARY_INTEGER | VARCHAR2(size_limit)];
FUNCTION NEXT (i [BINARY_INTEGER | VARCHAR2(size_limit)]) RETURN [BINARY_INTEGER | VARCHAR2(size_limit)];

Anonymous    Feb 01, 2003
Printed
Page 307
IN PRINT: Last paragraph, last three lines below table 10-6

"The following example illustrates the difference between CURRENT_TIMESTAMP, which
is used to get the time in the server's time zone, and SYSTIMESTAMP, which is used
to get the time in the session's time zone."

NOW READS:
"The following example illustrates the difference between CURRENT_TIMESTAMP, which
is used to get the time in the session's time zone, and SYSTIMESTAMP, which is used
to get the time in the server's time zone."

Anonymous    Oct 01, 2003
Printed
Page 328
Code in the second bulletted list

The fourth element in the record structure is actually --

total_sales company_sales_cur.total_sales%TYPE := 0,

but there was a mino typo and it reads --

total_sales company-sales.total_sales%TYPE := 0,

Anonymous   
Printed
Page 342
IN PRINT: 2nd line from the top

INDEX BY VARCHAR2(size_limit)

SHOULD BE:

INDEX BY PLS_INTEGER
INDEX BY NATURAL
INDEX BY POSITIVE
INDEX BY VARCHAR2(size_limit)
INDEX BY table.column%TYPE
INDEX BY package.variable%TYPE
INDEX BY subtype

where the datatype of any anchored type or subtype resolves to VARCHAR2.

Anonymous   
Printed
Page 357
5th line

"...i is greater then COUNT..."
should be:
"...i is greater than LAST..."

Anonymous   
Printed
Page 376
1st paragraph (example)

Under line 19 in the code sample, the folliwng line WAS ADDED:

20 CLOSE desc_cur;

so that it is aligned under the RETURN keyword.

The remaining lines of code HAVE BEEN RENUMBERED and the numbers
appearing in the table below the code UPDATED to reflect these changes.

Anonymous    Sep 01, 2004
Printed
Page 390
1st paragraph

capitalization is not the normal standard on this page
e.g. "into", "varchar2", "column_value", "cast"

Anonymous   
Printed
Page 407
In the code listing at the very top of page 407

WHERE falls_name='Tannery Falls';

NOW READS:
WHERE falls_name='Dryer Hose';

Anonymous    Oct 01, 2003
Printed
Page 464
figure 13-4

PRAGMA
AUTONOMOUS_TRANSACTION

should be:

PRAGMA
AUTONOMOUS_TRANSACTION;

Anonymous   
Printed
Page 469
Last Line

DECLARE
PROCEDURE showcount (str VARCHAR2) IS
num integer;
BEGIN
SELECT COUNT(*) INTO num FROM emp2;

NOW READS:
DECLARE
PROCEDURE showcount (str VARCHAR2) IS
num integer;
BEGIN
SELECT COUNT(*) INTO num FROM tasks;'

Anonymous    Feb 01, 2003
Printed
Page 472
IN PRINT: code example, last three lines

"BEGIN
OPEN sess; FETCH sess INTO rec; CLOSE sess;"

These two lines of code HAVE BEEN DELETED.

page 491,
SQL%FOUND (in code and text)

NOW READS:
SQL%ROWCOUNT

l_foundsome BOOLEAN;

NOW READS:
l_numfound PLS_INTEGER;

l_foundsome := SQL%FOUND

NOW READS:
l_numfound := SQL%ROWCOUNT

page 503
IN PRINT:
bard_rec bard_cur%ROWTYPE

NOW READS:
bard_rec bookinfo_pkg.bard_cur%ROWTYPE

page 504,
CLOSE bcur;

NOW READS:
CLOSE bard_cur;

Anonymous    Oct 01, 2003
Printed
Page 472
IN PRINT: first bulleted item on list, HAS BEEN DELETED.

Anonymous    Sep 01, 2004
Printed
Page 493
IN PRINT: jealousy_level package

Line 25...
CLOSE emptyp_cur;

NOW READS:
CLOSE jealousy_cur;

Anonymous    Feb 01, 2003
Printed
Page 599
IN PRINT: Example at top of page

"PROCEDURE value_ok (number_in IN NUMBER) RETURN BOOLEAN"

NOW READS:
"PROCEDURE value_ok (number_in IN NUMBER)"

Anonymous    Feb 01, 2003
Printed
Page 605
"Requirements for calling functions", 4th bullet point

RESTRICT_REFEFRENCES

NOW READS:
RESTRICT_REFERENCES

Anonymous    Oct 01, 2003
Printed
Page 659
Last item in first bulleted list

...functions defined in built-packages...

NOW READS:
...functions defined in built-in packages...

Anonymous    Oct 01, 2003
Printed
Page 693
6th line of code from the bottom

"INTEAD OF..."
should be:
"INSTEAD OF..."

Anonymous   
Printed
Page 698
top, code sample

In this INSTEAD OF DELETE trigger, the reference to
:NEW.delivery_end (in 2 places)
should be:
:OLD.delivery_end.

Anonymous   
Printed
Page 704
IN PRINT: Bottom

FUNCTION DBMS_REUSABLE.<Name>
and
PROCEDURE DBMS_REUSABLE.<Name>

NOW READ:
FUNCTION DBMS_RESUMABLE.<Name>
and
PROCEDURE DBMS_RESUMABLE.<Name>

Anonymous    Oct 01, 2003
Printed
Page 709
IN PRINT: Last line

INVALID_STATE

NOW READS:
INVALID_TRIGGER

Anonymous    Feb 01, 2003
Printed
Page 710
First sentence of the chapter!

Writing the code for an application is just one step toward putting that
production into application and then maintaining the code base.

NOW READS:
Writing the code for an application is just one step toward putting that
application into production and then maintaining the code base.



Anonymous    Oct 01, 2003
Printed
Page 767
Last paragraph

...relies not so much "depends-on" information as it does on "referenced-by"
information.

NOW READS:
...relies not so much on "depends-on" information as it does on "referenced-by"
information.

Anonymous    Oct 01, 2003
Printed
Page 799
In the body of the next_book_rec function

prv_book_cur_status := book_main.book_cur%FOUND;

NOW READS:
prv_book_cur_status := book_maint.book_cur%FOUND;


Anonymous    Oct 01, 2003
Printed
Page 806
Code sample at bottom, third line of code

AUTHID CURRENT_USER IS

NOW READS:
IS

Anonymous    Oct 01, 2003
Printed
Page 852
example for creating catalog_history

On page 852,the CREATE TABLE code at the top of the page HAS BEEN REVISED to read as follows:

CREATE TABLE catalog_history (
id INTEGER NOT NULL PRIMARY KEY,
action CHAR(1) NOT NULL,
action_time TIMESTAMP DEFAULT (SYSTIMESTAMP) NOT NULL,
old_item catalog_item_t,
new_item catalog_item_t)
NESTED TABLE old_item.subject_refs STORE AS catalog_history_old_subrefs
NESTED TABLE new_item.subject_refs STORE AS catalog_history_new_subrefs;

Anonymous    Oct 01, 2003