İŞLEM OLUŞTUR

Şunun için geçerlidir:evet olarak işaretlendi Databricks SQL Databricks Runtime 17.0 ve üzeri onay işareti evet yalnızca Unity Kataloğu olarak işaretlendi

Unity Kataloğu'nda bağımsız değişkenleri alan veya değiştiren, SQL deyimleri kümesini yürüten ve isteğe bağlı olarak bir sonuç kümesi döndüren bir yordam oluşturur.

Sözdizimi

CREATE [OR REPLACE] PROCEDURE [IF NOT EXISTS]
    procedure_name ( [ procedure_parameter [, ...] ] )
    [ characteristic [...] ]
    AS compound_statement

procedure_parameter
    [ IN | OUT | INOUT ] parameter_name data_type
    [ DEFAULT default_expression ] [ COMMENT parameter_comment ]

characteristic
  { LANGUAGE SQL |
    SQL SECURITY { INVOKER | DEFINER } |
    NOT DETERMINISTIC |
    COMMENT procedure_comment |
    DEFAULT COLLATION default_collation_name |
    MODIFIES SQL DATA }

Parametreler

  • VEYA DEĞİŞTİR

    Belirtilirse, aynı ada sahip bir yordam değiştirilir. Mevcut bir işlevi bir yordamla değiştiremezsiniz; Bunu yapmak ROUTINE_ALREADY_EXISTS yükseltir. ile bu parametreyi IF NOT EXISTSbelirtemezsiniz; her iki yükseltme de INVALID_SQL_SYNTAX belirtir. CREATE_ROUTINE_WITH_IF_NOT_EXISTS_AND_REPLACE.

  • EĞER MEVCUT DEĞİLSE

    Belirtilirse, yordamı yalnızca bu ada sahip bir yordam henüz mevcut olmadığında oluşturur. Aynı ada sahip bir yordam varsa, bildirim göz ardı edilir. ile bu parametreyi OR REPLACEbelirtemezsiniz; her iki yükseltme de INVALID_SQL_SYNTAX belirtir. CREATE_ROUTINE_WITH_IF_NOT_EXISTS_AND_REPLACE.

  • procedure_name

    İşlemin adı. İsteğe bağlı olarak yordam adını bir şema adıyla niteleyebilirsiniz. Ad uygun değilse, geçerli şemada kalıcı yordam oluşturulur.

    Yordam adı, şemadaki tüm yordamlar (yordamlar ve işlevler) için benzersiz olmalıdır. Aynı ada sahip bir yordam varsa ve belirtilmezse OR REPLACEIF NOT EXISTS, Azure Databricks ROUTINE_ALREADY_EXISTS oluşturur.

  • procedure_parameter

    Yordamın bir parametresini belirtir.

    • parameter_name

      Parametre adı yordam içinde benzersiz olmalıdır; aksi takdirde Azure Databricks DUPLICATE_ROUTINE_PARAMETER_NAMES yükseltir.

    • IN, INOUT veya OUT

      İsteğe bağlı olarak parametresinin modunu açıklar.

      • İÇİN

        Yalnızca giriş parametresini tanımlar. Varsayılan değer budur.

      • INOUT

        Bir giriş-çıkış bağımsız değişkenini kabul eden bir parametre tanımlar. Yordam işlenmeyen bir hata olmadan tamamlanırsa, son parametre değerini çıkış olarak döndürür.

      • DIŞARIYA

        Bir çıkış parametresi tanımlar. Parametre, NULL olarak başlatılır ve eğer yordam işlenmeyen bir hatayla tamamlanmazsa, son parametre değeri çıktı olarak döndürülür.

    • veri_türü

      Desteklenen herhangi bir veri türü.

    • DEFAULT default_expression

      bir işlev çağrısı parametreye bağımsız değişken atamadığında kullanılacak isteğe bağlı varsayılan değerdir. default_expression, 'ye dönüştürülebilir olmalıdır. İfade başka bir parametreye başvurmamalı veya bir alt sorgu içermemelidir.

      Bir parametre için varsayılan değer belirttiğinizde, aşağıdaki tüm parametrelerin de varsayılanı olmalıdır.

      DEFAULTveya parametreleri için OUT desteklenmez; birinin belirtilmesi INOUT yükseltir.

    • YORUM

      Parametresinin isteğe bağlı açıklaması. comment sabit STRING olmalıdır.

  • bileşik_ifade

    SQL Yordamının tanımına sahip bir SQL bileşik deyimi (BEGIN ... END).

    Yordam oluşturulduğunda, sözdizimsel doğruluk doğrulanır. Yordam çağrılana kadar yordam gövdesi anlamsal geçerlilik için doğrulanmaz.

  • özellik

    SQL SECURITY INVOKER veya SQL SECURITY DEFINERLANGUAGE SQL velerinden biri gereklidir. Diğerleri isteğe bağlıdır. Herhangi bir sırada istediğiniz sayıda özellik belirtebilirsiniz, ancak her cümleyi yalnızca bir kez belirtebilirsiniz.

    • LANGUAGE SQL

      İşlev uygulamasının dili.

    • SQL GÜVENLIK ÇAĞıRıCıSı

      Prosedür gövdesindeki tüm SQL ifadelerinin, prosedürü çağıran kullanıcının yetkisi altında yürütüleceğini belirtir.

      yordamın gövdesindeki ilişkileri ve yordamları çözümlerken, Azure Databricks çağrı sırasında geçerli kataloğu ve geçerli şemayı kullanır.

      Yetkili kullanıcının ve oturum kullanıcısının yordam gövdeleri içinde ve iç içe çağrılarda nasıl davrandığını öğrenmek için bkz. Yetkili kullanıcı ve oturum kullanıcısı.

    • SQL SECURITY DEFINER

      Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL

      Yordamın gövdesindeki tüm SQL deyimlerinin, hangi kullanıcının yordamı çağırdığına bakılmaksızın, her zaman yordamın sahibinin (tanımlayıcı) yetkisi altında yürütüldüğünü belirtir. Başka bir ifadeyle, sahibi gövde için yetkili kullanıcıdır . Çağıran yalnızca yordamda ayrıcalık gerektirir EXECUTE ; ilişkiler, yordamlar ve gövdeden başvurulan diğer nesneler üzerindeki tüm erişim denetimleri yetkili kullanıcıya karşı değerlendirilir.

      yordamın gövdesindeki ilişkileri ve yordamları çözümlerken, Azure Databricks yordamın oluşturulduğu sırada geçerli olan kataloğu ve şemayı kullanır. Çağıranın geçici görünümler, geçici tablolar, oturum değişkenleri ve oturum kapsamlı işlevler gibi oturum kapsamlı nesneleri gövde içindeki çözümleme arama yolundan dışlanır, bu nedenle nitelenmemiş adları tarafından bunlara başvurulamaz. Örneğin session veya session.object_nameşema niteleyicisi system.session.object_name ile başvurulduğunda erişilebilir durumda kalırlar.

      Gövdedeki deyimlerin semantiğini etkileyen SQL yapılandırmaları (örneğin, ANSI_MODE veya varsayılan saat dilimi), oluşturma zamanında da yakalanır ve çağıranın oturum ayarlarından bağımsız olarak yordamın her çağrılımı sırasında kullanılır.

      Bir SQL SECURITY DEFINER gövdenin içinde , current_catalog yordam oluşturulduğunda geçerli olan kataloğu döndürür ve current_schema ve current_database yordam oluşturulduğunda geçerli olan şemayı döndürür.

      SQL SECURITY DEFINER session_user değerini değiştirmez: veren kullanıcıyı CALLdöndürmeye devam eder. Yetkili kullanıcının ve oturum kullanıcısının bir SQL SECURITY DEFINER gövde içinde nasıl farklı olduğu hakkında bilgi için bkz. Yetkili kullanıcı ve oturum kullanıcısı.

    • DETERMINISTIK DEĞİl

      Bir yordamın belirsiz olduğu varsayılır, yani aynı bağımsız değişkenlerle çağrıldığında bile her çağrıda farklı sonuçlar döndürebilir.

    • YORUM işlem_yorumu

      Prosedür için bir yorum. procedure_comment STRING değişmez değer olmalıdır. Varsayılan değer: NULL.

    • VARSAYıLAN HARMANLAMA default_collation_name

      Şunun için geçerlidir:evet olarak işaretlendi Databricks SQL denetimi evet olarak işaretlendi Databricks Runtime 17.1 ve üzeri

      Yordamın varsayılan harmanlamasını ayarlar. Yordamın varsayılan harmanlaması, yordam parametreleri için varsayılan harmanlama, parametreler için ifadeler, DEFAULTSTRING yordam gövdesinde bildirilen yazılan yerel değişkenler ve STRING yordam gövdesinde kullanılan değişmez değerler olarak kullanılır.

      Databricks Runtime 17.1 ile Databricks Runtime 18.2 default_collation_name arasında olmalıdır UTF8_BINARY. Yordamın oluşturulduğu şemada UTF8_BINARY haricinde varsayılan bir harmanlama varsa bu yan tümce zorunludur.

      Şunun için geçerlidir:evet olarak işaretlendi Databricks SQL denetimi evet olarak işaretlendi Databricks Runtime 18 ve üzeri

      Note

      Databricks Runtime 18, Databricks Runtime 18.0, 18.1 ve 18.2'den daha yenidir. Daha önce daha sonra numaralandırılmış sürüm olarak gönderilecek özellikler artık databricks Runtime 18'e tarihli güncelleştirmeler olarak gönderilir. Ayrıntılar için bkz. Birleşik sürüm notları hakkında.

      default_collation_name desteklenen herhangi bir harmanlama adı olabilir.

      Belirtilmezse, varsayılan harmanlama, yordamın oluşturulduğu şemadan türetilir.

    • SQL VERILERINI DEĞIŞTIRIR

      SQL verilerini değiştirmek için bir yordam varsayılır.

Yaygın hata koşulları

Örnekler

-- Demonstrate INOUT and OUT parameter usage.
> CREATE OR REPLACE PROCEDURE add(x INT, y INT, OUT sum INT, INOUT total INT)
    LANGUAGE SQL
    SQL SECURITY INVOKER
    COMMENT 'Add two numbers'
    AS BEGIN
        SET sum = x + y;
        SET total = total + sum;
    END;
> DECLARE sum INT;
> DECLARE total INT DEFAULT 0;
> CALL add(1, 2, sum, total);
> SELECT sum, total;
 3 3
> CALL add(3, 4, sum, total);
 7 10

-- The last executed query is the result set of a procedure
> CREATE PROCEDURE greeting(IN mode STRING COMMENT 'informal or formal')
    LANGUAGE SQL
    SQL SECURITY INVOKER
    AS BEGIN
        SELECT 'Hello!';
        CASE mode WHEN 'informal' THEN SELECT 'Hi!';
                  WHEN 'formal' THEN SELECT 'Pleased to meet you.';
        END CASE;
    END;
> CALL greeting('informal');
  Hi!

> CALL greeting('formal');
  Pleased to meet you.

> CALL greeting('casual');
  Hello!

-- Use SQL SECURITY DEFINER so the procedure runs with the owner's privileges
-- and references its creation-time catalog and schema. The invoker only needs
-- EXECUTE on `audit_app.ops.log_event`; they do not need any privileges on the
-- underlying `audit_app.private.audit_log` table.
> USE CATALOG audit_app;
> USE SCHEMA ops;
> CREATE OR REPLACE PROCEDURE log_event(IN event STRING)
    LANGUAGE SQL
    SQL SECURITY DEFINER
    MODIFIES SQL DATA
    AS BEGIN
        INSERT INTO audit_app.private.audit_log
          VALUES (current_user(), current_catalog(), current_schema(), event);
    END;

-- Even when invoked from a different catalog/schema and by a different user,
-- the body still inserts into `audit_app.private.audit_log`, with
-- `current_catalog()` and `current_schema()` returning the values frozen at
-- creation time. `session_user()` is unaffected by `SQL SECURITY DEFINER`
-- and records the actual invoker -- which is what audit logs typically want.
> USE CATALOG sales;
> USE SCHEMA reports;
> CALL audit_app.ops.log_event('checkout_completed');