6.3 Öteki nesneler

<< İçindekileri Görüntülemek İçin Tıklayın >>

Yer:  Teknik Kılavuzlar > IVEDI SQL Kullanıcı Kılavuzu > 6. Veri tanımlama (DDL) >

6.3 Öteki nesneler

6.3.1 CREATE DOMAIN

CREATE DOMAIN [şema.]ad [AS] <tip>
  [CHARACTER SET <cs>] [COLLATE <coll>]
  [DEFAULT <ifade> | = <ifade>]
  [[CONSTRAINT <ad>] NOT NULL] [[CONSTRAINT <ad>] CHECK ( <ifade> )]
  [ATTRIBUTES ( ad = <sabit> [, …] )]

CHECK içinde değeri temsil eden sözde sütun VALUE'dur. NOT NULL ve CHECK herhangi bir sırada, her biri bir kez yazılır.

<tip> önceden tanımlı bir tip ya da bir sıralı (enum) tip olmalıdır (SQL:2011 4.15) — başka bir alan (domain), bir tablo veya bir kullanıcı tipi olamaz; yanlış türde bir ad, türünü söyleyen bir derleme hatası alır.

Not

Alan (domain) tanımındaki NOT NULL ve CHECK, o alanla tiplenen tablo sütunlarında ve PSQL değişkenlerinde uygulanır. EXECUTION STORAGE kipindeki bir veritabanında satır kurallarını depo çalıştırır (bkz. CREATE DATABASE, çalışma kipi).

6.3.2 CREATE TYPE ve CREATE PACKAGE

CREATE TYPE [şema.]ad
  [DYNAMIC] [[NOT] FINAL] [[NOT] INSTANTIABLE] [INHERIT FROM <tip>]
  [AS <gövde> END]

CREATE [OR ALTER | OR REPLACE] PACKAGE [şema.]ad [INHERIT FROM <paket>] AS <gövde> END
ALTER PACKAGE [şema.]ad [INHERIT FROM <paket>] AS <gövde> END
ALTER PACKAGE [şema.]ad RENAME TO <yeni ad>

Paketin başlığı ve gövdesi tek deyim olduğu için ALTER PACKAGE … AS ve var olan adla CREATE OR ALTER PACKAGE paketi yeniden tanımlar: paketin ve aynı adlı (aynı parametre sayılı) üyelerin kimliği, hakları ve öznitelikleri korunur, yeni tanımda olmayan üye düşer, yeni üye eklenir. Üyeye bağlı çağıranlar deyim anında yeniden derlenir. Derlenemeyen yeniden tanım eski paketi yerinde bırakır; ROLLBACK eski paketi ve bağımlılarını geri getirir (görünüm ve yordam yeniden tanımlarında da).

Gövde atlanırsa ileri bildirim olur. Gövde üyeleri: PRIVATE|PROTECTED|PUBLIC ve OVERRIDE, STATIC değiştiricileri; PRAGMA VISIBILITY {PRIVATE|PROTECTED|PUBLIC} ile varsayılan görünürlük; iç içe TYPE, ENUM, OPERATOR, EXCEPTION, DIRECTORY; [AGGREGATE] FUNCTION ve PROCEDURE; CONST <ad> <tip> = <ifade>; üye değişkenler; ve tip adıyla aynı adı taşıyan kurucular. Paket üyeleri statiktir. INHERIT FROM ile alt tip, taban tipin özniteliklerini ve metodlarını alır (öznitelikler alt tipin örneğinde aynı sırada yer alır; alt tipin metodu miras alınan özniteliği okur/yazar); gövdesiz bildirilen metod soyuttur — bütün soyut metodları OVERRIDE eden alt tip kurulabilir, etmeyen tip ve soyut metodlu taban tip kurulamaz.

6.3.3 CREATE FUNCTION / PROCEDURE / SQLMACRO

CREATE [OR ALTER | OR REPLACE] {FUNCTION | PROCEDURE | AGGREGATE FUNCTION | SQLMACRO} [şema.]ad
  [ ( [SKIP NULLS | ALLOW NULLS] [ALLOW USING]
      [IN|OUT|INOUT] <ad>[, <ad2>] <tip> [DEFAULT <ifade> | = <ifade>]
                                        [BY {VALUE|REFERENCE|DESCRIPTOR}]
                                        [ATTRIBUTES ( ad = <sabit> [, …] )]
      [, …]
      [PARAMS <ad> ARRAY OF <tip>] ) ]
  [RETURNS <tip> | RETURNS SAME AS PARAMETER <n>]        -- fonksiyon
  [RETURNS ( <sütun> <tip> [, …] )]                      -- sonuç kümesi döndüren yordam
  [ATTRIBUTES ( ad = <sabit> [, …] )]                     -- yordam/işlev öznitelikleri
  [SQL SECURITY {DEFINER | INVOKER}]
  [SET SEARCH_PATH {= | TO} <şema> [, …]]
AS
  <bildirimler>
BEGIN
  <gövde>
END

Bir parametreye varsayılan verildiyse ondan sonraki bütün parametrelerin de varsayılanı olmalıdır. PARAMS değişken sayıda argüman içindir ve tipi bir ARRAY olmalıdır. RETURNS ( … ) biçimi SUSPEND kullanımını açar. SKIP NULLS yalnız yordamda, ALLOW NULLS yalnız işlevde yazılır.

6.3.4 CREATE METACOMMAND ve \ komutları

CREATE [OR ALTER] METACOMMAND [şema.]ad [ ( <param> <tip> [= <öndeğer>] [, …] ) ]
  [RETURNS string]
  [ATTRIBUTES ( ad = <sabit> [, …] )]
  [DESCRIPTION '<açıklama>']
  [CLIENT]
AS
BEGIN
  … RETURN '<sql metni>';
END

\ad [arg …]                       -- satır başında çağrı
ALTER METACOMMAND ad … AS … END       -- yeniden tanım (kimlik korunur)
DROP METACOMMAND ad

Meta-komut bir SQLMACRO'dur: gövdesi PSQL'dir ve RETURN ettiği metin çağrının yerinde SQL olarak çalışır (bir SELECT sonuç kümesi olarak gelir, bir DDL yürütülür, birden çok deyim yazılabilir). RETURNS yazılmazsa string'dir. Çağrı satır başında \ad ile yapılır (psql'in \d'si gibi): argümanlar boşlukla ayrılır, '…' ya da "…" içindeki argüman boşluk taşır (aynı tırnak ikilenerek kaçılır), sayısal ve boolean parametreye tırnaksız yazılan sayı / true / false olduğu gibi geçer, öbür argümanlar dizgidir; eksik argüman parametrenin öndeğerini alır, fazlası hata. Sondaki ; ve -- yorumu argümana girmez. Meta-komut yalnız \ad ile çağrılır; ad(…) yazımı onu açmaz (bir tablo ya da kolon dt, c, l adını taşıyabilir). Meta-komutlar ifade içinde ad çözümüne girmez: select x d … order by d yazımındaki d takma adı \d komutundan etkilenmez.

CLIENT ile bildirilen komut gövdesizdir: onu istemci programı (msql, yönetim arayüzünün SQL sayfası) ele alır, motor \ad çağrısını "CLIENT meta command" hatasıyla reddeder. Katalogda durmasının nedeni \help listesinin tek yerden gelmesidir. Katalog türü METACOMMAND'dır (ivd$type); DROP METACOMMAND yalnız meta-komutları görür, DROP FUNCTION onları da düşürebilir; aynı adla ikinci bir meta-komut ya da SQLMACRO (aşırı yükleme) reddedilir, CREATE OR ALTER aynı imzayla yeniden tanımlar. Kullanıcı kendi şemasında ekler; arama yolu ile çözülür; seviye paketiyle taşınır.

Yerleşikler (SYS, start33metacommands.sql): \help [ad parçası] ( kayıtlı komutlar: şema, ad, parametreler, açıklama), \d [tablo|görünüm] (adsız: kullanıcı tablo ve görünümleri; adlı: kolonları), \dt / \dv / \df / \dp [ad parçası] (tablolar, görünümler, işlevler, yordamlar), \dn (şemalar), \l (MASTER'daki kayıtlı veritabanları). İstemci komutları (CLIENT): \timing, \x, \o, \i, \c, \e, \q, \f, \h. /ivedi oturumunun metaCommands isteği aynı listeyi istemciye verir (ad, şema, açıklama, CLIENT bayrağı, parametreler). Sınama modülü: sqltest/pcm/test04-metacommand.sql.

6.3.5 CREATE TRIGGER

CREATE [OR ALTER | OR REPLACE] TRIGGER [şema.]ad
  { FOR <ilişki> [ACTIVE|INACTIVE] | [ACTIVE|INACTIVE] ON <ilişki> }
  { INSTEAD OF <olaylar> | {BEFORE|AFTER} [OR {BEFORE|AFTER}] <olaylar> }
  [POSITION <n>]
  [FOR EACH {ROW | STATEMENT}]
  [REFERENCING {OLD|NEW|PARENT} AS <takma ad> …]
AS … END

<olaylar>: INSERT, UPDATE, DELETE — en az biri zorunlu, OR ile herhangi bir birleşimi ve sırası serbest.

Veritabanı olayı biçimi:

CREATE TRIGGER ad [ACTIVE|INACTIVE]
  ON {CONNECT | DISCONNECT | TRANSACTION {START|COMMIT|ROLLBACK}}
  [POSITION <n>]
AS … END

6.3.6 CREATE COLLATION

CREATE COLLATION [şema.]ad
  FOR <karakter kümesi>
  [FROM <taban harmanlama>]
  [NO PAD | PAD SPACE]
  [CASE SENSITIVE | CASE INSENSITIVE]
  [ACCENT SENSITIVE | ACCENT INSENSITIVE]
  ['<öznitelikler>']

Bir harmanlama katalog nesnesidir: COLLATE <ad> yazan her kolon, karşılaştırma ve ORDER BY onu kullanır. Öndeğerler standardınkidir: NO PAD, CASE SENSITIVE, ACCENT SENSITIVE. Öznitelik dizgesi Firebird'ün yazımıdır ve içinden LOCALE=<yerel ayar> okunur — sıralama o yerel ayarın ICU kuralıyla yapılır.

create collation tr_ci for utf8 from unicode case insensitive 'LOCALE=tr';
create table m (ad varchar(50) collate tr_ci);
select * from m where ad = 'iğne';   --> 'IĞNE' de eşleşir, 'IGNE' eşleşmez

ALTER COLLATION yalnız RENAME TO ve SET ATTRIBUTES alır; tanımın kendisi değiştirilemez — değiştirmek DROP + CREATE demektir. COMMENT ON COLLATION yazılabilir.

Depoda da kurulur

Harmanlama depolama motoruna da iner. Firebird standardın yazımını anlar (CREATE COLLATION "AD" FOR UTF8 FROM UNICODE ... 'LOCALE=tr'). PostgreSQL ve ODBC seçenek listesi ister: duyarlılık ICU'nun BCP‑47 anahtarlarına çevrilir (ks güç, kc büyük/küçük düzeyi, ka-shifted = PAD SPACE) ve aynı değeri farklı iki dizgeye veren harmanlama deterministic = false yazılır:

CREATE COLLATION "TR_CI" (provider = icu, locale = 'tr-u-ks-level2', deterministic = false)

sqlite, bellek motoru ve EMR harmanlamayı depoda kurmaz; orada sıralamayı motor yapar, yani sonuç aynıdır, yalnızca ORDER BY depoya itilmez.

Harmanlama domainden de gelir

Harmanlama kolona doğrudan yazılabildiği gibi domainin tanımında da durabilir; o domainle tiplenen her kolon onu devralır ve kolonda ayrıca COLLATE yazılmaz:

create collation tr_ci for utf8 from unicode case insensitive 'LOCALE=tr';
create domain ftAD_CI as varchar(50) collate tr_ci;
create table m (ad ftAD_CI);   --> ad kolonu tr_ci ile sıralanır

Yan tümcenin yeri lehçeye göre değişir ve motor bunu kendisi ayarlar: PostgreSQL onu tipin hemen ardında ister, Firebird ise DEFAULT / NOT NULL / CHECK'ten sonra, en sonda.

Tanınmayan ad

COLLATE <ad> hiçbir harmanlamaya çözülmezse deyim kabul edilir, yan tümce düşer ve öndeğer harmanlama kullanılır; ama bir uyarı yazılır. En sık sebebi CREATE COLLATION'ın bir #MODE PRECOMPILE bloğunda olmasıdır: orada yazılan her şey ham metindir, motor onu derlemez, dolayısıyla katalogda öyle bir harmanlama oluşmaz. Harmanlamanın motor tarafından bilinmesi için tanım IVEDI yazımıyla, PRECOMPILE dışında verilir; motor lehçe metnini zaten kendisi üretir.

6.3.7 CREATE SEQUENCE

CREATE SEQUENCE [şema.]ad
  [INCREMENT [BY] n] [START [WITH] n] [MINVALUE n] [MAXVALUE n]
  [CYCLE] [CACHE n]
  [NO {MINVALUE|MAXVALUE|CACHE|CYCLE}]
  [NOMINVALUE | NOMAXVALUE | NOCACHE | NOCYCLE]

Öznitelikler herhangi bir sırada, her biri bir kez yazılır. INCREMENT sıfır olamaz ve MINVALUE < MAXVALUE olmalıdır.

Not

ALTER SEQUENCE daha küçük bir kümeyi kabul eder: INCREMENT [BY], MINVALUE, MAXVALUE, RESTART [WITH], CACHE, CYCLE, NO {MINVALUE|MAXVALUE|CYCLE}. START ve NO CACHE burada kabul edilmez.

Değerler depodan

NEXT VALUE FOR, GEN_ID(dizi, n), kimlik kolonları ve motorun kendi nesne kimlik dizisi değeri depolama motorunun dizisinden alır: PostgreSQL nextval, Firebird GEN_ID, sqlite sqlite_sequence, bellek motoru atomik sayaç. Böylece OPEN DATABASE sonrası sayaçlar kaldıkları yerden sürer ve aynı depoya IVEDI dışından (psql, isql) erişen bir uygulama ile aynı dizi paylaşılır. Değer sözleşmesi: dönen değer ilerletme öncesi sıradaki değerdir, GEN_ID(dizi, 0) tüketmeden okur, INCREMENT BY yok sayılır (adım her zaman 1 / n), dizi işlem dışıdır (ROLLBACK geri sarmaz), ALTER SEQUENCE ... RESTART WITH depoya da yazılır. CACHE n (n > 1) PostgreSQL/ODBC/Firebird/sqlite'ta değerleri depodan n'lik bloklar halinde ayırır ve süreç içinde tüketir: bir tur yerine n değer; süreç bittiğinde bloğun kalanı boşluk olur (PostgreSQL'in kendi CACHE'i gibi), RESTART bloğu atar, GEN_ID(dizi, k) blok içinde k konum yürür. Bellek motoru blok kullanmaz. Katalog kimlik kolonları cache 100 ile bildirilmiştir. Depoda bulunmayan dizi (commit edilmemiş CREATE SEQUENCE, EMR/BlackHole) bellek sayacıyla çalışır. Metadata Operations=OFF ile kurulmuş bir veritabanında IVEDI'nin kurmadığı dizi PostgreSQL'de kimlik kolonunun kendi dizisinden (pg_get_serial_sequence) ya da aynı adlı diziden, Firebird'de rdb$generator_name'den bulunur; bulunamazsa bellek sayacı kalır.

6.3.8 CREATE INDEX

CREATE [UNIQUE] [ASCENDING|DESCENDING] INDEX ad
  ON <tablo> { ( <ifade> [ASC|DESC] [, …] ) | COMPUTED [BY] ( <ifade> ) }
  [WHERE <koşul>]
  [ATTRIBUTES ( ad = <sabit> [, …] )]

Anahtarlar tam birer ifadedir, yani işlevsel indeks yazılabilir; Firebird'ün COMPUTED [BY] (<ifade>) yazımı tek ifadeli anahtarın aynısıdır. USING <yöntem>, INCLUDE ve CONCURRENTLY yoktur. SQL standardında CREATE INDEX tanımlı değildir; yazım Firebird'ünkini izler.

Koşullu indeks (WHERE <koşul>, Firebird 5 / PostgreSQL / sqlite): indekse yalnız koşulu doğru olan satırlar girer, UNIQUE yalnız onlar arasında denetlenir — create unique index … on uye (eposta) where aktif yalnız etkin üyeler arasında tekillik ister. Koşul CHECK gibi yalnız tablonun kolonlarından ve deterministik ifadelerden kurulur. Depoya WHERE ile gider; bellek motorunda indeks, sorgunun WHERE'i indeksin koşulunu aynen içeriyorsa aramada kullanılır, içermiyorsa yalnız tekilliği korur. ADOPT PostgreSQL'in ifade ve koşullu indekslerini, Firebird ile sqlite'ın koşullu indekslerini depo yürütmeli (EXECUTION STORAGE) veritabanında NATIVE_SQL(...) ile kataloğa alır; IVEDI yürütmeli veritabanında onları atlayıp raporlar.

Not

CREATE INDEX'te ad nitelenmez — indeks tablosunun şemasında doğar. Sonradan ona başvuran deyimler ise <şema>.<ad> yazımını kabul eder (SQL:2011 11.40 modeli): DROP INDEX, ALTER INDEX, SET STATISTICS INDEX ve aynı şekilde DROP/ALTER TRIGGER. Nitelenmemiş ad yalnızca geçerli şemada aranır; üç parçalı şema.tablo.ad yazımı yoktur.

Not

İndeks ve kısıt adları şemada tekildir ve ikisi tek ad alanını paylaşır: aynı adı iki ayrı tabloda kullanmak, bir indekse bir kısıtın adını vermek ya da şemadaki bir tablo, görünüm veya dizinin adını vermek DUPLICATE_OBJECT (42710) hatasıdır. CREATE INDEX IF NOT EXISTS bu durumda hiçbir şey yapmaz. Depoda (sqlite, PostgreSQL, ODBC, Firebird) indeksin adı IVEDI'deki fiziksel adın kendisidir; yalnız Firebird'de 63 karakteri aşan ad kırpılıp nesne kimliğiyle tamamlanır.

6.3.9 CREATE VIEW

CREATE [OR ALTER | OR REPLACE] VIEW [şema.]ad [ ( sütun [ATTRIBUTES ( … )] [, …] ) ]
  [ATTRIBUTES ( ad = <sabit> [, …] )]
  AS {SELECT … | WITH …}
  [WITH [CASCADED | LOCAL] CHECK OPTION]

CREATE VIEW [şema.]ad ( sütun <tip> [, …] ) AS NATIVE_SQL( … )   -- gövdesi depo metni

Sütun takma adı sayısı sorgunun sonuç sayısına eşit olmalıdır. Görünüm düzeyi ATTRIBUTES AS'ten önce durur (bkz. ATTRIBUTES).

Güncellenebilir görünüm Firebird'ün kuralıyla belirlenir: FROM'da tek bir tablo ya da tek bir güncellenebilir görünüm vardır; join, DISTINCT, GROUP BY / HAVING, UNION, FIRST / SKIP ve toplama işlevi yoktur. WHERE serbesttir (alt sorgu, işlev çağrısı). Sütun listesi açıkça yazılabilir, SELECT * şart değildir. Görünüm üzerinden yapılan INSERT / UPDATE / DELETE taban tabloya yazar ve görünümün (görünüm üstüne görünümde her ikisinin) koşulunu uygular. İfade ya da sabit sütun (a + 1 AS c, 5 AS k) görünümü salt okunur yapmaz; yalnız o sütun salt okunurdur: ona yazmak "attempted update of read-only column" hatasıdır, DML'in koşulunda okunması serbesttir. Görünümün satır tetikleyicisi varsa DML yalnız tetikleyicileri çalıştırır ve her sütunu (ifade sütunu dahil) yazabilir. Katalogda güncellenemeyen görünüm ve salt okunur sütun IVD$TYPE_FLAGS'te 0x00400000 bitini taşır; sütunda IVD$OBJECT_COLUMNS.IVD$UPDATEABLE 'N''dir.

WITH CHECK OPTION yalnız güncellenebilir görünümde yazılabilir; başka görünümde sözdizimi hatasıdır. Görünüm üzerinden yapılan INSERT ya da UPDATE görünümün koşulu dışına düşen satırı CHECK_OPTION_VIOLATION (SQLSTATE 44000) ile reddeder; görünümde verilmeyen bir sütunun NULL kalması (UNKNOWN) da ihlaldir. CASCADED ve LOCAL sözcükleri kabul edilir ve aynı anlama gelir. Gövdesi NATIVE_SQL olan görünümde sütun listesi her sütunun tipini taşımak zorundadır ve WITH CHECK OPTION yazılamaz (bkz. NATIVE_SQL). WITH READ ONLY ve materyalize etme yoktur.

6.3.10 CREATE DATABASE

CREATE DATABASE {ad | '<veri dosyası>'}
  [LOCATION <v>]
  [STORAGE ENGINE <motor>] [PARAMETERS <v>]
  [USER <v>] [PASSWORD <v>]
  [PAGE_SIZE [=] <n>]
  [DEFAULT CHARACTER SET <cs>] [COLLATION <c>]
  [WITH ADMIN OPTION]
  [EXECUTION IVEDI | STORAGE]

Yan tümceler herhangi bir sırada yazılabilir: STORAGE ENGINE FIREBIRD EXECUTION IVEDI PARAMETERS '…' ile EXECUTION IVEDI STORAGE ENGINE FIREBIRD PARAMETERS '…' aynıdır. Aynı yan tümce iki kez yazılamaz. CREATE DATABASE yalnız olmayan depoyu yaratır.

OPEN DATABASE aynı yan tümceleri alır (EXECUTION dışında: var olan veritabanının kipi kartındadır), ayrıca UPGRADE ve CREATE CATALOG:

OPEN DATABASE ad [<CREATE DATABASE yan tümceleri>] [UPGRADE] [CREATE CATALOG]

CREATE CATALOG kataloğu olmayan var olan depoya katalog tablolarını kurar; aynı adlı sistem nesnelerini ezer; veritabanı kaydedilir ve ALTER DATABASE … UPGRADE bekler (bkz. DROP / CLOSE / OPEN DATABASE).

Depolama motoru adları: MEMORY, EMR, BLACKHOLE, ODBC, FIREBIRD, IOT, SQLITE, POSTGRESQL. Hangilerinin kullanılabilir olduğu derleme seçeneklerine bağlıdır — bkz. “Depolama motorları”.

Çalışma kipi (EXECUTION) veritabanının tetikleyicilerini ve tablo CHECK kısıtlarını kimin çalıştırdığını söyler:

KipAnlamıÖndeğer olduğu depolar
IVEDIVeritabanını motor kullanır ve yönetir; tetikleyiciler ve CHECK kısıtları motorda çalışır.MEMORY, SQLITE, EMR, BLACKHOLE, IOT (MASTER da)
STORAGEVeritabanını istemciler depoya doğrudan bağlanarak kullanır; motor yapıları deponun kendi dilinde kurar, satırın kurallarını çalıştırmaz — onları depo çalıştırır: tetikleyiciler, CHECK, NOT NULL, öndeğerler, kimlik (GENERATED … AS IDENTITY) ve üretilen kolonlar. Motorun yazdığı satırda verilmeyen kolon depoya gönderilmez; depo ürettiği değerleri (kimlik, öndeğer) RETURNING ile motora geri verir. FIREBIRD, POSTGRESQL, ODBC

Kip veritabanının kartında (ivd$database.ivd$execution) durur ve IVD$V_DATABASE.EXECUTION ile okunur; kartta değer yoksa deponun öndeğeri geçerlidir. OPEN DATABASE kipi karttan alır; değiştirmek için ALTER DATABASE <db> SET EXECUTION IVEDI | STORAGE kullanılır (değer COMMIT'te yazılır).

6.3.11 Kalanlar, kısaca

DeyimNotlar
CREATE SCHEMA [AUTHORIZATION <u>] ad AUTHORIZATION adın önüne veya arkasına yazılabilir ve şemanın sahibi olarak kaydedilir; çözülemeyen kullanıcı adı uyarı verir, sahip boş kalır. ALTER SCHEMA … AUTHORIZATION <u> sahibi değiştirir.
CREATE ENUM ad [AS] ( e1 [= n] [, …] ) Değerler 0'dan artar; = n sayacı yeniden kurar. Bir enum değeri çalışma zamanında tamsayıdır ve depoya da tamsayı yazılır; üye adı yalnızca tipte durur. Üst düzey bir deyimde üyeye adıyla ulaşmanın yolu CAST'tir — üye adı doğrudan yalnızca PSQL kapsamında çözülür:
SELECT CAST(sev AS VARCHAR(20)) FROM t;        -- 'WARNING' (üye adı)
SELECT CAST(sev AS INTEGER)     FROM t;        -- 2 (üyenin sırası)
SELECT * FROM t WHERE sev = CAST('Warning' AS sev);
INSERT INTO t (sev) VALUES (CAST(2 AS sev));
Metin ve sayıdan enum'a geçiş yalnızca açık CAST ile olur (atama ile değil); tanımsız bir ad CONVERT_ERROR verir. Ad karşılaştırması büyük/küçük harf duyarsızdır ve yerelden bağımsızdır. JSON yüzeylerinde (EXECSQL, /crud) enum kolonu üye adı olarak döner.
CREATE EXCEPTION ad '<mesaj>' [CODE <n>] [STATE '<sqlstate>'] Mesaj zorunlu. CODE (eş anlamlısı SQLCODE) ve STATE (SQLSTATE, tam 5 karakter) isteğe bağlıdır, sırası serbesttir; CODE 0 ayrılmıştır.
CREATE SYNONYM ad FOR <nesne.yolu> Hedef derleme anında çözülmez — kullanıldığı anda çözülür, yani sonradan yaratılan bir nesneye eşanlam yazılabilir. Hedef nitelenebilir: <şema>.<nesne> ve <veritabanı>.<şema>.<nesne> de geçerlidir; ad çözümü noktalı SQL adının kurallarını izler (iki parçalı adda şema kazanır). Eşanlamın hedefi başka bir eşanlam da olabilir.
CREATE DIRECTORY ad AS '<yol>' [FORCED] Yol mutlak olmalı ya da ${TEMP}, ${HOME}, ${APPDIR}, ${CONFIGDIR}, ${CWD}, ${LOGDIR}, ${DBDIR} ya da bir ortam değişkeni (${AD}) yer tutucusuyla başlamalı.
CREATE CREDENTIAL ad [TYPE {OS|DBLINK|EMAIL|HTTP|FTP|CUSTOM}] [SUB_TYPE '…'] [IDENTITY '…'] [PASSWORD '…'] [ACTIVE|INACTIVE] [TAGS ( ad = <sabit> [, …] )] Yan tümceler sırasız, her biri en çok bir kez; TAGS en sonda. Tür, alt tür, kimlik ve parola nesnenin öznitelikleri olarak kataloğa yazılır, parola kodlanmış saklanır. Kimlik bilgisi kendi başına bağlantı açmaz; onu kullanan yerleşik paket (örneğin WhatsApp istemcisi) çağırandan GRANT USAGE ON CREDENTIAL <ad> hakkını ister. ALTER CREDENTIAL: TYPE, SUB_TYPE, IDENTITY, PASSWORD, RENAME TO. Sınama modülü: sqltest/ddl/test10-credential.sql.
CREATE ROLE ad, CREATE USER ad [<yan tümce> …] ALTER USER de aynı yan tümce listesini alır (IDENTIFIED BY/EXTERNALLY, ACCOUNT LOCK/UNLOCK, VALID UNTIL, DEFAULT SEARCH_PATH, FOR LOGIN, PRIVILEGE CHECK) — bkz. “Yetkilendirme”.
CREATE OPERATOR [<dönüş tipi>] <op> ( … ) AS … END Arite operatörün kendisinden gelir; tek parametreli - tekli eksi olur.
CREATE DATABASE LINK ad {USER|PASSWORD|DRIVER {FIREBIRD|POSTGRESQL|ODBC} [PARAMETERS '…']}… DRIVER zorunlu.
DECLARE [EXTERNAL] FUNCTION ad <tip> [NULL] [, …] RETURNS {<tip> | PARAMETER n} ENTRY_POINT '…' MODULE_NAME '…' Parametreler adsız ve parantezsiz bir tip listesidir.