Parameter dinamis memungkinkan Anda memarameterisasi kueri SQL menggunakan placeholder ?, mirip dengan PreparedStatement pada database. Mesin mengganti setiap placeholder dengan nilai yang sesuai saat kueri dieksekusi.
Manfaat utamanya adalah efisiensi cache: kueri yang dibangun dari templat SQL yang sama meningkatkan tingkat hit cache, terlepas dari nilai parameter yang diberikan. Dengan demikian, pencarian berulang dengan input berbeda akan mengenai cache alih-alih memicu evaluasi kueri penuh setiap kali.
Catatan: Parameter dinamis hanya dapat menggantikan nilai. Mereka tidak dapat menggantikan kata kunci atau nama bidang.
Cara kerja
Semua placeholder ? dalam pernyataan SQL bersifat posisional. Berikan nilai-nilainya sebagai larik bersarang melalui dynamic_params:
dynamic_params:[[value1, value2, ...]]Larik dalam tersebut dipetakan ke placeholder ? secara berurutan dari kiri ke kanan. Karena ? tidak membawa informasi tipe, gunakan CAST(? AS <type>) untuk menentukan tipe secara eksplisit.
Contoh
Pemrosesan tipe dasar dan pencocokan string
SELECT i1, cast(? as bigint) FROM t1 WHERE (i2 > 5 AND d3 < 10.1) OR s5 = ?dynamic_params:[[10, "str5"]]Placeholder ? pertama menerima 10 (di-cast ke BIGINT), sedangkan yang kedua menerima "str5" (sebuah string).
Pencarian spasial dengan pencocokan teks lengkap
SELECT
price,
title,
compute(
longitude,
latitude,
city_id,
CAST(? AS double),
CAST(? AS double),
CAST(1 AS bigint)
) AS distance
FROM
store,
unnest(store.sub_table)
WHERE
MATCHINDEX('shop', ?)
AND QUERY(name, ?)dynamic_params:[[119.98844256998,
36.776817017143,
"excellect",
"fruit OR watermelon"]]Empat placeholder ? menerima nilai secara berurutan: longitude (DOUBLE), latitude (DOUBLE), istilah pencarian MATCHINDEX, dan ekspresi QUERY. CAST(1 AS bigint) merupakan literal—bukan placeholder—sehingga tidak dimasukkan ke dalam dynamic_params.
Batasan
Placeholder
?hanya dapat menggantikan nilai, bukan kata kunci SQL atau nama bidang.Setiap
?dicocokkan berdasarkan posisi.