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

Khai báo biến kiểu kết hợp trong PostgreSQL bằng cách sử dụng% TYPE

Sử dụng %ROWTYPE trong trường hợp đó.

Chỉnh sửa - trường hợp đơn giản

Các thử nghiệm của A.H. và DavidEG đã cho thấy điều này sẽ không hoạt động. Vấn đề thú vị!
Bạn có thể thử một cách giải quyết khác . Miễn là định nghĩa của bạn giống như ví dụ, bạn có thể chỉ cần sử dụng

CREATE FUNCTION test(param1 comp_type)
  RETURNS integer AS
$BODY$ 
DECLARE
    myvar comp_type;
BEGIN
    return 1;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE;

Nhưng vấn đề thực sự của bạn có lẽ không đơn giản như vậy?

Chỉnh sửa 2 - vấn đề thực sự

Đúng như dự đoán, vấn đề thực sự phức tạp hơn: loại đầu vào đa hình .
Giải pháp thay thế đối với kịch bản đó khó hơn, nhưng sẽ hoạt động hoàn hảo:

CREATE FUNCTION test(param1 anyelement, OUT a integer, OUT myvar anyelement)
  RETURNS record AS
$BODY$
BEGIN
    myvar := $1;  -- myvar has now the required type.

    --- do stuff with myvar.

    myvar := NULL;  -- reset if you don't want to output ..
    a := 1;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE;

Gọi:

SELECT a FROM test('("foo")'::comp_type); -- just retrieve a, ignore myvar

Xem toàn bộ đầu ra:

SELECT * FROM test('("foo")'::comp_type);

Lưu ý cho PostgreSQL 9.0+

Đã có một bản cập nhật quan trọng trong v9.0. Tôi trích dẫn ghi chú phát hành :

Ergo, ngoài cách giải quyết của tôi, bạn có thể sử dụng trực tiếp các biến đầu vào.

Tên được lưu động




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Quét đống bitmap và Quét chỉ mục được quyết định như thế nào?

  2. Tham số kết nối PDO TCP Keep-Alive

  3. Django ORM để lại các kết nối không hoạt động trên Postgres DB

  4. Làm cách nào để bạn JSON Marshall a pq.NullTime bằng UTC thay vì múi giờ địa phương?

  5. PostgreSQL - LỖI:không thể chuyển ngày cột thành ngày nhập