CREATE EXTERNAL LANGUAGE (Transact-SQL)

Berlaku untuk: SQL Server 2019 (15.x) dan versi yang lebih baru

Mendaftarkan ekstensi bahasa eksternal dalam database dari jalur file atau aliran byte yang ditentukan. Pernyataan ini adalah mekanisme umum bagi administrator database untuk mendaftarkan ekstensi bahasa eksternal baru pada platform OS apa pun yang didukung SQL Server. Untuk informasi selengkapnya, lihat Ekstensi Bahasa.

Catatan

R dan Python adalah nama yang dicadangkan. Anda tidak dapat membuat bahasa eksternal dengan nama-nama spesifik tersebut. Untuk informasi selengkapnya tentang cara menggunakan R dan Python, lihat SQL Server Pembelajaran Mesin Services.

Sintaks

CREATE EXTERNAL LANGUAGE language_name  
[ AUTHORIZATION owner_name ]  
FROM <file_spec> [ ,...2 ]  
[ ; ]  

<file_spec> ::=  
{
    ( CONTENT = { <external_lang_specifier> | <content_bits> },
    FILE_NAME = <external_lang_file_name>
    [ , PLATFORM = <platform> ]
    [ , PARAMETERS = <external_lang_parameters> ]
    [ , ENVIRONMENT_VARIABLES = <external_lang_env_variables> ] )
}

<external_lang_specifier> :: =  
{
    '[file_path\]os_file_name'  
}

<content_bits> :: =  
{
    varbinary_literal
    | varbinary_expression
}

<external_lang_file_name> :: =  
'extension_file_name'


<platform> :: =
{
    WINDOWS
  | LINUX
}

<external_lang_parameters> :: =  
'extension_specific_parameters'

Argumen

language_name

Bahasa adalah objek cakupan database. Nama bahasa harus unik dalam database.

owner_name

Menentukan nama pengguna atau peran yang memiliki bahasa eksternal. Jika Anda tidak menentukan nilai, pengguna saat ini akan menjadi pemiliknya. Bergantung pada izin, pengguna lain mungkin memerlukan izin eksplisit untuk mengeksekusi skrip menggunakan bahasa tertentu.

file_spec

Menentukan konten ekstensi bahasa. Hanya satu <file_spec> yang diizinkan untuk bahasa tertentu, per platform.

external_lang_specifier

Jalur file lengkap ke file .zip atau tar.gz yang berisi kode ekstensi. Konten ini dapat berupa jalur ke file .zip (di Windows) atau file tar.gz (di Linux).

content_bits

Menentukan konten bahasa sebagai hex literal, mirip dengan rakitan.

Gunakan opsi ini saat sistem file server dibatasi dan Anda tidak dapat menyalin file pustaka ke lokasi yang dapat diakses server. Anda harus memiliki izin yang diperlukan untuk membuat atau mengubah bahasa.

external_lang_file_name

Nama ekstensi .dll atau file .so. Nama tersebut mengidentifikasi file yang benar ketika ada beberapa file .dll atau .so di <external_lang_specifier> .zip atau tar.gz.

external_lang_parameters

Menentukan serangkaian parameter untuk diteruskan ke runtime bahasa eksternal. Runtime eksternal menerima nilai parameter setelah proses eksternal dimulai. Variabel lingkungan, sebaliknya, dapat diakses oleh ekstensi bahasa sebelum proses eksternal dimulai.

external_lang_env_variables

Menentukan sekumpulan variabel lingkungan yang akan tersedia untuk runtime bahasa eksternal sebelum proses eksternal dimulai. Misalnya, atur direktori beranda runtime itu sendiri, seperti JRE_HOME.

platform

Parameter ini diperlukan untuk skenario OS hibrid. Dalam arsitektur hibrid, Anda harus mendaftarkan bahasa sekali per platform. Jika Anda tidak menentukan platform, SQL Server mengasumsikan OS saat ini.

Izin

Memerlukan CREATE EXTERNAL LANGUAGE izin. Secara default, setiap anggota peran database tetap db_owner memiliki izin untuk membuat bahasa eksternal. Untuk semua pengguna lain, Anda harus secara eksplisit memberikan izin dengan menggunakan GRANT pernyataan, yang menentukan CREATE EXTERNAL LANGUAGE sebagai hak istimewa.

Untuk memodifikasi pustaka, Anda memerlukan izin terpisah, ALTER ANY EXTERNAL LANGUAGE.

Izin JALANKAN SKRIP EKSTERNAL

Gunakan EXECUTE EXTERNAL SCRIPT izin untuk memberikan eksekusi skrip eksternal pada bahasa tertentu. EXECUTE EXTERNAL SCRIPT berbeda dari EXECUTE ANY EXTERNAL SCRIPT izin database, yang tidak mengizinkan pemberian izin eksekusi pada bahasa tertentu.

Berikan izin kepada pengguna non-dbo untuk menjalankan bahasa tertentu:

GRANT EXECUTE EXTERNAL SCRIPT ON EXTERNAL LANGUAGE ::language_name
TO database_principal_name;

Izin referensi ke pustaka eksternal

Mirip dengan rakitan, bahasa eksternal memerlukan izin referensi sehingga ada tautan antara pustaka eksternal dan bahasa eksternal. Misalnya, sebelum Anda menghapus bahasa eksternal, Anda harus menghapus semua pustaka eksternal yang mereferensikannya. Lihat bahasa eksternal sebagai objek tingkat yang lebih tinggi daripada pustaka eksternal dalam hierarki.

Contoh

J. Membuat bahasa eksternal dalam database

Contoh berikut menambahkan bahasa eksternal yang disebut Java ke database di SQL Server di Windows.

CREATE EXTERNAL LANGUAGE Java 
FROM (CONTENT = N'<path-to-zip>', FILE_NAME = 'javaextension.dll');
GO

B. Membuat bahasa eksternal untuk Windows dan Linux

Anda dapat menentukan hingga dua <file_spec>, satu untuk Windows dan satu untuk Linux.

CREATE EXTERNAL LANGUAGE Java
FROM
(CONTENT = N'<path-to-zip>', FILE_NAME = 'javaextension.dll', PLATFORM = WINDOWS),
(CONTENT = N'<path-to-tar.gz>', FILE_NAME = 'javaextension.so', PLATFORM = LINUX);
GO

C. Memberikan izin untuk menjalankan skrip eksternal

Contoh berikut memberikan akses utama mylogin untuk menjalankan skrip menggunakan bahasa eksternal Java .

GRANT EXECUTE EXTERNAL SCRIPT ON EXTERNAL LANGUAGE ::Java 
TO mylogin;