如何在存储过程中定义变量类型

时间:2012-02-06 08:38:24

标签: postgresql

我是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 而不是整数。这是真的吗?或者我只能在变量声明中使用该systax?

由于

1 个答案:

答案 0 :(得分:1)

当你创建表,列,域,视图等时,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。