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

truy vấn sql động trong postgres

EXECUTE ... USING chỉ hoạt động trong PL / PgSQL - tức là trong các hàm hoặc DO các khối được viết bằng ngôn ngữ PL / PgSQL. Nó không hoạt động trong SQL thuần túy; EXECUTE trong SQL thuần túy thì hoàn toàn khác, để thực thi các câu lệnh đã chuẩn bị. Bạn không thể sử dụng SQL động trực tiếp trong phương ngữ SQL của PostgreSQL.

So sánh:

  • PL / PgSQL's EXECUTE ... USING; đến
  • EXECUTE của SQL

Xem mệnh giá cuối cùng thứ 2 trong câu trả lời trước của tôi.

Ngoài việc không chạy ngoại trừ trong PL / PgSQL, câu lệnh SQL của bạn sai, nó sẽ không thực hiện những gì bạn mong đợi. If (select id from ids where condition = some_condition) trả về nói rằng 42 , câu lệnh sẽ không thành công nếu id là một số nguyên. Nếu nó được truyền sang văn bản, bạn sẽ nhận được:

EXECUTE format('SELECT * from result_%s_table', quote_ident('42'));
EXECUTE format('SELECT * from result_%s_table', '"42"');
EXECUTE 'SELECT * from result_"42"_table';

Điều đó không hợp lệ. Bạn thực sự muốn result_42_table hoặc "result_42_table" . Bạn sẽ phải viết một cái gì đó giống như:

EXECUTE format('SELECT * from %s', quote_ident('result_'||(select id from ids where condition = some_condition)||'_table'))

... nếu bạn phải sử dụng quote_ident .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhiều trình tạo trình tự Hibernate cho một thực thể với PostgreSQL

  2. Sử dụng tham số làm tên cột trong hàm Postgres

  3. Lưu trữ chuỗi nhị phân dài (dữ liệu thô)

  4. Làm thế nào để có được ngày hôm qua trong PostgreSQL

  5. Không thể sử dụng bảng có tên người dùng trong chế độ ngủ đông postgresql