Полиморфный тип и полиморфный тип с приведением. В чем разница?

В PostgreSQL полиморфный тип – это специальный тип данных, который может хранить значения различных типов данных. Полиморфный тип позволяет объявить переменную, которая может принимать значения разных типов.

Полиморфный тип в PostgreSQL представлен оператором %TYPE, который позволяет создать полиморфную переменную с типом, которые определен в определении колонки или переменной. Например, у нас есть таблица users, где колонка name имеет тип varchar, и мы хотим создать переменную, которая будет иметь такой же тип, как name:

DECLARE
  var_name users.name%TYPE;

Это позволяет сделать код более гибким и устойчивым к изменениям структуры таблицы.

Полиморфный тип с приведением в PostgreSQL работает подобным образом, но с дополнительной возможностью явно указать тип данных, который должен принимать переменная. Это используется в случаях, когда нужно создать переменную определенного типа, но необходимо ее инициализировать значением другого типа.

Для объявления полиморфной переменной с приведением типа, можно использовать оператор ::, с указанием желаемого типа данных. Например, у нас есть переменная input_value типа any, и мы хотим привести ее к типу integer:

DECLARE
  var_value integer;
BEGIN
  var_value := input_value::integer;

Таким образом, разница между полиморфным типом и полиморфным типом с приведением заключается в возможности явно указать желаемый тип данных при объявлении переменной. Полиморфный тип позволяет создать переменную с типом, определенным в структуре данных, а полиморфный тип с приведением позволяет создать переменную конкретного типа, но с возможностью инициализировать ее значением другого типа.