Как определить типы переменных в хранимых процедурах - PullRequest
0 голосов
/ 06 февраля 2012

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

table.column%TYPE...
mydesc item.description%type := 'extra large size pizza';
/*
 In the example, the declaration of mydesc will result in a variable suitable for
 handling the description column in the item table of our sample database. If that
 column were defined as char(64) when we declared the variable, but later changed to 
 a char(80), the code using mydesc would still work, and PostgreSQL would create the  
 correct type of variable.
 */

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

 CREATE FUNCTION insertcountrypage(pcountryid countrypage.countryid%type, pcountryinformation character varying)
 RETURNS integer AS 
   $$body$$

     ...

   $$body$$

LANGUAGE 'plsql'

см. Я определяю тип как countrypage.countryid% type вместо integer .Это правда?Или я могу использовать этот систакс только в объявлении переменной?

Спасибо

1 Ответ

1 голос
/ 06 февраля 2012

Когда вы создаете таблицы, столбцы, домены, представления и т. Д., Postgres создает их типы, определенные в таблице pg_type, afaik, но вы не можете ссылаться на них, однако вы можете использовать domains (которыетакже основные типы)

CREATE DOMAIN test_domain
  AS character varying(70);

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

скажему вас есть домен, который различается символами (64), если вы хотите изменить его длину на 80, вы должны выполнить что-то вроде

UPDATE pg_type set typtypmod = 84 WHERE typname = 'test_domain';

Домены могут быть легко переданы как параметры функции или типы столбцов таблицы.

Это недокументированное и, возможно, небезопасное , хотя и работает.Счетчик начинается с -3, поэтому вам нужно указать свой номер + 4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...