11. Aşağıdaki değişkenlerden hangisinin değeri diğerlerinden farklıdır?
A) sayi NUMBER(5,0) := 12345;
B) sayi NUMBER(5,0) := 12345.123;
C) sayi NUMBER(5,0) := 12345.456;
D) sayi NUMBER(5) := 12345;
E) sayi NUMBER(5) := 12345.678;
Cevap : E) sayi NUMBER(5) := 12345.678;
Açıklama : `NUMBER(5)` veya `NUMBER(5,0)` tanımlamaları tamsayı saklar ve atanan ondalıklı değerleri en yakın tamsayıya yuvarlar. .5 ve üzeri yukarı, altı ise aşağı yuvarlanır. İlk dört şıktaki değerler 12345’e yuvarlanırken, E şıkkındaki 12345.678 değeri 12346’ya yuvarlanır ve bu nedenle diğerlerinden farklı olur.
12. PL/SQL paketlerle ilgili aşağıda verilenlerden hangisi doğrudur?
A) Paket gövdesinde aşırı yüklenen alt programlar paket başlığında bir kere bildirilmelidir.
B) Paket başlığı ve gövdesi aynı anda tanımlanmalıdır.
C) Paket başlığında alt program bildirilmemişse dahi paket gövdesi tanımlanmalıdır.
D) Paket başlığında bildirilmeyen alt programlar paket gövdesinde tanımlanamaz.
E) Paket gövdesinde alt programlar haricinde anonim bloklar yer alabilir.
Cevap : E) Paket gövdesinde alt programlar haricinde anonim bloklar yer alabilir.
Açıklama : Bir paket gövdesi, prosedürler ve fonksiyonlar gibi alt programların yanı sıra, paket ilk çağrıldığında bir defaya mahsus çalıştırılacak olan bir başlatma (initialization) bloğu içerebilir. Bu blok, adsız (anonim) bir `BEGIN…END;` bloğudur.
13. Aşağıdaki literallerden hangisi geçersizdir?
A) dil NVARCHAR2 (50) := ‘=PL/SQL’;
B) pi NUMBER := 3,14;
C) g BINARY_DOUBLE := 9.8d;
D) adet BINARY_FLOAT := 1.53f;
E) sayi NUMBER := 3.28E-2;
Cevap : B) pi NUMBER := 3,14;
Açıklama : PL/SQL’de ve genel olarak SQL’de ondalık ayırıcı olarak virgül (,) değil, nokta (.) kullanılır. Bu nedenle `3,14` ifadesi geçersiz bir sayısal literaldir.
14. İki veya daha fazla karakter dizesini birleştirmek için kullanılan operatör aşağıdakilerden hangisidir?
A) &
B) ||
C) .
D) &&
E) +
Cevap : B) ||
Açıklama : PL/SQL’de metin (karakter dizesi) birleştirme işlemi için boru (pipe) karakterlerinden oluşan `||` operatörü kullanılır.
15. departments tablosunun department_name kolonundaki değişiklikten önce çalışacak olan trg_upd_dept_name isimli satır seviyesi bir trigger tanımlamak için aşağıdaki şıklardan hangisi doğru bir sözdizimine sahiptir?
A)
CREATE OR REPLACE TRIGGER
trg_upd_dept_name
BEFORE UPDATE OF department_name ON
departments
FOR EACH ROW
BEGIN
NULL;
END;
B)
CREATE OR REPLACE TRIGGER
trg_upd_dept_name
BEFORE UPDATE OF department_name ON
departments
BEGIN
NULL;
END;
C)
CREATE OR REPLACE TRIGGER
trg_upd_dept_name
BEFORE UPDATE OF departments ON
department_name
FOR EACH ROW
BEGIN
NULL;
END;
D)
CREATE TRIGGER trg_upd_dept_name
BEFORE UPDATE ON departments
BEGIN
NULL;
END;
E)
CREATE OR REPLACE TRIGGER
trg_upd_dept_name
BEFORE UPDATE ON
departments
FOR EACH ROW
BEGIN
NULL;
END;
Cevap : A)
Açıklama : Soruda istenen tüm şartları sağlayan doğru sözdizimi A şıkkındadır. Tetikleyicinin sadece `department_name` kolonu güncellendiğinde çalışması için `UPDATE OF department_name` ifadesi, `departments` tablosu üzerinde çalıştığını belirtmek için `ON departments` ifadesi ve her bir satırdaki değişiklik için çalışmasını sağlamak (satır seviyesi) için `FOR EACH ROW` ifadesi gereklidir.
16. PL/SQL’de bir Record değişkeninin veri alanlarına erişmek için kullanılan operatör aşağıdakilerden hangisidir?
A) .
B) ->
C) =>
D) :=
E) new
Cevap : A) .
Açıklama : Bir Kayıt (Record) tipindeki değişkenin içindeki alanlara (field) erişmek için değişken adı ile alan adı arasına nokta `.` operatörü konulur (örneğin: `calisan_kaydi.adi`).
17.
BEGIN
CASE
WHEN NULL OR NULL THEN DBMS_OUTPUT.PUT_LINE('?');
WHEN FALSE AND NULL THEN DBMS_OUTPUT.PUT_LINE('!');
WHEN TRUE OR NULL THEN DBMS_OUTPUT.PUT_LINE(']');
WHEN 5 BETWEEN 1 AND 6 THEN DBMS_OUTPUT.PUT_LINE('{');
ELSE
DBMS_OUTPUT.PUT_LINE('`');
END CASE;
END;
Yukarıda verilen PL/SQL programının çıktısı aşağıdaki hangi şıkta doğru verilmiştir?
A) {
B) ?
C) [
D) ]
E) }
Cevap : D) ]
Açıklama : PL/SQL’de `CASE` ifadesi, `TRUE` olarak değerlendirilen ilk `WHEN` koşulunu çalıştırır ve sonlanır. `NULL` ile yapılan mantıksal işlemlerin sonucu `NULL`’dur (bilinmiyor). `TRUE OR NULL` işleminin sonucu ise `TRUE`’dur. Bu nedenle program üçüncü `WHEN` koşuluna girer ve ekrana `]` karakterini basar.
18.
DECLARE
TYPE type_bolum IS RECORD (
adi VARCHAR2(50),
egitim_turu VARCHAR2(20),
egitim_duzeyi VARCHAR2(10)
);
bolum_rec type_bolum;
BEGIN
...
END;
Yukarıda verilen PL/SQL kodunda, “…” ile belirtilen boşlukta Record veri yapısına yapılacak değer ataması aşağıdaki seçeneklerden hangisinde doğru şekilde verilmiştir?
A) bolum_rec.adi := ‘Bilgisayar Programcılığı’; bolum_rec.egitim_turu := ‘Açıköğretim’; bolum_rec.egitim_duzeyi := ‘Önlisans’;
B) type_bolum := (‘Bilgisayar Programcılığı’, ‘Açıköğretim’, ‘Önlisans’);
C) type_bolum.adi := ‘Bilgisayar Programcılığı’; type_bolum.egitim_turu := ‘Açıköğretim’; type_bolum.duzeyi := ‘Önlisans’;
D) bolum_rec = (‘Bilgisayar Programcılığı’, ‘Açıköğretim’, ‘Önlisans’);
E) bolum_rec(‘adi := ‘Bilgisayar Programcılığı’, egitim_turu := ‘Açıköğretim’, egitim_duzeyi := ‘Önlisans’);
Cevap : A) bolum_rec.adi := ‘Bilgisayar Programcılığı’; bolum_rec.egitim_turu := ‘Açıköğretim’; bolum_rec.egitim_duzeyi := ‘Önlisans’;
Açıklama : Bir kayıt (record) değişkeninin alanlarına değer atamanın en standart yolu, her bir alana nokta `.` operatörü ile ayrı ayrı erişerek atama `:=` operatörünü kullanmaktır. A şıkkı bu doğru yöntemi göstermektedir.
19. PL/SQL’de Trigger ve Procedure yapılarıyla ilgili aşağıda verilen ifadelerden hangisi yanlıştır?
A) Trigger pasif yapılabilir; Procedure ise pasif yapılamaz.
B) Trigger sunucu tarafından otomatik çalıştırılır; Procedure ise kullanıcı çağırdığı zaman çalıştırılır.
C) Trigger yapısı özü itibariyle bir prosedürdür.
D) Trigger ve Procedure yapılarının her ikisi parametre alabilir.
E) Trigger paket başlığında bildirilemez ve paket gövdesinde tanımlanamaz; Procedure ise paket başlığında bildirilebilir ve paket gövdesinde tanımlanabilir.
Cevap : D) Trigger ve Procedure yapılarının her ikisi parametre alabilir.
Açıklama : Prosedürler (Procedure) dışarıdan parametre alabilirler. Ancak tetikleyiciler (Trigger), bir DML olayına (INSERT, UPDATE, DELETE) bağlı olarak otomatik çalıştıkları için doğrudan parametre alamazlar. Değişen satırın eski ve yeni değerlerine `:NEW` ve `:OLD` bağlama değişkenleri ile erişirler.
20. Aşağıdaki şıkların hangisinde sırasıyla tam sayı ve ondalıklı sayı veri tiplerinde parametre alan ve PLS_INTEGER veri tipinde değer döndüren PL/SQL fonksiyon örneği verilmiştir?
A)
CREATE OR REPLACE FUNCTION ornek
(b FLOAT, a INTEGER)
RETURN PLS_INTEGER
IS
BEGIN
RETURN a + b*b;
END;
B)
CREATE OR REPLACE FUNCTION ornek
(b BINARY_FLOAT, a INTEGER)
RETURN PLS_INTEGER
IS
BEGIN
RETURN a + b*b;
END;
C)
CREATE OR REPLACE FUNCTION ornek
(a BINARY_DOUBLE, b PLS_INTEGER)
RETURN PLS_INTEGER
IS
BEGIN
RETURN a + b*b;
END;
D)
CREATE OR REPLACE FUNCTION ornek
(a SMALLINT, b FLOAT)
RETURN PLS_INTEGER
IS
BEGIN
RETURN a + b*b;
END;
E)
CREATE OR REPLACE FUNCTION ornek
(a PLS_INTEGER, b INTEGER)
RETURN BINARY_DOUBLE
IS
BEGIN
RETURN a + b*b;
END;
Cevap :
D)
CREATE OR REPLACE FUNCTION ornek
(a SMALLINT, b FLOAT)
RETURN PLS_INTEGER
IS
BEGIN
RETURN a + b*b;
END;
Açıklama : Soruda fonksiyonun sırasıyla bir “tam sayı” ve bir “ondalıklı sayı” parametresi alması ve `PLS_INTEGER` tipinde bir değer döndürmesi istenmektedir. D şıkkındaki `(a SMALLINT, b FLOAT)` ifadesi bu sıralamaya uymaktadır (`SMALLINT` bir tam sayı, `FLOAT` ise ondalıklı bir sayıdır). Ayrıca fonksiyon `RETURN PLS_INTEGER` ifadesi ile istenen değeri döndürmektedir. Diğer şıklarda ya parametrelerin sırası yanlıştır ya da fonksiyonun döndürdüğü veri tipi yanlıştır.
|