PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

SQL động (EXECUTE) làm điều kiện cho câu lệnh IF

Cấu trúc này không thể thực hiện được:

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

Bạn có thể đơn giản hóa thành:

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

Nhưng ví dụ của bạn có thể được đơn giản hóa. Đối với SQL động được thực thi bằng EXECUTE , đọc hướng dẫn sử dụng tại đây. Bạn có thể kiểm tra biến đặc biệt FOUND ngay sau khi thực hiện bất kỳ lệnh DML nào để xem có hàng nào ở đây bị ảnh hưởng hay không:

IF FOUND THEN ...

Tuy nhiên:

Đặc biệt lưu ý rằng EXECUTE thay đổi kết quả đầu ra của GET DIAGNOSTICS , nhưng không thay đổi FOUND .

Tôi nhấn mạnh đậm. Đối với EXECUTE đơn giản thay vào đó hãy làm điều này:

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

   GET DIAGNOSTICS i = ROW_COUNT;

   IF i > 0 THEN ...

Hoặc nếu có cơ hội - cụ thể là chỉ có kết quả một hàng - hãy sử dụng INTO mệnh đề với EXECUTE để nhận trực tiếp kết quả từ truy vấn động. Tôi trích dẫn sách hướng dẫn ở đây:

Nếu một hàng hoặc danh sách biến được cung cấp, nó phải khớp chính xác với cấu trúc của kết quả của truy vấn (khi một biến bản ghi được sử dụng, nó sẽ tự động cấu hình để khớp với cấu trúc kết quả một cách tự động). Nếu trả về nhiều hàng, thì chỉ hàng đầu tiên sẽ được gán cho INTO Biến đổi. Nếu không có hàng nào được trả về, NULL được gán cho INTO (các) biến.

...
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. Django + Psycopg2:InterfaceError:chỉ hỗ trợ giao thức 3

  2. postgresql COUNT (DISTINCT ...) rất chậm

  3. Chuỗi UTF-8 tương tự cho trường tự động hoàn thành

  4. Làm cách nào để bạn tạo một chuỗi ngẫu nhiên phù hợp với ID phiên trong PostgreSQL?

  5. Cách kiểm tra ngày trùng lặp trong PostgreSQL