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

Có thể sử dụng một biến và không chỉ định kiểu trả về trong postgreSQL không?

Khối mã ẩn danh (DO lệnh) không thể trả về các hàng và Postgres không có biến toàn cục. Có một số cách để tồn tại mà không có nó. Bốn trong số đó như sau.

Sử dụng biểu thức bảng chung (WITH lệnh)

WITH def AS (
    SELECT 3 AS colorid
    )
SELECT *, substring(name,1,3) 
FROM products
JOIN def
USING (colorid);

Sử dụng bảng tạm thời cho các biến:

CREATE TEMP TABLE var(colorid int);
INSERT INTO var values (3);
SELECT *, substring(name,1,3) 
FROM products
JOIN var
USING (colorid);
DROP TABLE var;

Sử dụng bảng tạm thời để biết kết quả:

DO $$
DECLARE v_colorid INT;
BEGIN
    v_colorid := 3;
    CREATE TEMP TABLE res AS 
        SELECT *, substring(name,1,3) 
        FROM products
        WHERE colorid = v_colorid;
END $$;
SELECT * 
FROM res;
DROP TABLE res;

Tạo một hàm (ví dụ):

CREATE OR REPLACE FUNCTION select_from_products()
RETURNS TABLE (colorid int, name text, abbr text)
LANGUAGE plpgsql as $$
DECLARE v_colorid INT;
BEGIN
    v_colorid := 3;
    RETURN QUERY
        SELECT *, substring(p.name,1,3) 
        FROM products p
        WHERE p.colorid = v_colorid;
END $$;

SELECT * FROM select_from_products();



  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:Nhóm truy vấn theo tháng

  2. postgresql date_trunc thành độ chính xác tùy ý?

  3. Có thể tắt xử lý báo giá trong lệnh Postgres COPY với định dạng CSV không?

  4. Cách tạo câu lệnh tạo bảng sql cho một bảng hiện có trong postgreSQL

  5. Nếu số lượng PostgreSQL (*) luôn chậm, làm thế nào để phân trang các truy vấn phức tạp?