CALL - Amazon Redshift

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

CALL

Menjalankan prosedur yang disimpan. CALLPerintah harus menyertakan nama prosedur dan nilai argumen masukan. Anda harus memanggil prosedur tersimpan dengan menggunakan CALL pernyataan.

catatan

CALLtidak dapat menjadi bagian dari kueri reguler apa pun.

Sintaks

CALL sp_name ( [ argument ] [, ...] )

Parameter

sp_nama

Nama prosedur yang akan dijalankan.

argumen

Nilai argumen masukan. Parameter ini juga bisa menjadi nama fungsi, misalnyapg_last_query_id(). Anda tidak dapat menggunakan kueri sebagai CALL argumen.

Catatan penggunaan

Prosedur tersimpan Amazon Redshift mendukung panggilan bersarang dan rekursif, seperti yang dijelaskan berikut. Selain itu, pastikan dukungan driver Anda up-to-date, juga dijelaskan sebagai berikut.

Panggilan bersarang

Prosedur tersimpan Amazon Redshift mendukung panggilan bersarang dan rekursif. Jumlah maksimum level bersarang yang diizinkan adalah 16. Panggilan bersarang dapat merangkum logika bisnis ke dalam prosedur yang lebih kecil, yang dapat dibagikan oleh beberapa penelepon.

Jika Anda memanggil prosedur bersarang yang memiliki parameter keluaran, prosedur bagian dalam harus mendefinisikan INOUT argumen. Dalam hal ini, prosedur bagian dalam diteruskan dalam variabel nonkonstan. OUTargumen tidak diperbolehkan. Perilaku ini terjadi karena variabel diperlukan untuk menahan output dari panggilan batin.

Hubungan antara prosedur dalam dan luar dicatat di from_sp_call kolomSVL_STORED_PROC_CALL.

Contoh berikut menunjukkan melewati variabel ke panggilan prosedur bersarang melalui INOUT argumen.

CREATE OR REPLACE PROCEDURE inner_proc(INOUT a int, b int, INOUT c int) LANGUAGE plpgsql AS $$ BEGIN a := b * a; c := b * c; END; $$; CREATE OR REPLACE PROCEDURE outer_proc(multiplier int) LANGUAGE plpgsql AS $$ DECLARE x int := 3; y int := 4; BEGIN DROP TABLE IF EXISTS test_tbl; CREATE TEMP TABLE test_tbl(a int, b varchar(256)); CALL inner_proc(x, multiplier, y); insert into test_tbl values (x, y::varchar); END; $$; CALL outer_proc(5); SELECT * from test_tbl; a | b ----+---- 15 | 20 (1 row)

Dukungan pengemudi

Kami menyarankan Anda meningkatkan driver Java Database Connectivity (JDBC) dan Open Database Connectivity (ODBC) ke versi terbaru yang memiliki dukungan untuk prosedur tersimpan Amazon Redshift.

Anda mungkin dapat menggunakan driver yang ada jika alat klien Anda menggunakan API operasi driver yang melewati CALL pernyataan ke server. Parameter output, jika ada, dikembalikan sebagai hasil set satu baris.

Versi terbaru Amazon Redshift JDBC dan ODBC driver memiliki dukungan metadata untuk penemuan prosedur tersimpan. Mereka juga memiliki CallableStatement dukungan untuk aplikasi Java kustom. Untuk informasi selengkapnya tentang driver, lihat Menghubungkan ke Cluster Amazon Redshift Menggunakan Alat SQL Klien di Panduan Manajemen Amazon Redshift.

Contoh berikut menunjukkan cara menggunakan API operasi JDBC driver yang berbeda untuk panggilan prosedur yang disimpan.

void statement_example(Connection conn) throws SQLException { statement.execute("CALL sp_statement_example(1)"); } void prepared_statement_example(Connection conn) throws SQLException { String sql = "CALL sp_prepared_statement_example(42, 84)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.execute(); } void callable_statement_example(Connection conn) throws SQLException { CallableStatement cstmt = conn.prepareCall("CALL sp_create_out_in(?,?)"); cstmt.registerOutParameter(1, java.sql.Types.INTEGER); cstmt.setInt(2, 42); cstmt.executeQuery(); Integer out_value = cstmt.getInt(1); }

Contoh

Contoh berikut memanggil nama prosedurtest_spl.

call test_sp1(3,'book'); INFO: Table "tmp_tbl" does not exist and will be skipped INFO: min_val = 3, f2 = book

Contoh berikut memanggil nama prosedurtest_spl2.

call test_sp2(2,'2019'); f2 | column2 ---------------------+--------- 2019+2019+2019+2019 | 2 (1 row)