Merhaba, Oracle PL-SQL Kodlarını
baştan sona inceleyeceğim ve pl-sql dilinin yazım kurallarını anlatacağım
referans niteliğinde bir yazı dizisi oluşturmaya karar verdim. Bu bölümde
fonksyon,paket, cursor kavramını ve hata yakalama kodlarını vereceğim.
Genel Tanımlar blok yapısı:
Prosedür
Tanımlama Syntax yapısı:
CREATE [OR REPLACE] PROCEDURE procedure_name
[(parameter1
[mode] datatype1,
parameter2 [mode] datatype2, ...)]
IS|AS
[local_variable_declarations; …]
BEGIN
-- actions;
END [procedure_name];
Fonksyonların Syntax
yapısı;
CREATE [OR REPLACE] FUNCTION function_name
[(parameter1 [mode1] datatype1, ...)]
RETURN datatype IS|AS
[local_variable_declarations; …]
BEGIN
-- actions;
RETURN expression;
END [function_name];
Örnek
bir Fonksyon;
CREATE OR REPLACE FUNCTION get_credit
(v_id
customers.customer_id%TYPE) RETURN NUMBER IS
v_credit
customers.credit_limit%TYPE := 0;
BEGIN
SELECT
credit_limit
INTO v_credit
FROM customers
WHERE customer_id = v_id;
RETURN
v_credit;
END get_credit;
/
Bu örnek fonksyonu çalıştırmak için ;
EXECUTE dbms_output.put_line(get_credit(101))
Package
Oluşturmak;
Ilk once Package’n spec kısmı;
CREATE [OR REPLACE] PACKAGE package_name IS|AS
public
type and variable declarations
subprogram
specifications
END [package_name];
Body kısmı;
CREATE [OR REPLACE]
PACKAGE BODY package_name IS|AS
private type and variable declarations
subprogram
bodies
[BEGIN initialization statements]
END [package_name];
Oracle Cursor’lar
Oracle
Cursorların 4 temel özniteliği vardır.
•
cursor_name%FOUND
•
cursor_name%ISOPEN
•
cursor_name%NOTFOUND
•
cursor_name%ROWCOUNT
Cursor
Kullanımı için Syntax yapısı;
FOR record_name
IN cursor_name LOOP
statement1;
statement2;
. . .
END
LOOP;
Örnek
Cursor Kullanımı;
SET
SERVEROUTPUT ON
DECLARE
CURSOR cur_cust IS
SELECT cust_first_name, credit_limit
FROM customers
WHERE credit_limit > 4000;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE
( ||' '||
);
END LOOP;
END;
/
Hata Yakalama;
DECLARE
v_lname VARCHAR2(15);
BEGIN
SELECT cust_last_name INTO v_lname FROM
customers
WHERE cust_first_name='Ally';
DBMS_OUTPUT.PUT_LINE ('Ally''s last name is :
'
||v_lname);
EXCEPTION
WHEN
TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE (' Your select statement
retrieved multiple rows. Consider using
a
cursor.');
END;
/
Oracle Hata Tipleri;
–
NO_DATA_FOUND
–
TOO_MANY_ROWS
–
INVALID_CURSOR
–
ZERO_DIVIDE
–
DUP_VAL_ON_INDEX
Hata Fırlatma ;
raise_application_error
(error_number,
message[, {TRUE | FALSE}]);