SlideShare a Scribd company logo
Copyright	©	2014	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
PL/SQL – The KISS programming language
Error Management Features
of Oracle PL/SQL
1
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
2
Resources	for	Oracle	Database	Developers
• Official	home	of	PL/SQL	- oracle.com/plsql
• SQL-PL/SQL	discussion	forum	on	OTN
https://community.oracle.com/community/database/developer-tools/sql_and_pl_sql
• PL/SQL	and	EBR	blog	by	Bryn	Llewellyn	- https://blogs.oracle.com/plsql-and-ebr
• Oracle	Learning	Library	- oracle.com/oll
• Weekly	PL/SQL	and	SQL	quizzes,	and	more	- devgym.oracle.com
• Ask	Tom	- asktom.oracle.com – 'nuff said
• LiveSQL	- livesql.oracle.com – script	repository	and	12/7	12c	database
• oracle-developer.net - great	content	from	Adrian	Billington
• oracle-base.com - great	content	from	Tim	Hall
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
3
Error	Management	in	PL/SQL
• Defining	exceptions
• Raising	exceptions
• Handling	exceptions
• Let’s	start	with	quizzes	to	test	your	knowledge	of	the	basic	mechanics	of	
exception	handling	in	PL/SQL.
All	referenced	code	is	available	at	livesql.oracle.com and	
in	my	demo.zip file	from	the	
PL/SQL	Learning	Library:	oracle.com/oll/plsql.
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
44
Quiz:	When	strings	don't	fit...(1)
DECLARE
aname VARCHAR2(5);
BEGIN
BEGIN
aname := 'Big String';
DBMS_OUTPUT.PUT_LINE (aname);
EXCEPTION
WHEN VALUE_ERROR THEN
DBMS_OUTPUT.PUT_LINE ('Inner block');
END;
DBMS_OUTPUT.PUT_LINE ('What error?');
EXCEPTION
WHEN VALUE_ERROR THEN
DBMS_OUTPUT.PUT_LINE ('Outer block');
END;
excquiz1.sql
livesql.oracle.com "Test	Your	PL/SQL	Exception	Handling	Knowledge"
• What	do	you	see	after	running	this	block?
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
5
Quiz:	When	strings	don't	fit...(2)
DECLARE
aname VARCHAR2(5);
BEGIN
DECLARE
aname VARCHAR2(5) := 'Big String';
BEGIN
DBMS_OUTPUT.PUT_LINE (aname);
EXCEPTION
WHEN VALUE_ERROR
THEN
DBMS_OUTPUT.PUT_LINE ('Inner block');
END;
DBMS_OUTPUT.PUT_LINE ('What error?');
EXCEPTION
WHEN VALUE_ERROR
THEN
DBMS_OUTPUT.PUT_LINE ('Outer block');
END;
/
excquiz2.sql
• What	do	you	see	after	running	this	block?
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
6
Defining	Exceptions
• The	EXCEPTION	is	a	limited	type	of	data.
– Has	just	two	attributes:	code	and	message.	
– You	can	RAISE	and	handle	an	exception,	but	it	cannot	be	passed	as	an	argument	in	a	
program.
• Associate	names	with	error	numbers	with	the	EXCEPTION_INIT	pragma.
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
7
The	EXCEPTION_INIT	Pragma
• Use	EXCEPTION_INIT	to...
– Give	names	to	Oracle	error	codes	for	which	no	exception	was	defined.
– Assign	an	error	code	other	than	1	to	a	user-defined	exception	(usually	in	the	-20NNN	
range	used	by	RAISE_APPLICATION_ERROR).
CREATE OR REPLACE PROCEDURE upd_for_dept (
dept_in IN employee.department_id%TYPE
, newsal_in IN employee.salary%TYPE
)
IS
e_forall_failure EXCEPTION;
PRAGMA EXCEPTION_INIT (e_forall_failure, -24381);
exception_init.sql
livesql.oracle.com search	"exception_init"
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
88
Raising	Exceptions
• RAISE	raises	the	specified	exception	by	name.	
– RAISE;	re-raises	current	exception.	Callable	only	within	the	exception	section.
• RAISE_APPLICATION_ERROR
– Communicates	an	application	specific	error	back	to	a	non-PL/SQL	host	environment.
– Error	numbers	restricted	to	the	-20,999	- -20,000	range.
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
9
The	RAISE	Statement
• Use	RAISE	to	raise	a	specific,	named	exception	or	to	re-raise the	current	
exception.
– Raise	pre-defined	and	user-defined	exceptions.
• "RAISE;"	re-raises	the	current	exception.
– You	can	only	use	RAISE;	from	within	an	exception	handler.
e_forall_failure EXCEPTION;
PRAGMA EXCEPTION_INIT (e_forall_failure, -24381);
BEGIN
...
RAISE e_forall_failure;
EXCEPTION
WHEN e_forall_failiure THEN
log_error();
RAISE;
WHEN OTHERS THEN
log_error();
RAISE;
raise.sql
reraise.sql
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
10
Communicating	Application	Errors
• When	Oracle	raises	an	exception,	it	provides	the	error	code	and	error	
message.
• When	an	application-specific	error	occurs,	such	as	"Account	balance	too	
low",	it	is	up	to	you,	the	developer,	to	communicate	all	necessary	
information	to	the	user.
– This	can	involve	an	error	code,	error	message,	or	both.
• For	this,	you	must	use	RAISE_APPLICATION_ERROR.
– And,	really,	that	is	the	only	time.
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
1111
Defining	application-specific	messages
• You	can	raise	an	application-specific	error	with	RAISE,	but	you	cannot	pass	
back	an	application-specific	message that	way.
• With	RAISE_APPLICATION_ERROR,	you	can	issue	your	own	"ORA-"	error	
messages.
– This	built-in	replaces	the	values	that	would	normally	be	returned	with	a	call	to	
SQLCODE	and	SQLERRM	with	your values.
• This	information	can	be	displayed	to	the	user	or	sent	to	the	error	log.
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
1212
RAISE_APPLICATION_ERROR	Example
IF :NEW.birthdate > ADD_MONTHS (SYSDATE, -1 * 18 * 12)
THEN
RAISE_APPLICATION_ERROR
(-20070, ‘Employee must be 18.’);
END IF;
• This	code	from	a	database	trigger	(indicated	by	":NEW")	shows	a	typical	
(and	typically	problematic)	usage	of	RAISE_APPLICATION_ERROR.
– It's	a	business	rule	requiring	a	"business"	message.
• Typically	problematic:
– Hard-coding	of	error	code	and	message
– Duplication	of	"rule"	information:	18	years.
employee_must_be_18.sql
Livesql.oracle.com search	"raise_application_error"
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
13
RAISE_APPLICATION_ERROR	Details
• Defined	in	the	DBMS_STANDARD	package.
• The	num argument	range:	-20,999	and	-20,000.
– Use	something	else	and	lose the	error	message!
• Error	messages	can	be	up	to	2048	bytes*.
– You	can	pass	to	a	string	of	up	to	32K	bytes,	but	you	won't	be	able	to	get	it	"out";	your	
users	will	not	be	able	to	see	the	full	string.
• Third	argument	determines	if	the	full	stack of	errors	is	returned	or	just	the	
most	recent.
RAISE_APPLICATION_ERROR (
num binary_integer
, msg varchar2
, keeperrorstack boolean default FALSE);
raise_application.sql
max_rae_string_length.sql
errorstack.sql
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
14
Handling	Exceptions
• The	EXCEPTION	section	consolidates	all	error	handling	logic	in	a	block.
– But	only	traps	errors	raised	in	the	executable	section	of	the	block.
• Several	useful	functions	usually	come	into	play:
– SQLCODE	and	SQLERRM
– DBMS_UTILITY.FORMAT_CALL_STACK
– DBMS_UTILITY.FORMAT_ERROR_STACK
– DBMS_UTILITY.FORMAT_ERROR_BACKTRACE
– Plus,	new	to	12.1,	the	UTL_CALL_STACK	package
• The	DBMS_ERRLOG	package
– Quick	and	easy	logging	of	DML	errors
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
15
SQLCODE	and	SQLERRM
• SQLCODE	returns	the	error	code	of	the	most	recently-raised	exception.
– You	cannot	call	it	inside	an	SQL	statement	(even	inside	a	PL/SQL	block).
• SQLERRM	is	a	generic	lookup	function:	return	the	message	text	for	an	error	
code.
– And	if	you	don't	provide	an	error	code,	SQLERRM	returns	the	message	for	SQLCODE.
• But....SQLERRM	might	truncate	the	message.
– Very	strange,	but	it	is	possible.
– So	Oracle	recommends	that	you	not	 use	this	function.
sqlerrm.sql
livesql.oracle.com search	"sqlerrm"
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
16
DBMS_UTILITY.FORMAT_CALL_STACK
• The	"call	stack"	reveals	the	path taken	through	your	application	code	to	get	
to	that	point.
• Very	useful	whenever	tracing	or	logging	errors.
• The	string	is	formatted	to	show	line	number	and	program	unit	name.
– But	it	does	not	reveal	the	names	of	subprograms in	packages.
callstack.sql	
callstack.pkg
livesql.oracle.com search	"call_stack"
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
17
DBMS_UTILITY.FORMAT_ERROR_STACK
• This	built-in	returns	the	error	stack in	the	current	session.
– Possibly	more	than	one	error	in	stack.
• Returns	NULL	when	there	is	no	error.
• Returns	a	string	of	maximum	size	2000	bytes	(according	to	the	
documentation).
• Oracle	recommends	you	use	this	instead	of	SQLERRM,	to	reduce	the	
chance	of	truncation.
errorstack.sql
big_error_stack.sql
livesql.oracle.com search	"error_stack"
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
18
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE
• The	backtrace function	answers	the	question:	"Where	was	my	error	raised?
– Prior	to	10.2,	you	could	not	get	this	information	from	within	PL/SQL.
• Call	it	whenever	you	are	logging	an	error.
• When	you	re-raise	your	exception	(RAISE;)	or	raise	a	different	exception,	
subsequent	BACKTRACE	calls	will	point	to	that line.
– So	before	a	re-raise,	call	BACKTRACE	and	store	that	information	to	avoid	losing	the	
original	line	number.
backtrace.sql
bt.pkg
livesql.oracle.com search	"backtrace"
18
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
19
Or	Use	UTL_CALL_STACK	(12.1	and	higher)
• This	new	package	provides	a	granular	API	to	the	call	stack	and	back	trace.
• It	also	now	provides	complete	name	information,	down	to	the	nested	
subprogram.
• But	the	bottom	line	is	that	generally	you	will	call	your	functions	in	the	
exception	section	(thru	a	generic	error	logging	procedure,	I	hope!)	and	
then	write	that	information	to	your	error	log.
• When	you	need	to	diagnose	an	error,	go	to	the	log,	grab	the	string,	and	
analyze.
12c_utl_call_stack*.sql
liveSQL.oracle.com search	"utl_call_stack"
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
20
Continuing	Past	Exceptions
• What	if	you	want	to	continue	processing	in	your	program	even	if	an	error	
has	occurred?
• Three	options...
– Use	a	nested	block	
– FORALL	with	SAVE	EXCEPTIONS
– DBMS_ERRLOG
continue_past_exception.sql
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
21
Exception	handling	and	FORALL
• When	an	exception	occurs	in	a	DML	statement....
– That	statement	is	rolled	back	and	the	FORALL	stops.
– All	(previous)	successful	statements	are	not rolled	back.
• Use	the	SAVE	EXCEPTIONS	clause	to	tell	Oracle	to	continue	past exceptions,	
and	save	the	exception	information	for	later.
• Then	check	the	contents	of	the	pseudo-collection	of	records,	
SQL%BULK_EXCEPTIONS.
– Two	fields:	ERROR_INDEX	and	ERROR_CODE
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
22
FORALL	with	SAVE	EXCEPTIONS
• Suppress errors at the statement level.
CREATE OR REPLACE PROCEDURE load_books (books_in IN book_obj_list_t)
IS
bulk_errors EXCEPTION;
PRAGMA EXCEPTION_INIT ( bulk_errors, -24381 );
BEGIN
FORALL indx IN books_in.FIRST..books_in.LAST
SAVE EXCEPTIONS
INSERT INTO book values (books_in(indx));
EXCEPTION
WHEN bulk_errors THEN
FOR indx in 1..SQL%BULK_EXCEPTIONS.COUNT
LOOP
log_error (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE);
END LOOP;
END;
Allows processing of all
statements, even after an error
occurs.
Iterate through pseudo-
collection of errors.
bulkexc.sql
livesql.oracle.com search "save_exceptions"
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
23
LOG	ERRORS	and	DBMS_ERRLOG	
• Use	this	package	(added	in	Oracle	Database	10g	Release	2)	to	enable	row-
level	error	logging	(and	exception	suppression)	for	DML	statements.
– Compare	to	FORALL	SAVE	EXCEPTIONS,	which	suppresses	exceptions	at	the	statement
level.	
• Creates	a	log	table	to	which	errors	are	written.
– Lets	you	specify	maximum	number	of	"to	ignore"	errors.
• Better	performance	than	trapping,	logging	and	continuing	past	exceptions.
– Exception	handling	is	slow.
dbms_errlog.sql
dbms_errlog_helper.pkg
dbms_errlog_vs_save_exceptions.sql
livesql.oracle.com	search	"log	errors"
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
24
LOG	ERRORS	and	DBMS_ERRLOG
• Suppress	DML	row-level	errors!
• Impact	of	errors	on	DML	execution
• Introduction	to	LOG	ERRORS	feature
• Creating	an	error	log	table
• Adding	LOG	ERRORS	to	your	DML	statement
• "Gotchas"	in	the	LOG	ERRORS	feature
• The	DBMS_ERRLOG	helper	package
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
25
Impact	of	errors	on	DML	execution
• A	single	DML	statement can	result	in	changes	to	multiple	rows.
• When	an	error	occurs	on	a	change	to	a	row....
– All	previous	changes	from	that	statement	are	rolled	back.
– No	other	rows	are	processed.
– An	error	is	passed	out	to	the	calling	block	(turns	into	a	PL/SQL	exception).
– No	rollback	on	completed	DML	in	that	session.
• Usually acceptable,	but	what	if	you	want	to:
– Avoid	losing	all	prior	changes?
– Avoid	the	performance	penalty	of	exception	management	in	PL/SQL?
errors_and_dml.sql
livesql.oracle.com	search	"Exceptions	Do	Not	Rollback"
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
26
Row-level	Error	Suppression	in	DML	with	LOG	ERRORS
• Once	the	error	propagates	out	to	the	PL/SQL	layer,	it	is	too	late;	all	
changes	to	rows	have	been	rolled	back.
• The	only	way	to	preserve	changes	to	rows	is	to	add	the	LOG	ERRORS	
clause	in	your	DML	statement.
– Errors	are	suppressed	at	row	level	within	the	SQL	Layer.
• But	you	will	first	need	to	created	an	error	log	table	with	DBMS_ERRLOG.
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
27
Terminology	for	LOG	ERRORS	feature
• DML	table:	the	table	on	which	DML	operations	will	be	performed
• Error	logging	table	(aka,	error	table):	the	table	that	will	contain	history	of	
errors	for	DML	table
• Reject	limit:	the	maximum	number	of	errors	that	are	acceptable	for	a	given	
DML	statement
– "If	more	than	100	errors	occur,	something	is	badly	wrong,	just	stop."
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
28
Step	1.	Create	an	error	log	table
• Call	DBMS_ERRLOG.CREATE_ERROR_LOG	to	create	the	error	logging	table	
for	your	"DML	table."
– Default	name:	ERR$_<your_table_name>
• You	can	specify	alternative	table	name,	tablespace,	owner.
– Necessary	if	DML	table	name	>	25	characters!
• The	log	table	contains	five	standard	error	log	info	columns	and	then	a	
column	for	each	VARCHAR2-compatible	column	in	the	DML	table.
dbms_errlog.sql
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
29
Step	2:	Add	LOG	ERRORS	to	your	DML
• Specify	the	limit	of	errors	after	which	you	want	the	DML	statement	to	stop	
– or	UNLIMITED	to	allow	it	to	run	its	course.
• Then...make	sure	to	check	the	error	log	table	after	you	run	your	DML	
statement!	
– Oracle	will	not raise	an	exception	when	the	DML	statement	ends	– big	difference	
from	SAVE	EXCEPTIONS.
UPDATE employees
SET salary = salary_in
LOG ERRORS REJECT LIMIT UNLIMITED;
UPDATE employees
SET salary = salary_in
LOG ERRORS REJECT LIMIT 100;
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
30
"Gotchas"	in	the	LOG	ERRORS	feature
• The	default	error	logging	table	is	missing	some	critical	information.
– When	the	error	occurred,	who	executed	the	statement,	where	it	occurred	in	my	code
• Error	reporting	is	often	obscure:	"Table	or	view	does	not	exist."
• It’s	up	to	you	to	grant	the	necessary	privileges	on	the	error	log	table.
– If	the	“DML	table”	is	modified	from	another	schema,	that	schema	must	be	able	to	write	
to	the	log	table	as	well.
• Use	the	DBMS_ERRLOG	helper	package	to	get	around	many	of	these	issues.
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
31
The	DBMS_ERRLOG	helper	package
• Creates	the	error	log	table.
• Adds	three	columns	to	keep	track	of	user,	timestamp	and	location	in	code.
• Compiles	a	trigger	to	populate	the	added	columns.
• Creates	a	package	to	make	it	easier	to	manage	the	contents	of	the	error	log	
table.
dbms_errlog_helper.sql
dbms_errlog_helper_demo.sql
livesql.oracle.com	search	"helper	package"
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
32
LOG	ERRORS	- Conclusions	
• When	executing	multiple	DML	statements	or	affecting	multiple	rows,	
decide	on	your	error	policy.
– Stop	at	first	error	or	continue?
• Then	decide	on	the	level	of	granularity	of	continuation:	statement	or	row?
– LOG	ERRORS	is	the	only	way	to	perform	row-level	error	suppression.
• Make	sure	that	you	check	and	manage	any	error	logs	created	by	your	
code.
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
33
Some	Recommendations	for	Error	Management
• Set	standards	before	you	start	coding
– It's	not	the	kind	of	thing	you	can	easily	add	in	later
• Always	call	a	log	procedure	in	your	exception	handler.
– And	everyone	should	use	the	same log	procedure!
• Decide	where	in	the	stack	you	handle	exceptions.
– Always	at	top	level	block	to	ensure	that	users	don't	see	ugly	error	messags.
– If	you	need	to	log	local	block	state,	handle	in	that	block	and	re-raise.
• Just	use	logger.	https://github.com/OraOpenSource/Logger
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
34
Always	call	a	log	procedure	in	your	exception	handler
• Always	log	errors	to	a	table.
• Never	insert	into	your	log	table	in	the	handler.
• Everyone	uses	the	same	procedure.
• Avoid	multiple	loggings	for	the	same	error.
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
35
Decide	where	in	the	stack	you	handle	exceptions.
• Some	suggest	that	only	the	top-level	block	should	trap	an	exception.
– The	error	utility	functions	"remember"	where	it	came	from.
• But	you	lose	information	about	the	application	state	at	the	moment	the	
exception	was	raised.
• What	I	do:
– Always	handle	at	top	level	block	to	ensure	that	users	don't	see	ugly	error	messags.
– If	Ineed to	log	local	block	state	(parameters,	variables,	etc.),	I	handle	in	that	block	
and	re-raise.
Copyright	©	2018 Oracle	and/or	its	affiliates.	All	rights	reserved.		|
36
Error	Management	Summary	
• Exceptions	raised	in	the	declaration	section	always	escape	unhandled.
– Consider	assigning	default	values	in	the	executable	section	instead.
• Call	DBMS_UTILITY	or	UTL_CALL_STACK	functions	whenever	you	are	
logging	errors	and	tracing	execution.
• Suppress	errors	at	statement	level	with	FORALL-SAVE	EXCEPTIONS
• Suppress	errors	at	row	level	with	LOG_ERRORS
– But	don't	use	the	ERR$	table	"as	is".
• Rely	on	a	standard,	reusable	error	logging	utility.
Error Management Features of PL/SQL

More Related Content

What's hot (20)

PPTX
Turbocharge SQL Performance in PL/SQL with Bulk Processing
Steven Feuerstein
 
PDF
Oracle db performance tuning
Simon Huang
 
PPTX
What to Expect From Oracle database 19c
Maria Colgan
 
PDF
Oracle Database Migration to Oracle Cloud Infrastructure
SinanPetrusToma
 
PDF
Understanding oracle rac internals part 1 - slides
Mohamed Farouk
 
PDF
Introduction of Oracle Database Architecture
Ryota Watabe
 
PPT
Less08 users
Amit Bhalla
 
PDF
Oracle Instance 介紹
Chien Chung Shen
 
PDF
IO Resource Management on Exadata
Enkitec
 
PDF
Sql server 構築 運用 tips
Masayuki Ozawa
 
PPTX
Oracle sql high performance tuning
Guy Harrison
 
PDF
Oracle 索引介紹
Chien Chung Shen
 
PDF
JSON and PL/SQL: A Match Made in Database
Steven Feuerstein
 
PDF
Intro ProxySQL
I Goo Lee
 
PPT
Oracle archi ppt
Hitesh Kumar Markam
 
PDF
Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年7月版]
オラクルエンジニア通信
 
PPTX
The Oracle Autonomous Database
Connor McDonald
 
PDF
MySQL Shell - The Best MySQL DBA Tool
Miguel Araújo
 
PDF
Reporting with Oracle Application Express (APEX)
Dimitri Gielis
 
PDF
Oracle Management Cloud サービス概要説明資料
オラクルエンジニア通信
 
Turbocharge SQL Performance in PL/SQL with Bulk Processing
Steven Feuerstein
 
Oracle db performance tuning
Simon Huang
 
What to Expect From Oracle database 19c
Maria Colgan
 
Oracle Database Migration to Oracle Cloud Infrastructure
SinanPetrusToma
 
Understanding oracle rac internals part 1 - slides
Mohamed Farouk
 
Introduction of Oracle Database Architecture
Ryota Watabe
 
Less08 users
Amit Bhalla
 
Oracle Instance 介紹
Chien Chung Shen
 
IO Resource Management on Exadata
Enkitec
 
Sql server 構築 運用 tips
Masayuki Ozawa
 
Oracle sql high performance tuning
Guy Harrison
 
Oracle 索引介紹
Chien Chung Shen
 
JSON and PL/SQL: A Match Made in Database
Steven Feuerstein
 
Intro ProxySQL
I Goo Lee
 
Oracle archi ppt
Hitesh Kumar Markam
 
Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年7月版]
オラクルエンジニア通信
 
The Oracle Autonomous Database
Connor McDonald
 
MySQL Shell - The Best MySQL DBA Tool
Miguel Araújo
 
Reporting with Oracle Application Express (APEX)
Dimitri Gielis
 
Oracle Management Cloud サービス概要説明資料
オラクルエンジニア通信
 

Similar to Error Management Features of PL/SQL (20)

PPT
Error management
daniil3
 
PPT
Weird Plsql
webanddb
 
PPT
Oracle PL/SQL exception handling
Smitha Padmanabhan
 
PPT
04 Handling Exceptions
rehaniltifat
 
PPT
Les23[1]Handling Exceptions
siavosh kaviani
 
PPTX
ORACLE PL SQL FOR BEGINNERS
mohdoracle
 
PPTX
Different Kinds of Exception in DBMS
Suja Ritha
 
PPTX
Take Full Advantage of the Oracle PL/SQL Compiler
Steven Feuerstein
 
PDF
Exception Handling - The Good, the Bad and the Maybe (APEXCONN23)
Maik Becker
 
DOCX
Oracle pl sql
Durga Rao
 
PPTX
PL/SQL & SQL CODING GUIDELINES – Part 7
Larry Nung
 
PPT
02 Writing Executable Statments
rehaniltifat
 
PDF
Oracle PL SQL Programming Sixth Edition Steven Feuerstein
takayasauwai
 
PDF
Oracle Plsql Programming Sixth Edition Steven Feuerstein Bill Pribyl
msaadiutura
 
PDF
Oracle PL SQL Programming Sixth Edition Steven Feuerstein
bowerslejon
 
PPTX
PL/SQL Fundamentals I
Nick Buytaert
 
DOC
3963066 pl-sql-notes-only
Ashwin Kumar
 
PDF
Oracle PL SQL Programming Animal Guide 5th Edition Steven Feuerstein
falchkarun53
 
PPTX
PLSQL Tutorial
Quang Minh Đoàn
 
PDF
Pl sql student guide v 4
Nexus
 
Error management
daniil3
 
Weird Plsql
webanddb
 
Oracle PL/SQL exception handling
Smitha Padmanabhan
 
04 Handling Exceptions
rehaniltifat
 
Les23[1]Handling Exceptions
siavosh kaviani
 
ORACLE PL SQL FOR BEGINNERS
mohdoracle
 
Different Kinds of Exception in DBMS
Suja Ritha
 
Take Full Advantage of the Oracle PL/SQL Compiler
Steven Feuerstein
 
Exception Handling - The Good, the Bad and the Maybe (APEXCONN23)
Maik Becker
 
Oracle pl sql
Durga Rao
 
PL/SQL & SQL CODING GUIDELINES – Part 7
Larry Nung
 
02 Writing Executable Statments
rehaniltifat
 
Oracle PL SQL Programming Sixth Edition Steven Feuerstein
takayasauwai
 
Oracle Plsql Programming Sixth Edition Steven Feuerstein Bill Pribyl
msaadiutura
 
Oracle PL SQL Programming Sixth Edition Steven Feuerstein
bowerslejon
 
PL/SQL Fundamentals I
Nick Buytaert
 
3963066 pl-sql-notes-only
Ashwin Kumar
 
Oracle PL SQL Programming Animal Guide 5th Edition Steven Feuerstein
falchkarun53
 
PLSQL Tutorial
Quang Minh Đoàn
 
Pl sql student guide v 4
Nexus
 
Ad

More from Steven Feuerstein (15)

PDF
New(er) Stuff in PL/SQL
Steven Feuerstein
 
PDF
Six simple steps to unit testing happiness
Steven Feuerstein
 
PDF
Speakers at Nov 2019 PL/SQL Office Hours session
Steven Feuerstein
 
PDF
New Stuff in the Oracle PL/SQL Language
Steven Feuerstein
 
PDF
AskTOM Office Hours on Database Triggers
Steven Feuerstein
 
PDF
PL/SQL Guilty Pleasures
Steven Feuerstein
 
PDF
Oracle Application Express and PL/SQL: a world-class combo
Steven Feuerstein
 
PDF
OLD APEX and PL/SQL
Steven Feuerstein
 
PDF
High Performance PL/SQL
Steven Feuerstein
 
PDF
Oracle PL/SQL 12c and 18c New Features + RADstack + Community Sites
Steven Feuerstein
 
PDF
AskTOM Office Hours - Dynamic SQL in PL/SQL
Steven Feuerstein
 
PPT
Database Developers: the most important developers on earth?
Steven Feuerstein
 
PDF
Unit Testing Oracle PL/SQL Code: utPLSQL, Excel and More
Steven Feuerstein
 
PDF
Impact Analysis with PL/Scope
Steven Feuerstein
 
PPTX
utPLSQL: Unit Testing for Oracle PL/SQL
Steven Feuerstein
 
New(er) Stuff in PL/SQL
Steven Feuerstein
 
Six simple steps to unit testing happiness
Steven Feuerstein
 
Speakers at Nov 2019 PL/SQL Office Hours session
Steven Feuerstein
 
New Stuff in the Oracle PL/SQL Language
Steven Feuerstein
 
AskTOM Office Hours on Database Triggers
Steven Feuerstein
 
PL/SQL Guilty Pleasures
Steven Feuerstein
 
Oracle Application Express and PL/SQL: a world-class combo
Steven Feuerstein
 
OLD APEX and PL/SQL
Steven Feuerstein
 
High Performance PL/SQL
Steven Feuerstein
 
Oracle PL/SQL 12c and 18c New Features + RADstack + Community Sites
Steven Feuerstein
 
AskTOM Office Hours - Dynamic SQL in PL/SQL
Steven Feuerstein
 
Database Developers: the most important developers on earth?
Steven Feuerstein
 
Unit Testing Oracle PL/SQL Code: utPLSQL, Excel and More
Steven Feuerstein
 
Impact Analysis with PL/Scope
Steven Feuerstein
 
utPLSQL: Unit Testing for Oracle PL/SQL
Steven Feuerstein
 
Ad

Recently uploaded (20)

PDF
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
PDF
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PDF
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
PDF
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
PPTX
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
PPTX
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
PPTX
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
PPTX
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
PDF
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PDF
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
PDF
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
PDF
July Patch Tuesday
Ivanti
 
PDF
Blockchain Transactions Explained For Everyone
CIFDAQ
 
PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
PDF
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
PDF
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
July Patch Tuesday
Ivanti
 
Blockchain Transactions Explained For Everyone
CIFDAQ
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 

Error Management Features of PL/SQL