PostgreSQL için Azure Veritabanı'nda işlev oluşturma ve kullanma

Tamamlandı

PostgreSQL'in farklı dilleri desteklediğini zaten öğrendik. İşlevler dört farklı türe kategorilere ayırılabilir:

  • SQL'de yazılan işlevler.
  • PL.pgSQL gibi desteklenen bir yordam diliyle yazılmış yordamsal dil işlevleri.
  • İç işlevler.
  • C dili işlevleri.

Buna ek olarak, işlevin amacı geçici, sabit veya kararlı olarak da sınıflandırılabilir.

Geçici (varsayılan) bir işlev veritabanını değiştirebilir ve her seferinde aynı giriş parametreleriyle aynı sonucu döndürmeyebilir. Bu nedenle, bu işlev her çağrıldığında yeniden değerlendirilmelidir.

Kararlı bir işlev veritabanını değiştiremez ve aynı bağımsız değişkenler geçirilirse ve aynı deyim içinde çalıştırılırsa aynı sonucu döndürür. Bu işlev birden çok kez çağrılırsa, sorgu iyileştiricisi son çağrıldığında elde edilen sonuçları kullanabilir.

Sabit bir işlev veritabanını değiştiremez ve çağıran sorgudan bağımsız olarak aynı bağımsız değişkenler geçirilirse aynı sonuçları döndürür.

Bir işlevin volatilitesi, sorgu iyileştiricisinin bunu işlediği verimlilikte büyük fark yaratır.

İşlev oluşturma

İşlev tek bir değer döndürür ve SELECT deyimi içinde kullanılabilir.

İşlev oluşturmak için söz dizimi şöyledir:

CREATE [OR REPLACE] FUNCTION
myfunction ([inputparam] type {default})
RETURNS returntype AS
$$
SQL body
$$
LANGUAGE 'language_name';
CREATE FUNCTION

Saklı yordamlarda olduğu gibi, dizeyi başlatmak ve sonlandırmak için $$ simgesi kullanılır.

İşlevler aşağıdaki parametreleri alır:

  • name - isteğe bağlı olarak şema adını ekleyin.
  • argmode - bağımsız değişkenin modu. IN, OUT, INOUT veya VARIADIC olabilir. Varsayılan değer IN'dir. VARDIAC, aynı türde tanımlanmamış sayıda giriş parametresidir ve bunun ardından ÇIKIŞ parametreleri gelir. OUT ve INOUT bağımsız değişkenleri, RETURNS TABLE ifadesiyle birlikte kullanılamaz.
  • argname - bağımsız değişken adı.
  • argtype - bağımsız değişken veri türü. Temel, bileşik veya etki alanı türleri olabilir ya da tablo sütun türüne başvurabilir. Sütun türü table_name.column_name%TYPEolarak yazılır. Bu veri türü, bir işlevin tablo tanımı değişikliklerinden bağımsız olmasına yardımcı olabilir.
  • t_expr - Parametre belirtilmezse varsayılan değer (aynı türde). Yalnızca IN ve INOUT parametreleri varsayılan değere sahiptir. Varsayılan değere sahip bir parametreyi izleyen giriş parametreleri de varsayılan değerlere sahip olmalıdır.
  • rettype - Temel, bileşik veya alan türü olabilen ya da tablo sütun türüne başvurabilen dönüş veri türü. İşlev bir değer döndürmezse dönüş türünü void olarak belirtin. OUT veya INOUT parametreleri olduğunda, RETURNS yan tümcesi atlanabilir. Varsa, çıkış parametrelerinin kapsadığı sonuç türünü kabul etmelidir: Birden çok çıkış parametresi varsa RECORD veya tek çıkış parametresiyle aynı tür. SETOF değiştiricisi, işlevin tek bir öğe yerine bir öğe kümesi döndürdüğünü gösterir. Sütun türüne table_name yazarak başvurulabilir.
  • column_name - RETURNS TABLE söz dizimindeki bir çıkış sütununun adı. Bu parametre adlandırılmış bir OUT parametresi bildirir, ancak RETURNS TABLE ayrıca RETURNS SETOF'u da ima eder.
  • column_type - RETURNS TABLE söz dizimindeki bir çıkış sütununun veri türü.
  • lang_name - yordamı yazmak için kullanılan dil. sql_body belirtilirse varsayılan değer sql'dir. sql, c, internal veya kullanıcı tanımlı yordam dilinin adı (örneğin, plpgsql) olabilir.

sorgu iyileştiricisine işlev hakkında ipucu olarak IMMUTABLE, STABLE veya VOLATILE anahtar sözcüklerini kullanın. VOLATILE varsayılan değerdir.

İşlev çağırma

İşlev, sorguya ilgili parametreler geçirilerek sorguda kullanılabilir. Örneğin:

SELECT myfunction(3), CatID, CatName
    FROM myCats

Yerleşik işlevler

PostgreSQL, sorgularınızda kullanabileceğiniz birçok yerleşik işlev içerir. Bunlar karşılaştırmalar yapmayı, verileri toplamayı, matematiksel işlevleri vb. kapsar. PostgreSQL işlevlerinin tam listesi için çevrimiçi belgelere bakın.

Yerleşik dize işlevinin bir örneği alt dizedir.

substring (*string* text [ FROM *start* integer ] [ FOR *count* integer ] ) → text

Bu işlev üç giriş parametresi alır:

  • Dize (metin türü)
  • FROM başlangıç (tamsayı türü)
  • FOR sayısı (tamsayı türü)

Alt dize, giriş metninin başlangıç karakterinden başlayıp karakter sayıldıktan sonra durdurulan bir bölümünü döndürür. Örneğin:

substring('Thomas' from 2 for 3) → hom
substring('Thomas' from 3) → omas
substring('Thomas' for 2) → Th

Bu işlev substr ile aynıdır:

substr ( *string* text, *start* integer [, *count* integer ] ) → text
substr('alphabet', 3) → phabet
substr('alphabet', 3, 2) → ph

Uyarı

İşlevleri biliyorsanız, ilk sürümde bağımsız değişkenleri ayırmak için virgül yerine anahtar sözcüklerin kullanıldığı fark etmiş olursunuz. PostgreSQL bu işlevlerin her iki sürümünü de sağlar.