Creating and using stored procedures and functions in PL/SQL involves several key steps. First, you need to understand the basic syntax. Stored procedures are blocks of PL/SQL code that perform a specific task, often involving multiple SQL statements. They don't return a value directly. Functions, on the other hand, are similar but always return a single value.
Creating a Stored Procedure:
<code class="sql">CREATE OR REPLACE PROCEDURE my_procedure (param1 IN NUMBER, param2 OUT VARCHAR2) AS variable1 NUMBER := 0; BEGIN -- Your PL/SQL code here SELECT COUNT(*) INTO variable1 FROM my_table WHERE column1 = param1; param2 := 'Record count: ' || variable1; EXCEPTION WHEN OTHERS THEN param2 := 'Error occurred'; END; /</code>
This example shows a procedure my_procedure
that takes a number as input (param1
) and returns a string message through an output parameter (param2
). The /
at the end is a crucial part of the syntax in SQL*Plus or SQL Developer to execute the command.
Creating a Function:
<code class="sql">CREATE OR REPLACE FUNCTION my_function (param1 IN NUMBER) RETURN NUMBER AS variable1 NUMBER := 0; BEGIN SELECT SUM(column2) INTO variable1 FROM my_table WHERE column1 = param1; RETURN variable1; EXCEPTION WHEN NO_DATA_FOUND THEN RETURN 0; END; /</code>
This function my_function
takes a number as input and returns the sum of a column from a table. Note the RETURN
statement, essential for functions. The EXCEPTION
block handles the case where no data is found.
Using Stored Procedures and Functions:
Stored procedures are called using the EXECUTE
statement or within other PL/SQL blocks:
<code class="sql">EXECUTE my_procedure(10, :output_variable); DBMS_OUTPUT.PUT_LINE(:output_variable);</code>
Functions can be called directly within SQL statements or PL/SQL blocks:
<code class="sql">SELECT my_function(20) FROM dual; SELECT column1, my_function(column1) FROM my_table;</code>
Optimizing PL/SQL for performance involves several strategies focusing on efficient SQL and PL/SQL coding practices.
FORALL
statements instead of individual INSERT
or UPDATE
statements in loops.FORALL
statements for bulk DML operations. This significantly reduces the overhead of repeated context switches.WHERE
clauses to filter data efficiently. Avoid using SELECT *
and instead specify only the necessary columns.SELECT INTO
) instead of explicit cursors. If you must use cursors, consider using implicit cursors where appropriate or optimizing cursor fetching.Error handling is crucial for robust PL/SQL code. The EXCEPTION
block allows you to gracefully handle errors without crashing the entire application.
<code class="sql">BEGIN -- Your PL/SQL code here EXCEPTION WHEN NO_DATA_FOUND THEN -- Handle NO_DATA_FOUND exception DBMS_OUTPUT.PUT_LINE('No data found.'); WHEN OTHERS THEN -- Handle other exceptions DBMS_OUTPUT.PUT_LINE('An error occurred: ' || SQLERRM); -- Log the error for later analysis END;</code>
This example demonstrates a basic EXCEPTION
block. The WHEN OTHERS
clause catches any unhandled exceptions. SQLERRM
provides the error message. It's essential to log errors for debugging and monitoring purposes. More specific exception handling is preferable over a general WHEN OTHERS
block to provide more informative error messages and facilitate better debugging. Consider using custom exceptions for specific application errors.
The primary difference lies in their return values:
When to use Stored Procedures:
When to use Functions:
In essence, use procedures for actions and functions for calculations and data retrieval. The choice depends on the specific task you need to accomplish. If you need to return a single value, a function is the better choice. If you are performing a series of actions without a single return value, a procedure is more suitable.
The above is the detailed content of How do I create and use stored procedures and functions in PL/SQL?. For more information, please follow other related articles on the PHP Chinese website!