Ikhtisar prosedur tersimpan di Amazon Redshift - Amazon Redshift

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Ikhtisar prosedur tersimpan di Amazon Redshift

Topik ini menjelaskan detail tentang tujuan dan penggunaan prosedur yang disimpan.

Prosedur tersimpan biasanya digunakan untuk merangkum logika untuk transformasi data, validasi data, dan logika khusus bisnis. Dengan menggabungkan beberapa SQL langkah ke dalam prosedur tersimpan, Anda dapat mengurangi perjalanan pulang pergi antara aplikasi Anda dan database.

Untuk kontrol akses berbutir halus, Anda dapat membuat prosedur tersimpan untuk menjalankan fungsi tanpa memberikan akses pengguna ke tabel yang mendasarinya. Misalnya, hanya pemilik atau pengguna super yang dapat memotong tabel, dan pengguna memerlukan hak menulis untuk memasukkan data ke dalam tabel. Alih-alih memberikan hak istimewa pengguna pada tabel yang mendasarinya, Anda dapat membuat prosedur tersimpan yang melakukan tugas. Anda kemudian memberikan hak istimewa kepada pengguna untuk menjalankan prosedur yang disimpan.

Prosedur tersimpan dengan atribut DEFINER keamanan berjalan dengan hak istimewa pemilik prosedur tersimpan. Secara default, prosedur yang disimpan memiliki INVOKER keamanan, yang berarti prosedur menggunakan hak istimewa pengguna yang memanggil prosedur.

Untuk membuat prosedur yang disimpan, gunakan CREATE PROCEDURE perintah. Untuk menjalankan prosedur, gunakan CALL perintah. Contoh berikut nanti di bagian ini.

catatan

Beberapa klien mungkin menampilkan kesalahan berikut saat membuat prosedur tersimpan Amazon Redshift.

ERROR: 42601: [Amazon](500310) unterminated dollar-quoted string at or near "$$

Kesalahan ini terjadi karena ketidakmampuan klien untuk mengurai pernyataan dengan benar dengan CREATE PROCEDURE pernyataan pembatas titik koma dan dengan tanda dolar ($) kutipan. Ini menghasilkan hanya sebagian dari pernyataan yang dikirim ke server Amazon Redshift. Anda sering dapat mengatasi kesalahan ini dengan menggunakan Execute selected opsi Run as batch atau klien.

Misalnya, saat menggunakan klien Ainity, gunakan Run entire script as batch opsi. Bila Anda menggunakan SQL Workbench/J, kami merekomendasikan versi 124. Saat Anda menggunakan SQL Workbench/J versi 125, pertimbangkan untuk menentukan pembatas alternatif sebagai solusi.

CREATEPROCEDUREberisi SQL pernyataan yang dibatasi dengan titik koma (;). Mendefinisikan pembatas alternatif seperti garis miring (/) dan menempatkannya di akhir CREATE PROCEDURE pernyataan mengirimkan pernyataan ke server Amazon Redshift untuk diproses. Berikut adalah contohnya.

CREATE OR REPLACE PROCEDURE test() AS $$ BEGIN SELECT 1 a; END; $$ LANGUAGE plpgsql ; /

Untuk informasi selengkapnya, lihat Pembatas alternatif dalam dokumentasi SQL Workbench/J. Atau gunakan klien dengan dukungan yang lebih baik untuk menguraikan CREATE PROCEDURE pernyataan, seperti editor kueri di konsol Amazon Redshift atau. TablePlus

Contoh berikut menunjukkan prosedur tanpa argumen output. Secara default, argumen adalah argumen input (IN).

CREATE OR REPLACE PROCEDURE test_sp1(f1 int, f2 varchar) AS $$ BEGIN RAISE INFO 'f1 = %, f2 = %', f1, f2; END; $$ LANGUAGE plpgsql; call test_sp1(5, 'abc'); INFO: f1 = 5, f2 = abc CALL

catatan

Saat Anda menulis prosedur tersimpan, kami merekomendasikan praktik terbaik untuk mengamankan nilai sensitif:

Jangan hardcode informasi sensitif apa pun dalam logika prosedur tersimpan. Misalnya, jangan tetapkan kata sandi pengguna dalam CREATE USER pernyataan di badan prosedur tersimpan. Ini menimbulkan risiko keamanan, karena nilai hardcode dapat dicatat sebagai metadata skema dalam tabel katalog. Sebagai gantinya, berikan nilai sensitif, seperti kata sandi, sebagai argumen ke prosedur yang disimpan, melalui parameter.

Untuk informasi selengkapnya tentang prosedur tersimpan, lihat CREATE PROCEDURE danMembuat prosedur tersimpan di Amazon Redshift. Untuk informasi selengkapnya tentang tabel katalog, lihatTabel katalog sistem.

Contoh berikut menunjukkan prosedur dengan argumen output. Argumen adalah input (IN), input dan output (INOUT), dan output (OUT).

CREATE OR REPLACE PROCEDURE test_sp2(f1 IN int, f2 INOUT varchar(256), out_var OUT varchar(256)) AS $$ DECLARE loop_var int; BEGIN IF f1 is null OR f2 is null THEN RAISE EXCEPTION 'input cannot be null'; END IF; DROP TABLE if exists my_etl; CREATE TEMP TABLE my_etl(a int, b varchar); FOR loop_var IN 1..f1 LOOP insert into my_etl values (loop_var, f2); f2 := f2 || '+' || f2; END LOOP; SELECT INTO out_var count(*) from my_etl; END; $$ LANGUAGE plpgsql; call test_sp2(2,'2019'); f2 | column2 ---------------------+--------- 2019+2019+2019+2019 | 2 (1 row)