|
<< İçindekileri Görüntülemek İçin Tıklayın >> Yer: Teknik Kılavuzlar > IVEDI SQL Kullanıcı Kılavuzu > 8. Yordamsal dil (PSQL) > 8.4 Denetim akışı |
IF ( <mantıksal ifade> ) THEN <deyim> [ELSE <deyim>]Parantezler zorunludur. ELSIF ve END IF yoktur;
else if (…) then … zincirlenebilir, çünkü ELSE dalı da bir PSQL deyimidir.
ELSE'in önündeki noktalı virgül kuralı: THEN dalı end ile
bittiyse ELSE hemen ardından noktalı virgülsüz gelir; bitmediyse
araya bir ; girer.
WHILE ( <mantıksal ifade> ) DO <deyim>
FOR <tam sayı değişkeni> = <a> TO <b> [STEP <s>] DO <deyim>
FOR <tam sayı değişkeni> IN <a> .. <b> [STEP <s>] DO <deyim>
FOR SELECT … INTO <hedefler> DO <deyim>
FOR SELECT … AS CURSOR <ad> DO <deyim>
FOR EXECUTE STATEMENT <…> INTO <hedefler> DO <deyim>Parantezler ve DO zorunludur. IN biçiminde ayırıcı
..'dır. Negatif STEP geriye sayar. Döngü değişkeni önceden bildirilmiş,
salt okunur olmayan bir tam sayı olmalıdır.
AS CURSOR <ad> biçiminde satır alanlarına <ad>.<alan>
ile erişilir. FOR EXECUTE STATEMENT biçiminde INTO zorunludur.
Sorgu biçiminde parantez kullanılmaz: FOR SELECT … doğru,
FOR (SELECT …) ise adlı bir hata alır. Parantezli sorgu ifadesi bu lehçenin hiçbir
yerinde yoktur; komşu yazım olan imleç bildiriminde
(<ad> CURSOR FOR (SELECT …)) parantez zorunludur, ama ikisi ayrı
yapılardır.
Azalan döngünün yazımı negatif STEP'tir
(FOR n IN 3 .. 1 STEP -1 DO). Oracle'ın REVERSE yazımı bir anahtar
sözcük değildir ve tanınmaz; REVERSE bu lehçede yerleşik bir dizge
fonksiyonudur.
CASE WHEN <koşul> THEN <değer> … [ELSE <değer>] END -- aranan biçim
CASE <ifade> WHEN <değer> THEN <değer> … [ELSE <değer>] END -- basit biçimTHEN ve ELSE dalları CASE'in kendi bağlamının
tipiyle derlenir (SQL:2011 6.12: sonuç tipi dal ifadelerinden türer), koşullar ve basit biçimin
karşılaştırılanı ise kendi tipiyle. Pratik sonucu: bir ? parametresi bir dalda
hedefin tipini alır ve niteliksiz bir sıralı (enum) sabit dalda çözülür — ama yalnızca CASE'in
bir hedefi varsa (atama, INSERT değeri, tipi bilinen bir parametre). Bağlamsız bir
SELECT listesinde dallar tipsiz derlenir; o durumda enum sabiti nitelenir.
CASE yalnızca bir ifadedir; CASE deyimi ve
END CASE yoktur. Eşleşme yoksa ve ELSE yazılmadıysa sonuç NULL'dur.
<etiket> :
GOTO <etiket>;
BREAK [<etiket>]; LEAVE [<etiket>]; CONTINUE [<etiket>];LEAVE, BREAK'in eşanlamlısıdır. İleri ve geri atlamalar çalışır.
Etiketsiz BREAK/CONTINUE en içteki döngüyü hedefler; döngü dışında
yazılması derleme hatasıdır. Etiketli BREAK/CONTINUE için etiketin
bloğundaki son deyim olması ve etiketlediği deyimin bir FOR/WHILE
olması gerekir — yani etiket döngünün hemen önünde durur.
Etiket görünürlüğü sınırlıdır: derleyici etiketi en içteki bloğa ekler, ama
GOTO ve etiketli BREAK/CONTINUE etiketi yordamın en
dış gövdesinde arar. İç içe bir begin … end içindeki etiket bunlara
görünmez.
| Deyim | Koşul |
|---|---|
RETURN [<değer>] | Bir yordam/fonksiyon gövdesinde. Değer, dönüş alanına göre tip denetiminden geçer. |
EXIT | Gövdeyi terk eder. |
SUSPEND | Yalnızca RETURNS ( … ) bildiren yordam/blokta. |