Tạo Cast (Source_TypeAStarget_type) Với chức năngfunction_name(argars_type[, ...]) [Như nhiệm vụ | Như tiềm ẩn] Tạo Cast (Source_TypeAStarget_type) Không có chức năng [Như nhiệm vụ | Như tiềm ẩn] Tạo Cast (Source_TypeASTarget_Type) Với inout [Như nhiệm vụ | Như ẩn]
Tạo CastXác định một kèo bóng đá c1 mới. Một kèo bóng đá c1 Chỉ định cách thực hiện chuyển đổi giữa hai loại dữ liệu. Vì ví dụ,
Chọn kèo bóng đá c1 (42 là float8);
Chuyển đổi hằng số nguyên 42 thành kèo bóng đá c1float8bằng cách gọi kèo bóng đá c1 chức năng được chỉ định trước đó, trong trường hợp nàyfloat8 (int4). (Nếu không có phù hợp kèo bóng đá c1 đã được xác định, chuyển đổi không thành công.)
Hai kèo bóng đá c1 có thểcủng cố nhị phân,, có nghĩa là việc chuyển đổi có thể được thực hiện"miễn phí"Không gọi bất kỳ chức năng nào. Cái này yêu cầu các giá trị tương ứng sử dụng cùng kèo bóng đá c1 bên trong đại diện. Chẳng hạn, các loạiTextvàVarcharCó thể ép buộc nhị phân cả hai cách. Sự ép buộc nhị phân không nhất thiết là một mối quan hệ đối xứng. Ví dụ: kèo bóng đá c1 từXMLđếnTextcó thể được thực hiện miễn phí trong hiện tại thực hiện, nhưng hướng ngược lại yêu cầu kèo bóng đá c1 chức năng Thực hiện ít nhất kèo bóng đá c1 kiểm tra cú pháp. (Hai loại là nhị phân Có thể cưỡng lại cả hai cách cũng được gọi là tương thích nhị phân.)
Bạn có thể định nghĩa một kèo bóng đá c1 làChuyển đổi I/O. dàn kèo bóng đá c1bằng cách sử dụngvới inoutCú pháp. Một kèo bóng đá c1 chuyển đổi I/O được thực hiện bằng cách gọi chức năng đầu ra của kiểu dữ liệu nguồn và chuyển chuỗi kết quả cho Chức năng đầu vào của kiểu dữ liệu đích. Trong nhiều trường hợp phổ biến, điều này tính năng tránh sự cần thiết phải viết một chức năng đúc riêng cho chuyển đổi. Một kèo bóng đá c1 chuyển đổi I/O hoạt động giống như một kèo bóng đá c1 dựa trên chức năng; Chỉ triển khai là khác nhau.
Theo mặc định, một kèo bóng đá c1 chỉ có thể được gọi bằng một kèo bóng đá c1 rõ ràng yêu cầu, đó là một điều rõ ràngcast (xAStypename)hoặcx::TypenameXây dựng.
Nếu kèo bóng đá c1 được đánh dấulàm bài tậpSau đó, nó có thể được gọi ngầm khi gán kèo bóng đá c1 giá trị cho a Cột của kiểu dữ liệu đích. Ví dụ: giả sử rằngfoo.f1là kèo bóng đá c1 cột loạiText, sau đó:
Chèn vào các giá trị foo (f1) (42);
sẽ được phép nếu kèo bóng đá c1 từ loạiSố nguyênđể kèo bóng đá c1Textđược đánh dấulàm bài tập, nếu không thì không. (Chúng tôi thường sử dụng thuật ngữkèo bóng đá c1 gánđến Mô tả loại kèo bóng đá c1 này.)
Nếu kèo bóng đá c1 được đánh dấunhư ngầmSau đó nó có thể được gọi kèo bóng đá c1 cách ngầm trong bất kỳ bối cảnh nào, cho dù là nhiệm vụ hoặc nội bộ trong kèo bóng đá c1 biểu thức. (Chúng ta thường sử dụng thuật ngữkèo bóng đá c1 ngầmĐể mô tả loại kèo bóng đá c1 này.) Ví dụ, xem xét truy vấn này:
Chọn 2 + 4.0;
Trình phân tích cú pháp ban đầu đánh dấu các hằng số là kèo bóng đá c1Số nguyênvàSốtương ứng. Không cóSố nguyên + Sốtoán tử trong danh mục hệ thống, nhưng có kèo bóng đá c1Số + Sốtoán tử. Do đó, truy vấn sẽ thành công nếu kèo bóng đá c1 từSố nguyênđếnSốcó sẵn và được đánh dấunhư ẩn ửng- trên thực tế nó là. Trình phân tích cú pháp sẽ áp dụng các kèo bóng đá c1 ngầm và giải quyết truy vấn như thể nó đã được viết
Chọn Cast (2 là Số) + 4.0;
Bây giờ, các danh mục cũng cung cấp một kèo bóng đá c1 từSốđếnSố nguyên. Nếu kèo bóng đá c1 đó được đánh dấunhư ngầm- mà nó không - sau đó trình phân tích cú pháp sẽ phải đối mặt với việc lựa chọn giữa Giải thích và thay thế của việc đúcSốhằng số thànhSố nguyênvà Áp dụngSố nguyên + Số nguyêntoán tử. Thiếu bất kỳ kiến thức nào về lựa chọn nào thích, nó sẽ từ bỏ và Tuyên bố truy vấn mơ hồ. Thực tế là chỉ một trong hai Các kèo bóng đá c1 là ngầm là cách mà chúng tôi dạy cho trình phân tích cú pháp thích Độ phân giải của một hỗn hợpSố-and-Số nguyênBiểu thức asSố; Không có kiến thức tích hợp về điều đó.
Thật khôn ngoan khi bảo thủ về việc đánh dấu các kèo bóng đá c1 là tiềm ẩn. Một sự dư thừa của các đường dẫn đúc ngầm có thể gây raPostgreSQLĐể chọn gây ngạc nhiên giải thích các lệnh hoặc không thể giải quyết các lệnh tại Tất cả chỉ vì có nhiều cách giải thích có thể. Một điều tốt quy tắc của ngón tay cái là làm cho một kèo bóng đá c1 hoàn toàn không thể mời được chỉ cho Các phép biến đổi bảo tồn thông tin giữa các loại trong cùng loại loại chung. Ví dụ: kèo bóng đá c1 từINT2đếnINT4Có thể một cách hợp lý ngầm, nhưng kèo bóng đá c1 từfloat8đếnINT4Có lẽ chỉ nên được chuyển nhượng. Các kèo bóng đá c1 phân loại loại chéo, chẳng hạn nhưTextđếnINT4, được thực hiện tốt nhất chỉ rõ ràng.
Lưu ý:Đôi khi nó cần thiết cho khả năng sử dụng hoặc Lý do tuân thủ tiêu chuẩn để cung cấp nhiều kèo bóng đá c1 ngầm Trong số một tập hợp các loại, dẫn đến sự mơ hồ không thể tránh được Như trên. Người phân tích cú pháp có một heuristic dự phòng dựa trênkèo bóng đá c1 danh mụcvàƯu tiên kèo bóng đá c1Điều đó có thể giúp cung cấp hành vi mong muốn trong những trường hợp như vậy. Nhìn thấykèo bóng đá việt nam:Để biết thêm thông tin.
Để có thể tạo một kèo bóng đá c1, bạn phải sở hữu nguồn hoặc Kiểu dữ liệu đích và cósử dụngĐặc quyền trên loại khác. Để tạo ra một dàn kèo bóng đá c1 có thể sử dụng được, bạn phải Superuser. (Hạn chế này được thực hiện bởi vì một sai lầm Chuyển đổi đúc nhị phân có thể dễ dàng làm hỏng máy chủ.)
Tên của kiểu dữ liệu nguồn của dàn kèo bóng đá c1.
Tên của kiểu dữ liệu đích của dàn kèo bóng đá c1.
Hàm được sử dụng để thực hiện kèo bóng đá c1. Tên chức năng có thể là Lược đồ-đủ điều kiện. Nếu không, chức năng sẽ được tra cứu Đường dẫn tìm kiếm lược đồ. Kiểu dữ liệu kết quả của chức năng phải khớp với loại mục tiêu của dàn kèo bóng đá c1. Các đối số của nó được thảo luận dưới đây.
cho biết loại nguồn có thể sử dụng được đối với mục tiêu Loại, vì vậy không có chức năng nào được yêu cầu để thực hiện kèo bóng đá c1.
cho biết kèo bóng đá c1 là kèo bóng đá c1 chuyển đổi I/O, được thực hiện bởi gọi chức năng đầu ra của kiểu dữ liệu nguồn và truyền chuỗi kết quả cho chức năng đầu vào của dữ liệu đích kiểu.
cho biết rằng các kèo bóng đá c1 có thể được gọi một cách ngầm trong bài tập bối cảnh.
chỉ ra rằng các kèo bóng đá c1 có thể được gọi ngầm trong bất kỳ bối cảnh.
Các chức năng triển khai kèo bóng đá c1 có thể có một đến ba đối số. Loại đối số đầu tiên phải giống hệt hoặc có thể sử dụng được nhị phân từ loại nguồn của kèo bóng đá c1. Đối số thứ hai, nếu có, phải được loạiSố nguyên; nó nhận được kèo bóng đá c1 công cụ sửa đổi được liên kết với kèo bóng đá c1 đích hoặc-1Nếu không có. Đối số thứ ba, nếu có, Phải là kèo bóng đá c1Boolean; nó nhận đượcTrueNếu kèo bóng đá c1 là một kèo bóng đá c1 rõ ràng,SaiNếu không. (Thật kỳ lạ, tiêu chuẩn SQL đòi hỏi các hành vi khác nhau cho các kèo bóng đá c1 rõ ràng và ngầm trong một số trường hợp. Đối số này được cung cấp cho các chức năng phải thực hiện kèo bóng đá c1 như vậy. Bạn không nên thiết kế dữ liệu của riêng mình các loại sao cho điều này quan trọng.)
Loại trả về của hàm đúc phải giống hệt với hoặc nhị phân-coercable với loại mục tiêu của kèo bóng đá c1.
Thông thường, một kèo bóng đá c1 phải có dữ liệu nguồn và mục tiêu khác nhau loại. Tuy nhiên, nó được phép khai báo một kèo bóng đá c1 với Các loại nguồn và mục tiêu nếu nó có chức năng triển khai Cast với nhiều hơn một đối số. Điều này được sử dụng để đại diện Các chức năng ép buộc chiều dài cụ thể trong các danh mục hệ thống. Các Hàm được đặt tên được sử dụng để ép buộc một giá trị của loại thành loại giá trị sửa đổi được đưa ra bởi đối số thứ hai của nó.
Khi một kèo bóng đá c1 có các loại nguồn và mục tiêu khác nhau và một chức năng Điều đó mất nhiều hơn một đối số, nó hỗ trợ chuyển đổi từ một Nhập vào người khác và áp dụng ép buộc chiều dài trong một bước duy nhất. Khi không có mục nào như vậy, việc ép buộc với một loại sử dụng Trình sửa đổi loại bao gồm hai bước đúc, một để chuyển đổi giữa dữ liệu các loại và thứ hai để áp dụng công cụ sửa đổi.
Một kèo bóng đá c1 đến hoặc từ một loại miền hiện không có hiệu lực. Đúc đến hoặc từ một miền sử dụng các phôi được liên kết với nó cơ bản kiểu.
sử dụngDrop CastĐể loại bỏ Các kèo bóng đá c1 do người dùng xác định.
Hãy nhớ rằng nếu bạn muốn có thể chuyển đổi các loại Bạn cần khai báo các phôi theo cả hai cách kèo bóng đá c1 cách rõ ràng.
Thông thường không cần thiết phải tạo phôi giữa Các kèo bóng đá c1 do người dùng xác định và các kèo bóng đá c1 chuỗi tiêu chuẩn (Text, Varcharvàchar (n), cũng như Các kèo bóng đá c1 do người dùng xác định được xác định là trong danh mục chuỗi).PostgreSQLCung cấp I/O tự động Chuyển đổi kèo bóng đá c1 cho điều đó. Các loại tự động cho các loại chuỗi là được coi là kèo bóng đá c1 gán, trong khi các phôi tự động từ chuỗi Các loại chỉ rõ ràng. Bạn có thể ghi đè hành vi này bằng cách tuyên bố dàn kèo bóng đá c1 của riêng bạn để thay thế một kèo bóng đá c1 tự động, nhưng thường Lý do duy nhất để làm như vậy là nếu bạn muốn chuyển đổi hơn dễ dàng được gọi hơn so với chỉ phân công tiêu chuẩn hoặc chỉ rõ ràng cài đặt. Một lý do có thể khác là bạn muốn chuyển đổi thành hoạt động khác với hàm I/O của loại; Nhưng đó là đủ ngạc nhiên rằng bạn nên suy nghĩ hai lần về việc liệu có Đó là một ý kiến hay. (Một số lượng nhỏ các loại tích hợp thực sự có những hành vi khác nhau để chuyển đổi, chủ yếu là do các yêu cầu của tiêu chuẩn SQL.)
trướcPostgreSQL7.3, mỗi chức năng có cùng tên với kiểu dữ liệu, đã trả về dữ liệu đó loại và lấy một đối số thuộc loại khác là tự động chức năng đúc. Công ước này đã bị bỏ rơi khi đối mặt với giới thiệu các lược đồ và có thể đại diện Các phôi nhị phân trong các danh mục hệ thống. Các kèo bóng đá c1 tích hợp các chức năng vẫn tuân theo sơ đồ đặt tên này, nhưng chúng phải hiển thị dưới dạng kèo bóng đá c1 trong danh mục hệ thốngPG_CAST
Trong khi không bắt buộc, bạn nên tiếp tục Thực hiện theo quy ước cũ này về các chức năng thực hiện kèo bóng đá c1 sau kiểu dữ liệu đích. Nhiều người dùng đã quen với việc có thể Các kiểu dữ liệu đúc bằng cách sử dụng ký hiệu kiểu chức năng, đó làtypename(X). Ký hiệu này trên thực tế không có gì hơn một cuộc gọi của chức năng thực hiện kèo bóng đá c1; nó không được coi là đặc biệt như một dàn kèo bóng đá c1. Nếu các chức năng chuyển đổi của bạn không được đặt tên để hỗ trợ điều này Công ước sau đó bạn sẽ có người dùng ngạc nhiên. TừPostgreSQLCho phép quá tải cùng kèo bóng đá c1 Tên chức năng với các loại đối số khác nhau, không có khó khăn trong việc có nhiều chức năng chuyển đổi từ các loại khác nhau Tất cả sử dụng tên của loại đích.
Lưu ý:Thực ra đoạn trước là một Đơn giản quá mức: Có hai trường hợp trong đó một chức năng gọi Cấu trúc sẽ được coi là một yêu cầu kèo bóng đá c1 mà không cần khớp nó đến một chức năng thực tế. Nếu một chức năng gọitên(x) không không chính xác khớp với bất kỳ chức năng hiện có nào, nhưngtênlà tên của kiểu dữ liệu vàPG_CASTCung cấp kèo bóng đá c1 chất kết hợp nhị phân đúc theo loại này từ loạix, thì cuộc gọi sẽ được hiểu là một kèo bóng đá c1 nhị phân. Ngoại lệ này được thực hiện để Các kèo bóng đá c1 có thể sử dụng nhị phân có thể được gọi bằng cú pháp chức năng, thậm chí mặc dù họ thiếu bất kỳ chức năng. Tương tự như vậy, nếu không cópg_castmục nhập nhưng kèo bóng đá c1 sẽ đến hoặc từ một Loại chuỗi, cuộc gọi sẽ được hiểu là kèo bóng đá c1 chuyển đổi I/O. Ngoại lệ này cho phép các kèo bóng đá c1 chuyển đổi I/O được gọi bằng cách sử dụng Cú pháp chức năng.
Lưu ý:Ngoài ra còn có ngoại lệ cho ngoại lệ: I/O Các phôi chuyển đổi từ các loại tổng hợp sang loại chuỗi không thể được gọi bằng cách sử dụng cú pháp chức năng, nhưng phải được viết rõ ràng Cú pháp đúc (kèo bóng đá c1 trong haiCasthoặc::ký hiệu). Ngoại lệ này đã được thêm vào vì sau Việc giới thiệu các kèo bóng đá c1 chuyển đổi I/O được cung cấp tự động, nó đã được tìm thấy quá dễ dàng để vô tình gọi một kèo bóng đá c1 như vậy khi một tham chiếu chức năng hoặc cột được dự định.
Để tạo kèo bóng đá c1 bài tập được chọn từ loạiBigintđể kèo bóng đá c1INT4Sử dụng chức năngINT4 (BIGINT):
25449_25522
(kèo bóng đá c1 này đã được xác định trước trong hệ thống.)