PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

SQL Dinamis (EXECUTE) sebagai kondisi untuk pernyataan IF

Konstruksi ini tidak mungkin:

IF EXECUTE 'EXISTS (SELECT 1 FROM mytable)' THEN ...

Anda dapat menyederhanakan menjadi:

IF EXISTS (SELECT 1 FROM mytable) THEN ...

Tetapi contoh Anda mungkin disederhanakan. Untuk SQL dinamis dieksekusi dengan EXECUTE , baca manualnya di sini. Anda dapat memeriksa variabel khusus FOUND segera setelah menjalankan perintah DML apa pun untuk melihat apakah ada baris di sini yang terpengaruh:

IF FOUND THEN ...

Namun:

Perhatikan khususnya bahwa EXECUTE mengubah output GET DIAGNOSTICS , tetapi tidak mengubah FOUND .

Penekanan saya yang berani. Untuk EXECUTE biasa lakukan ini sebagai gantinya:

...
DECLARE
   i int;
BEGIN
   EXECUTE 'SELECT 1 FROM mytable';  -- something dynamic here

   GET DIAGNOSTICS i = ROW_COUNT;

   IF i > 0 THEN ...

Atau jika tepat - khususnya dengan hanya satu baris hasil - gunakan INTO klausa dengan EXECUTE untuk mendapatkan hasil dari kueri dinamis secara langsung. Saya mengutip manualnya di sini:

Jika baris atau daftar variabel disediakan, itu harus sama persis dengan struktur hasil kueri (ketika variabel record digunakan, variabel record akan mengonfigurasi dirinya sendiri untuk mencocokkan struktur hasil secara otomatis). Jika beberapa baris dikembalikan, hanya baris pertama yang akan ditetapkan ke INTO variabel. Jika tidak ada baris yang dikembalikan, NULL ditetapkan ke INTO variabel.

...
DECLARE
   _var1 int;  -- init value is NULL unless instructed otherwise
BEGIN

EXECUTE format('SELECT var1 FROM %I WHERE x=y LIMIT 1', 'my_Table')
INTO    _var1;

IF _var1 IS NOT NULL THEN ...


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana Sin() Bekerja di PostgreSQL

  2. Lumen - Buat koneksi database saat runtime

  3. Diindeks ORDER BY dengan LIMIT 1

  4. psycopg2:masukkan beberapa baris dengan satu kueri

  5. Cara Menggunakan Model Machine Learning KNN dengan 2UDA – PostgreSQL dan Orange (Bagian 1)