Mengembalikan set hasil - Amazon Redshift

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

Mengembalikan set hasil

Anda dapat mengembalikan set hasil menggunakan kursor atau tabel temp.

Mengembalikan kursor

Untuk mengembalikan kursor, buat prosedur dengan argumen INOUT yang ditentukan dengan tipe refcursor data. Saat Anda memanggil prosedur, beri nama kursor. Kemudian Anda dapat mengambil hasil dari kursor dengan nama.

Contoh berikut membuat prosedur bernama get_result_set dengan argumen INOUT bernama rs_out menggunakan tipe refcursor data. Prosedur membuka kursor menggunakan pernyataan SELECT.

CREATE OR REPLACE PROCEDURE get_result_set (param IN integer, rs_out INOUT refcursor) AS $$ BEGIN OPEN rs_out FOR SELECT * FROM fact_tbl where id >= param; END; $$ LANGUAGE plpgsql;

Perintah CALL berikut membuka kursor dengan namamycursor. Gunakan kursor hanya dalam transaksi.

BEGIN; CALL get_result_set(1, 'mycursor');

Setelah kursor dibuka, Anda dapat mengambil dari kursor, seperti yang ditunjukkan contoh berikut.

FETCH ALL FROM mycursor; id | secondary_id | name -------+--------------+--------- 1 | 1 | Joe 1 | 2 | Ed 2 | 1 | Mary 1 | 3 | Mike (4 rows)

Pada akhirnya, transaksi dilakukan atau dibatalkan.

COMMIT;

Kursor yang dikembalikan oleh prosedur tersimpan tunduk pada kendala dan pertimbangan kinerja yang sama seperti yang dijelaskan dalam DECLARE CURSOR. Untuk informasi selengkapnya, lihat Kendala kursor.

Contoh berikut menunjukkan panggilan prosedur yang get_result_set disimpan menggunakan tipe refcursor data dari JDBC. Literal 'mycursor' (nama kursor) diteruskan ke. prepareStatement Kemudian hasilnya diambil dari. ResultSet

static void refcursor_example(Connection conn) throws SQLException { conn.setAutoCommit(false); PreparedStatement proc = conn.prepareStatement("CALL get_result_set(1, 'mycursor')"); proc.execute(); ResultSet rs = statement.executeQuery("fetch all from mycursor"); while (rs.next()) { int n = rs.getInt(1); System.out.println("n " + n); }

Menggunakan tabel temp

Untuk mengembalikan hasil, Anda dapat mengembalikan pegangan ke tabel temp yang berisi baris hasil. Klien dapat memberikan nama sebagai parameter untuk prosedur yang disimpan. Di dalam prosedur tersimpan, SQL dinamis dapat digunakan untuk beroperasi pada tabel temp. Bagian berikut menunjukkan satu contoh.

CREATE PROCEDURE get_result_set(param IN integer, tmp_name INOUT varchar(256)) as $$ DECLARE row record; BEGIN EXECUTE 'drop table if exists ' || tmp_name; EXECUTE 'create temp table ' || tmp_name || ' as select * from fact_tbl where id <= ' || param; END; $$ LANGUAGE plpgsql; CALL get_result_set(2, 'myresult'); tmp_name ----------- myresult (1 row) SELECT * from myresult; id | secondary_id | name ----+--------------+------ 1 | 1 | Joe 2 | 1 | Mary 1 | 2 | Ed 1 | 3 | Mike (4 rows)