Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunun için geçerlidir:
Databricks SQL Databricks Runtime 17.0 ve üzeri ![]()
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.-
İş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.
-
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,
NULLolarak başlatılır ve eğer yordam işlenmeyen bir hatayla tamamlanmazsa, son parametre değeri çıktı olarak döndürülü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çinOUTdesteklenmez; birinin belirtilmesiINOUTyükseltir.YORUM
Parametresinin isteğe bağlı açıklaması.
commentsabitSTRINGolmalıdır.
-
-
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 INVOKERveyaSQL SECURITY DEFINERLANGUAGE SQLvelerinden 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:
Databricks SQLYordamı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
sessionveyasession.object_nameşema niteleyicisisystem.session.object_nameile başvurulduğunda erişilebilir durumda kalırlar.Gövdedeki deyimlerin semantiğini etkileyen SQL yapılandırmaları (örneğin,
ANSI_MODEveya 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 DEFINERgö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 DEFINERsession_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 birSQL SECURITY DEFINERgö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_commentSTRINGdeğişmez değer olmalıdır. Varsayılan değer:NULL.VARSAYıLAN HARMANLAMA default_collation_name
Şunun için geçerlidir:
Databricks SQL
Databricks Runtime 17.1 ve üzeriYordamın varsayılan harmanlamasını ayarlar. Yordamın varsayılan harmanlaması, yordam parametreleri için varsayılan harmanlama, parametreler için ifadeler,
DEFAULTSTRINGyordam gövdesinde bildirilen yazılan yerel değişkenler veSTRINGyordam gövdesinde kullanılan değişmez değerler olarak kullanılır.Databricks Runtime 17.1 ile Databricks Runtime 18.2
default_collation_namearasında olmalıdırUTF8_BINARY. Yordamın oluşturulduğu şemadaUTF8_BINARYharicinde varsayılan bir harmanlama varsa bu yan tümce zorunludur.Şunun için geçerlidir:
Databricks SQL
Databricks Runtime 18 ve üzeriNote
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_namedesteklenen 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ı
- DUPLICATE_CLAUSES
- DUPLICATE_ROUTINE_PARAMETER_NAMES
- INVALID_DEFAULT_VALUE
- INVALID_SQL_SYNTAX. CREATE_ROUTINE_WITH_IF_NOT_EXISTS_AND_REPLACE
- MISSING_CLAUSES_FOR_OPERATION
- PROCEDURE_CREATION_EMPTY_ROUTINE
- PROCEDURE_CREATION_PARAMETER_OUT_INOUT_WITH_DEFAULT
- PROCEDURE_NOT_SUPPORTED
- PROCEDURE_NOT_SUPPORTED_WITH_HMS
- ROUTINE_ALREADY_EXISTS
- UNSUPPORTED_PROCEDURE_COLLATION
Ö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');