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
.