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;
38.385900
27.179700
Like this:
One blogger likes this post.
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.

38.385900
27.179700
Like this:
One blogger likes this post.
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.

38.385900
27.179700
Like this:
One blogger likes this post.