Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:
Databricks SQL Databricks Runtime 17.0 ke atas
Unity Catalog saja
Membuat prosedur di Unity Catalog yang mengambil atau memodifikasi argumen, menjalankan serangkaian pernyataan SQL, dan secara opsional mengembalikan kumpulan hasil.
Sintaksis
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 }
Parameter-parameternya
ATAU GANTIKAN
Jika telah ditentukan, maka prosedur dengan nama yang sama akan digantikan. Anda tidak dapat mengganti fungsi yang ada dengan prosedur; melakukannya akan meningkatkan ROUTINE_ALREADY_EXISTS. Anda tidak dapat menentukan parameter ini dengan
IF NOT EXISTS; menentukan kedua kenaikan INVALID_SQL_SYNTAX. CREATE_ROUTINE_WITH_IF_NOT_EXISTS_AND_REPLACE.JIKA TIDAK ADA
Jika ditentukan, buat prosedur hanya ketika prosedur dengan nama tersebut belum ada. Jika ada prosedur dengan nama yang sama, pernyataan akan diabaikan. Anda tidak dapat menentukan parameter ini dengan
OR REPLACE; menentukan kedua kenaikan INVALID_SQL_SYNTAX. CREATE_ROUTINE_WITH_IF_NOT_EXISTS_AND_REPLACE.-
Nama untuk prosedur. Anda dapat secara opsional memenuhi syarat nama prosedur dengan nama skema. Jika nama tidak memenuhi syarat, prosedur permanen dibuat dalam skema saat ini.
Nama prosedur harus unik untuk semua rutinitas (prosedur dan fungsi) dalam skema. Jika rutinitas dengan nama yang sama ada dan tidak
OR REPLACEditentukanIF NOT EXISTS, Azure Databricks menaikkan ROUTINE_ALREADY_EXISTS. procedure_parameter
Menentukan parameter prosedur.
-
Nama parameter harus unik dalam prosedur; jika tidak, Azure Databricks menaikkan DUPLICATE_ROUTINE_PARAMETER_NAMES.
IN, INOUT, atau OUT
Penjelasan opsional tentang mode parameter.
DI
Menentukan parameter input saja. Ini adalah default.
INOUT
Menentukan parameter yang menerima argumen input-output. Jika prosedur selesai tanpa kesalahan yang tidak tertangani, prosedur akan mengembalikan nilai parameter akhir sebagai output.
KELUAR
** Memastikan parameter output. Parameter diinisialisasi ke
NULLdan, jika prosedur selesai tanpa kesalahan yang tidak tertangani, parameter akan mengembalikan nilai parameter akhir sebagai output.
-
Jenis data apa pun yang didukung.
default_expression DEFAULT
Opsional default yang akan digunakan ketika pemanggilan fungsi tidak menetapkan argumen ke parameter.
default_expressionharus dapat ditransmisikan kedata_type. Ekspresi tidak boleh mereferensikan parameter lain atau mengandung subkueri.Saat Anda menentukan default untuk satu parameter, semua parameter berikut juga harus memiliki default.
DEFAULTtidak didukung untukOUTparameter atauINOUT; menentukan satu kenaikan PROCEDURE_CREATION_PARAMETER_OUT_INOUT_WITH_DEFAULT.KOMENTAR komentar
Deskripsi opsional parameter.
commentharus berupa nilai literalSTRING.
-
-
Pernyataan majemuk SQL (
BEGIN ... END) dengan definisi Prosedur SQL.Ketika prosedur dibuat, kebenaran sintaksis divalidasi. Isi prosedur tidak divalidasi untuk kebenaran semantik sampai prosedur dipanggil.
karakteristik
Salah satu dari
SQL SECURITY INVOKERatauSQL SECURITY DEFINER, danLANGUAGE SQLdiperlukan. Semua lainnya bersifat opsional. Anda dapat menentukan sejumlah karakteristik dalam urutan apa pun, tetapi Anda dapat menentukan setiap klausa hanya sekali.BAHASA SQL
Bahasa implementasi fungsi.
PEMANGGIL KEAMANAN SQL
Menentukan bahwa setiap pernyataan SQL dalam isi prosedur akan dijalankan di bawah otoritas pengguna yang memanggil prosedur.
Saat menyelesaikan hubungan dan rutinitas dalam isi prosedur, Azure Databricks menggunakan katalog saat ini dan skema saat ini pada saat pemanggilan.
Lihat Pengguna dan pengguna sesi yang berwenang untuk bagaimana pengguna yang berwenang dan pengguna sesi bereaksi di dalam badan prosedur dan di seluruh panggilan berlapis.
PENDEFINISI KEAMANAN SQL
Berlaku untuk:
Databricks SQLMenentukan bahwa setiap pernyataan SQL dalam isi prosedur selalu dijalankan di bawah otoritas pemilik (pendefinisi) prosedur, terlepas dari pengguna mana yang memanggil prosedur. Artinya, pemilik adalah pengguna yang berwenang untuk tubuh. Pemanggil hanya memerlukan
EXECUTEhak istimewa pada prosedur; semua pemeriksaan akses pada relasi, rutinitas, dan objek lain yang direferensikan dari tubuh dievaluasi terhadap pengguna yang berwenang.Ketika menyelesaikan hubungan dan rutinitas dalam isi prosedur, Azure Databricks menggunakan katalog dan skema yang saat ini pada saat prosedur dibuat. Objek cakupan sesi pemanggil, seperti tampilan sementara, tabel sementara, variabel sesi, dan fungsi cakupan sesi, dikecualikan dari jalur pencarian resolusi di dalam isi, sehingga tidak dapat direferensikan oleh nama yang tidak memenuhi syarat. Mereka tetap dapat diakses ketika dirujuk
sessiondengan kualifikasi skema, misalnyasession.object_nameatausystem.session.object_name.Konfigurasi SQL (misalnya,
ANSI_MODEatau zona waktu default) yang memengaruhi semantik pernyataan dalam isi juga ditangkap pada waktu pembuatan dan digunakan selama setiap pemanggilan prosedur, terlepas dari pengaturan sesi pemanggil.Di dalam isi
SQL SECURITY DEFINER, current_catalog mengembalikan katalog yang ada saat ini ketika prosedur dibuat, dan current_schema dan current_database mengembalikan skema yang ada saat ini ketika prosedur dibuat.SQL SECURITY DEFINERtidak mengubah nilai session_user: terus mengembalikan pengguna yang mengeluarkanCALL. Lihat Pengguna dan pengguna sesi yang berwenang untuk bagaimana pengguna yang berwenang dan pengguna sesi berbeda di dalam isiSQL SECURITY DEFINER.TIDAK DETERMINISTIK
Prosedur diasumsikan nondeterministik, yang berarti dapat mengembalikan hasil yang berbeda pada setiap pemanggilan, bahkan ketika dipanggil dengan argumen yang sama.
KOMENTAR PROSEDUR
Komentar tentang prosedur.
procedure_commentharus diartikan secaraSTRINGharfiah. Defaultnya adalahNULL.KOLASI DEFAULT default_collation_name
Berlaku untuk:
pemeriksaan Databricks SQL
Databricks Runtime 17.1 ke atasMengatur kolase default prosedur. Kolase default prosedur digunakan sebagai kolase default untuk parameter prosedur,
DEFAULTekspresi untuk parameter,STRINGvariabel lokal yang diketik yang dideklarasikan dalam isi prosedur, danSTRINGliteral yang digunakan dalam isi prosedur.Dalam Databricks Runtime 17.1 hingga Databricks Runtime 18.2,
default_collation_nameharusUTF8_BINARY. Klausa ini wajib jika skema di mana prosedur dibuat memiliki kolaborasi default selainUTF8_BINARY.Berlaku untuk:
pemeriksaan Databricks SQL
Databricks Runtime 18 LTS ke atasNote
Databricks Runtime 18 lebih baru dari Databricks Runtime 18.0, 18.1, dan 18.2. Fitur yang sebelumnya akan dikirim sebagai versi bernomor yang lebih baru sekarang dikirim sebagai pembaruan tanggal ke Databricks Runtime 18 sebagai gantinya. Untuk detailnya, lihat Tentang catatan rilis terpadu.
default_collation_namedapat berupa nama kolase yang didukung.Jika tidak ditentukan, kolaborasi default berasal dari skema tempat prosedur dibuat.
MEMODIFIKASI DATA SQL
Prosedur diasumsikan untuk memodifikasi data SQL.
Kondisi kesalahan umum
- 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
Contoh
-- 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');