Case ... When Yapısı etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Case ... When Yapısı etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

12 Mart 2018 Pazartesi

CASE ... WHEN Yapısı

Giriş
Çoğunlukla sütun verisi sorgulanıp dönüştürülür. CASE...END şeklindedir. Araya da WHEN THEN/ELSE ifadeleri gelir.

Örnek - Sadece WHEN
Şöyle yaparız
SELECT
  status,
  CASE
    WHEN STATUS IN('a1','a2','a3')
      THEN 'Active'
    WHEN STATUS = 'i'
      THEN 'Inactive'
    WHEN STATUS = 't'
      THEN 'Terminated'
  END AS STATUSTEXT
FROM
  STATUS
Örnek - WHEN + ELSE
Elimizde şöyle bir kod olsun
CREATE AND COMPILE JAVA SOURCE NAMED SORTSTRING AS
public class SortString {
  public static String sort( final String value )
  {
    final char[] chars = value.toCharArray();
    java.util.Arrays.sort( chars );
    return new String( chars );
  }
};
/
Sütun kullanmadan bu kodu çağırarak şöyle yaparız.
SELECT CASE
  WHEN SORTSTRING( 'ads' ) = SORTSTRING( 'das' )
    THEN 'Equal'
  ELSE 'Not Equal'
END
FROM   DUAL;
Örnek - WHEN + ELSE
Şöyle yaparız. Burad veri XML'e çevriliyor.
CREATE TABLE customer
(
  id         NUMBER,
  first_name VARCHAR2(100),
  last_name  VARCHAR2(100),
  birth_date DATE,
  gender     VARCHAR2(1)
);

CREATE TABLE customer_xml
(
created_date DATE,
row_num      NUMBER,
xml_data     VARCHAR2(4000)
);

INSERT INTO customer_xml (created_date, row_num, xml_data)
SELECT c.created_date, c.row_num,
  CASE
    WHEN c.row_num = 1 THEN
      '<?xml version="1.0" encoding="UTF-8"?><root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'
    ELSE
      ''
  END ||
    '<id>' || TO_CHAR(id) || '</id>' ||
    '<first_name>' || first_name || '</first_name>' ||
    '<last_name>' || last_name || '</last_name>' ||
    '<birth_date>' || TO_CHAR(birth_date, 'YYYY-MM-DD') || '</birth_date>' ||
    '<gender>' || gender || '</gender>' ||
  CASE
    WHEN c.row_num = rc.row_count THEN
      '</root>'
     ELSE
      ''
    END AS xml_data
FROM customer;