Erhan Kocabaş | Oracle PL-SQL Cursor,Object ve Diziler
0

Oracle PL-SQL Cursor,Object ve Diziler

by Erhan Kocabaş 13. Kasım 2009 02:17

Oracle Cursor’larda satırların içinde tek tek dolaşabilmek için fetch komutunu kullanırız. Bu komutla Cursor’un içine attığımız tabloların kolon adlarıyla içindeki veriye ulaşır ve satır satır işlem yapabiliriz.

Örnek Kod;

 

DECLARE

  CURSOR cur_cust IS

    SELECT customer_id, cust_last_name, cust_email

    FROM customers

    WHERE credit_limit = 1200;

  v_cust_record    cur_cust%ROWTYPE;

BEGIN

  OPEN cur_cust;

  LOOP

    FETCH cur_cust INTO v_cust_record;   

...

Parametre alan cursor tanımlamak;

CREATE OR REPLACE PROCEDURE cust_pack

 (p_crd_limit_in NUMBER, p_acct_mgr_in NUMBER)

IS

  v_credit_limit NUMBER := 1500;

   CURSOR cur_cust

           (p_crd_limit NUMBER, p_acct_mgr NUMBER)

     IS

     SELECT customer_id, cust_last_name, cust_email

     FROM customers

     WHERE credit_limit = p_crd_limit

     AND   account_mgr_id = p_acct_mgr;

   cust_record    cur_cust%ROWTYPE;

BEGIN

   OPEN cur_cust(p_crd_limit_in, p_acct_mgr_in);

...

   CLOSE cur_cust;

...

   OPEN cur_cust(v_credit_limit, 145);

...

END;

 

Oracle da Objectler;

Oracle object’ler değişken şablonları olarak kullanılır.  Büyük bir projede yüzlerce değişkenin tanımlandığını düşünürsek objectler’in oldukça kullanışlı olduğunu görebiliriz.

CREATE [OR REPLACE] TYPE type_name

  AS OBJECT

    ( attribute1 datatype,

      attribute2 datatype,

      ...

    );

Örnek olarak;

CREATE TYPE cust_address_typ

  AS OBJECT

    ( street_address     VARCHAR2(40)

    , postal_code        VARCHAR2(10)

    , city               VARCHAR2(30)

    , state_province     VARCHAR2(10)

    , country_id         CHAR(2)

    );

/

Örnek Kullanım;

CREATE TABLE customers

    ( customer_id        NUMBER(6)    ...   

    , cust_first_name    VARCHAR2(20) ...

    , cust_last_name     VARCHAR2(20) ...

    , cust_address       cust_address_typ

    ...

DESCRIBE customers

Name                         Null?    Type

---------------------------- -------- ----------

CUSTOMER_ID                  NOT NULL NUMBER(6)

CUST_FIRST_NAME              NOT NULL VARCHAR2(20)

CUST_LAST_NAME               NOT NULL VARCHAR2(20)

CUST_ADDRESS                          CUST_ADDRESS_TYP

...

Yada insert cümlesinde;

 

INSERT INTO CUSTOMERS (customer_id, cust_first_name,

                       cust_last_name, cust_address)

VALUES (1000, 'John', 'Smith',

  cust_address_typ ( '285 Derby Street'

                  , '02465'                 

                  , 'Boston'

                  , 'MA'

                  , 'US'));

Oracle’da Dizi kullanımı

Oracle da dizileri kullanırken dikkatli olmanız gerekiyor. Dizilerin bazı türlerini .NET tarafından gönderirken sorun yaşayabilirsiniz. Ama yinede bilindik diziler işinizi kolaylaştıracaktır.

TYPE type_name IS TABLE OF element_datatype             

[NOT NULL];

TYPE type_name IS VARRAY  (max_elements) OF            

element_datatype [NOT NULL];

CREATE OR REPLACE PACKAGE manage_dept_proj AS

  TYPE typ_proj_details IS TABLE OF typ_Project;

  ...

  PROCEDURE allocate_proj

    (propose_proj IN typ_proj_details);

  FUNCTION top_project (n NUMBER)

     RETURN typ_proj_details;

  ...

Dizilerle ilgili metodlar;

       EXISTS

       COUNT

       LIMIT

       FIRST and LAST

       PRIOR and NEXT

       EXTEND

       TRIM

       DELETE

Dizi elemanlarına ulaşmak;

DECLARE

  i INTEGER;

  v_accounting_project typ_ProjectList;

BEGIN

  v_accounting_project := typ_ProjectList(

    typ_Project (1,'Dsgn New Expense Rpt', 3250),

    typ_Project (2, 'Outsource Payroll', 12350),

    typ_Project (3, 'Audit Accounts Payable',1425));

  i := v_accounting_project.FIRST ;

  WHILE i IS NOT NULL LOOP

    IF v_accounting_project(i).cost > 10000 then

      DBMS_OUTPUT.PUT_LINE('Project too expensive: '

                      || v_accounting_project(i).title);

    END IF;

    i := v_accounting_project.NEXT (i);

  END LOOP;

END;

/

 

 

 

 

 

3 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , , ,

Makale | Oracle PL-SQL

Yorumlar

Yorum ekle


 

biuquote
  • Yorum
  • Canlı önizleme
Loading



Powered by BlogEngine.NET 1.4.5.0
Original Design by Laptop Geek, Adapted by onesoft