数据类型转换

下列 GBase 8s ESQL/C 示例检索 DECIMAL 列的平均值,其自身是 DECIMAL 值。然而,将 DECIMAL 列的平均值放置其内的主变量不要求具有那种数据类型。
EXEC SQL SELECT avg (total_price) into :avg_price
        FROM items;
不展示在前面的 GBase 8s ESQL/C 代码示例中接收的变量 avg_price 的声明。该声明可为任一下列定义:
int avg_price;
        double avg_price;
        char avg_price[16];
        dec_t avg_price; /* typedef of decimal number structure */

注释语句中使用的每一主变量的数据类型,并使用该语句传到数据库服务器。数据库服务器尽量将列数据转换为接收的变量使用的形式。允许几乎任何转换,尽管某些转换会导致精度损失。依赖于接收的主变量的数据类型,前面的示例的结果会不同,如下表所示。

数据类型 结果
FLOAT 数据库服务器将十进制结果转换为 FLOAT,可能截断某些小数位。如果十进制的数量超过 FLOAT 格式的最大数量,则返回一个错误。
INTEGER 数据库服务器将结果转换为 INTEGER,如有必要会截断小数位。如果被转换的数值的整数部分与接收的变量不适合,则发生错误。
CHARACTER 数据库服务器将十进制值转换为 CHARACTER 字符串。如果对于接收的变量来说该字符串太长,则截断它。将 SQLWARN 的第二个字段设置为 W,且 SQLSTATE 变量中的值为 01004。