LOLONOLO Ana Sayfa » blog » auzef » PL/SQL Veritabanı Programlama 2024-2025 Bütünleme Soruları
auzefBilgisayar ProgramcılığıPL/SQL Veritabanı Programlama

PL/SQL Veritabanı Programlama 2024-2025 Bütünleme Soruları

PL/SQL Veritabanı Programlama 2024-2025 Bütünleme Soruları

PL/SQL Veritabanı Programlama 2024-2025 Bütünleme Soruları (1-10)

1. PL/SQL alt program parametre modlarından hangisi, bir alt program parametre modundan hangisi, bir alt programın alt programa dışarıdan alındığını ve alt program içerisinde işlenebileceğini ifade eder?

A) IN OUT
B) OUT
C) IN
D) AS
E) OUT IN

Cevap : C) IN

Açıklama : IN parametre modu, bir alt programa (procedure veya function) dışarıdan bir değerin girdi olarak alınmasını sağlar. Bu parametre, alt program içinde sadece okunabilir, değeri değiştirilemez.

2. PL/SQL dilinde döngülerle ilgili aşağıda verilenlerden hangisi yanlıştır?

A) Döngüleri sonlandırmak için EXIT veya EXIT WHEN deyimleri kullanılır.
B) While döngüsünün çalışması için koşulun TRUE olması gerekir.
C) Döngü iterasyonu sayısını gereken durumlarda FOR döngüsünde REVERSE anahtar kelimesi kullanılır.
D) Döngü içinde mevcut iterasyonu atlayıp bir sonraki iterasyona geçmek için CONTINUE veya CONTINUE WHEN deyimleri kullanılır.
E) Her döngü en az bir kere çalışır.

Cevap : E) Her döngü en az bir kere çalışır.

Açıklama : Bu ifade yanlıştır. Örneğin, bir WHILE döngüsünün başlangıç koşulu FALSE ise, döngü hiç çalışmadan atlanır. Her döngünün en az bir kez çalışacağı garantisi yoktur.

3.

DECLARE
  ...
BEGIN
  FOR rec IN krsr_jobs(10000) LOOP
    DBMS_OUTPUT.PUT_LINE(rec.job_id || ' ' || rec.job_title);
  END LOOP;
END;

Yukarıdaki kodda “…” üç noktayla boş bırakılan yerde olması gereken kursör aşağıdaki şıklardan hangisinde verilmiştir?

A)

CURSOR job_id (p_min_salary NUMBER)
RETURN jobs%ROWTYPE Is
SELECT * FROM jobs
WHERE min_salary > p_min_salary;

B)

CURSOR krsr_jobs (p_min_salary NUMBER
)
RETURN jobs%ROWTYPE IS
SELECT min_salary FROM jobs
WHERE min_salary > p_min_salary;

C)

CURSOR rec (p_min_salary NUMBER)
RETURN krsr_jobs%ROWTYPE IS
SELECT * FROM jobs
WHERE min_salary > p_min_salary;

D)

CURSOR krsr_jobs (p_min_salary NUMBER
)
RETURN jobs%ROWTYPE IS
SELECT * FROM jobs
WHERE min_salary > p_min_salary;

E)

CURSOR rec (p_min_salary NUMBER)
RETURN jobs%ROWTYPE IS
SELECT * FROM jobs
WHERE min_salary > p_min_salary;

Cevap :

D)

CURSOR krsr_jobs (p_min_salary NUMBER
)
RETURN jobs%ROWTYPE IS
SELECT * FROM jobs
WHERE min_salary > p_min_salary;

 

Açıklama : Kodun `BEGIN` bloğunda `krsr_jobs(10000)` adıyla bir imleç (cursor) çağrılmaktadır. Bu nedenle imlecin adı `krsr_jobs` olmalıdır. Döngü içinde `rec.job_id` ve `rec.job_title` alanlarına erişildiği için, `SELECT` ifadesi bu sütunları içermelidir; `SELECT *` bu gereksinimi karşılar. Bu şartları sağlayan tek doğru tanım D şıkkındadır.

4. PL/SQL anonim blok mimarisinde kod bölümlerinin sıralaması hangi seçenekte doğru verilmiştir?

A) Uygulama – İstisna işleme – Deklarasyon
B) İstisna işleme – Deklarasyon – Uygulama
C) Deklarasyon – Uygulama – İstisna işleme
D) Deklarasyon – İstisna işleme – Uygulama
E) Uygulama – Deklarasyon – İstisna işleme

Cevap : C) Deklarasyon – Uygulama – İstisna işleme

Açıklama : Standart bir PL/SQL anonim bloğunun yapısı sırasıyla: isteğe bağlı `DECLARE` (Deklarasyon) bölümü, zorunlu `BEGIN` (Uygulama) bölümü ve isteğe bağlı `EXCEPTION` (İstisna İşleme) bölümünden oluşur. Doğru sıralama budur.

5. Aşağıdaki niteliklerden hangisi kürsörle ilişkili sorgudan etkilenen satır sayısını verir?

A) %ROWCOUNT
B) %SQLCOUNT
C) %FOUND
D) %COUNT
E) %NOTFOUND

Cevap : A) %ROWCOUNT

Açıklama : `%ROWCOUNT` imleç niteliği, bir `SELECT`, `INSERT`, `UPDATE` veya `DELETE` işlemi gerçekleştirildikten sonra o ana kadar etkilenen (getirilen, eklenen, güncellenen veya silinen) toplam satır sayısını tutan bir tamsayı değeri döndürür.

6. Aşağıdakilerden hangisi PLS_INTEGER alt veri tiplerinden biri değildir?

A) SIGNTYPE
B) SIMPLE_INTEGER
C) BINARY_FLOAT
D) POSITIVE
E) NATURAL

Cevap : C) BINARY_FLOAT

Açıklama : `SIGNTYPE`, `SIMPLE_INTEGER`, `POSITIVE`, `NATURAL` gibi veri tipleri, `PLS_INTEGER`’ın belirli aralık veya özelliklere sahip alt türleridir. `BINARY_FLOAT` ise `PLS_INTEGER` ailesinden olmayan, farklı bir sayısal veri tipidir.

7. PL/SQL’de veri tipine uyumsuz bir değer verilmesi durumunda oluşan istisna aşağıdakilerden hangisidir?

A) DUP_VAL_ON_INDEX
B) INVALID_VALUE
C) INVALID_NUMBER
D) INVALID_CURSOR
E) VALUE_ERROR

Cevap : E) VALUE_ERROR

Açıklama : Bir değişkene, tanımlandığı veri tipinin sınırlarını veya formatını aşan (örneğin `NUMBER(2)` tanımlı bir değişkene 100 atamak gibi) bir değer atanmaya çalışıldığında `VALUE_ERROR` istisnası oluşur.

8. Aşağıdaki şıklardan hangisinde değerlerin birer VARCHAR2 veri tipinde değer saklayabilen anahtarlarını (indekslerini) PLS_INTEGER veri tipi ile ilişkisel Dizi (Associative Array) doğru tanımlanmıştır?

A) TYPE t_assoc_arry IS VARRAY(10) OF VARCHAR2(100 BYTE);
B) TYPE t_assoc_arry IS TABLE OF VARCHAR2(100) INDEX BY PLS_INTEGER;
C) TYPE t_assoc_arry IS TABLE OF VARCHAR2(100);
D) TYPE t_assoc_arry IS TABLE OF VARCHAR2(100);
E) TYPE t_assoc_arry IS TABLE OF PLS_INTEGER INDEX BY VARCHAR2(100);

Cevap : B) TYPE t_assoc_arry IS TABLE OF VARCHAR2(100) INDEX BY PLS_INTEGER;

Açıklama : İlişkisel Dizi (Associative Array) tanımının sözdizimi `TABLE OF <değer_tipi> INDEX BY ` şeklindedir. B şıkkı, `VARCHAR2(100)` tipinde değerleri olan ve `PLS_INTEGER` tipinde bir anahtar (indeks) ile erişilen bir diziyi doğru bir şekilde tanımlamaktadır.

9. PL/SQL dilinde girdi/çıktı komutlarının yer aldığı paket aşağıdakilerden hangisidir?

A) DBMS
B) DBMS_INOUT
C) DBMS_OUTPUT
D) PUT_LINE
E) SERVEROUTPUT

Cevap : C) DBMS_OUTPUT

Açıklama : PL/SQL’de veritabanından ekrana çıktı basmak ve hata ayıklama mesajları göstermek için Oracle tarafından sağlanan standart paket `DBMS_OUTPUT` paketidir.

10. Aşikar kursörü kapatmak için aşağıdaki deyimlerden hangisi kullanılır?

A) RETURN
B) CLOSE
C) EXIT
D) FETCH
E) END

Cevap : B) CLOSE

Açıklama : Açık (aşikar) bir imleç (explicit cursor) ile işiniz bittiğinde, sistem kaynaklarını serbest bırakmak için `CLOSE imleç_adı;` komutu kullanılır.

@lolonolo_com

PL/SQL Veritabanı Programlama 2024-2025 Bütünleme Soruları (11-20)

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.

 

@lolonolo_com

Auzef Bilgisayar Programcılığı

Editor

Editör