|
5.4. 函数函数调用的参数类型是用下面的步骤来解析的. 函数参数类型解析
例子Example 5-4. 阶乘函数参数类型解析 在 pg_proc 系统表里只定义了一个 int4fac 函数.所以下面的查询自动将 int2 参数转换成 int4 : tgl=> SELECT int4fac(int2 '4'); int4fac --------- 24 (1 row) 实际上它被分析器转换成: tgl=> SELECT int4fac(int4(int2 '4')); int4fac --------- 24 (1 row) Example 5-5. 子字串函数类型解析 在 pg_proc 里定义了两个 substr 函数. 但是,其中只有一个使用两个参数,参数类型分别是 text 和 int4 . 如果调用时其中一个字符串常量的类型不明确,其类型直接与唯一的候选函数匹配: tgl=> SELECT substr('1234', 3); substr -------- 34 (1 row) 如果该字符串声明为类型 varchar , 就像大多数从表中取来的数据一样,分析器将试着将其转换成 text ∶ tgl=> SELECT substr(varchar '1234', 3); substr -------- 34 (1 row) 被分析器转换后变成: tgl=> SELECT substr(text(varchar '1234'), 3); substr -------- 34 (1 row)
而且,如果以 int4 为参数调用函数,分析器将试图将其转换成 text : tgl=> SELECT substr(1234, 3); substr -------- 34 (1 row) 实际上是这样执行的 tgl=> SELECT substr(text(1234), 3); substr -------- 34 (1 row) 这样可以运行是因为在系统表里面有一个转换函数 text(int4). |