Arşiv

Posts Tagged ‘connect by’

ora-01422:exact fetch returns more than requested number of rows hatası

22 Haziran 2010 6 yorum

Merhaba,

Pl/sql ortamında ya da oracle forms içindeki kullanımlarda bazen hazırladığımız sql lerden into ile alacağımız değerler kısmında birden fazla kayıt gelmesi durumunda ora-01422 hatası alınır.Örnek olarak aşağıdaki sql ler kontrol edilebilinir.

DECLARE
  ora_01422 NUMBER(12);
BEGIN
  BEGIN
    SELECT rownum
      INTO ora_01422
      FROM dual
    CONNECT BY rownum < 10;
  END;
END;

Bu script çalıştırıldığı zaman ora-01422 hatası alınır.Çünkü into olarak almamız gereken kayıt sayısı 1 adettir.Ama sql e dikkat edilir ise CONNECT BY ifadesi ile 10 dan küçük olan rownum lar yani 9 satırlık bir veri çekilmiştir.Fakat aşağıdaki sql de ise sorun olmadan istediğimiz kaydı alabiliriz.

DECLARE
  ora_01422 NUMBER(12);
BEGIN
  BEGIN
    SELECT rownum
      INTO ora_01422
      FROM dual;
  END;
END;

Categories: Hata Etiketler:, , , , ,

pl/sql type kullanımı örnek

Merhaba pl/sql ortamında bir type oluşturma ve kullanımına dair hazırlanmış bir örnek.Öncelikle type oluşturalım.

CREATE OR REPLACE TYPE example_type AS OBJECT
(
  nmber NUMBER,
  str   VARCHAR2(50),
  dt    DATE
);
CREATE OR REPLACE TYPE example_table IS TABLE OF example_type;

Bu scriptler ile type hazırlanmış oldu.Sıra geldi oluşturuan bu type ı kullanan bir function hazırlayama.Aşağıdaki script ile de function hazırlayabiliriz.

CREATE OR REPLACE FUNCTION example RETURN example_table IS
  RESULT example_table := example_table(example_type(NULL, NULL, NULL));

  CURSOR example_cursor IS
    SELECT rownum nmber,
           'Row' rw,
           SYSDATE dt
      FROM dual
    CONNECT BY rownum <= 10;

BEGIN

  FOR example_rec IN example_cursor LOOP

    RESULT(RESULT.LAST) := example_type(example_rec.nmber, example_rec.nmber || '.' || example_rec.rw, example_rec.dt);
    RESULT.EXTEND;
  END LOOP;

  RESULT.TRIM;
  RETURN(RESULT);

END;

Artık hem type hem de function umuz hazır. Şimdi de bunları bir sql ile kullanalım. Aşağıdaki gibi bir sql ile de type ve function kullanmış oluyoruz.

SELECT * FROM TABLE(CAST(example AS example_table));

Çalıştırdığımız sql in çıktısıda aşağıdaki gibi olacaktır.

pl/sql ile dual de sayı yazdırma

merhaba PL/SQL  ile dual da istenildiği kadar sayı zahmetsizce yazdırılabilinir.

SELECT rownum sayilar FROM dual CONNECT BY rownum < =10;

Çıktı aşağıdaki gibi olacaktır.

Takip Et

Get every new post delivered to your Inbox.

Join 62 other followers