Trafodion 使用describe statement查看返回类型

Trafodion中,SQL语句的每个字段的输出都是有对应的返回类型的,是字符类型,还是数值类型,是日期类型还是时间戳类型,不仅如此,输出字段的长度、精度等信息都是可以拿到的。

我们通过"describe statement"语句可以获取到这些信息,具体方法为,

prepare s from select xxx;
describe statement s;

举个简单的例子,我们创建一个有很多类型字段的表,然后查询这张表,使用"describe statement"来查看返回信息,

drop table test_desc_statement;
create table test_desc_statement(a int, 
b bigint, 
c char(10), 
d varchar(10), 
e numeric(10,5), 
f decimal(10,5),
g date,
h timestamp,
i timestamp(6),
j blob,
k clob);

返回的信息如下,

---Describing the OUTPUT entries---
[1] NAME "A", HEADING ""
    TYPE 4, FS 132, LEN 4, OCTLEN 4, CHARSET 0
    PREC 0, LPREC 0, SCALE 0, DTCODE 0, NULL 1, MODE 4, IDX 1, ORDPOS 0
    CAT "TRAFODION", SCH "SEABASE", TABLE "TEST_DESC_STATEMENT"
[2] NAME "B", HEADING ""
    TYPE -402, FS 134, LEN 8, OCTLEN 8, CHARSET 0
    PREC 0, LPREC 0, SCALE 0, DTCODE 0, NULL 1, MODE 4, IDX 2, ORDPOS 0
    CAT "TRAFODION", SCH "SEABASE", TABLE "TEST_DESC_STATEMENT"
[3] NAME "C", HEADING ""
    TYPE 1, FS 0, LEN 10, OCTLEN 10, CHARSET 15
    PREC 0, LPREC 0, SCALE 15, DTCODE 0, NULL 1, MODE 4, IDX 3, ORDPOS 0
    CAT "TRAFODION", SCH "SEABASE", TABLE "TEST_DESC_STATEMENT"
[4] NAME "D", HEADING ""
    TYPE -601, FS 64, LEN 10, OCTLEN 10, CHARSET 15
    PREC 0, LPREC 0, SCALE 15, DTCODE 0, NULL 1, MODE 4, IDX 4, ORDPOS 0
    CAT "TRAFODION", SCH "SEABASE", TABLE "TEST_DESC_STATEMENT"
[5] NAME "E", HEADING ""
    TYPE 2, FS 134, LEN 8, OCTLEN 8, CHARSET 0
    PREC 10, LPREC 0, SCALE 5, DTCODE 0, NULL 1, MODE 4, IDX 5, ORDPOS 0
    CAT "TRAFODION", SCH "SEABASE", TABLE "TEST_DESC_STATEMENT"
[6] NAME "F", HEADING ""
    TYPE 3, FS 152, LEN 10, OCTLEN 10, CHARSET 0
    PREC 10, LPREC 0, SCALE 5, DTCODE 0, NULL 1, MODE 4, IDX 6, ORDPOS 0
    CAT "TRAFODION", SCH "SEABASE", TABLE "TEST_DESC_STATEMENT"
[7] NAME "G", HEADING ""
    TYPE 9, FS 192, LEN 4, OCTLEN 4, CHARSET 0
    PREC 0, LPREC 0, SCALE 0, DTCODE 1, NULL 1, MODE 4, IDX 7, ORDPOS 0
    CAT "TRAFODION", SCH "SEABASE", TABLE "TEST_DESC_STATEMENT"
[8] NAME "H", HEADING ""
    TYPE 9, FS 192, LEN 11, OCTLEN 11, CHARSET 0
    PREC 6, LPREC 0, SCALE 0, DTCODE 3, NULL 1, MODE 4, IDX 8, ORDPOS 0
    CAT "TRAFODION", SCH "SEABASE", TABLE "TEST_DESC_STATEMENT"
[9] NAME "I", HEADING ""
    TYPE 9, FS 192, LEN 11, OCTLEN 11, CHARSET 0
    PREC 6, LPREC 0, SCALE 0, DTCODE 3, NULL 1, MODE 4, IDX 9, ORDPOS 0
    CAT "TRAFODION", SCH "SEABASE", TABLE "TEST_DESC_STATEMENT"
[10] NAME "J", HEADING ""
    TYPE -602, FS 160, LEN 1024, OCTLEN 1024, CHARSET 1
    PREC 0, LPREC 0, SCALE 1, DTCODE 0, NULL 1, MODE 4, IDX 10, ORDPOS 0
    CAT "", SCH "", TABLE ""
[11] NAME "K", HEADING ""
    TYPE -603, FS 161, LEN 1024, OCTLEN 1024, CHARSET 15
    PREC 0, LPREC 0, SCALE 15, DTCODE 0, NULL 1, MODE 4, IDX 11, ORDPOS 0
    CAT "", SCH "", TABLE ""

上面输出结果中的TYPE即代表返回类型,它是一个数值,我们从以下代码注释里面可以找到对应的TYPE代表什么类型。

enum SQLTYPE_CODE {
    /* CHAR/CHARACTER */
    SQLTYPECODE_CHAR     = 1,

    /* NUMERIC */
    SQLTYPECODE_NUMERIC  = 2,
    SQLTYPECODE_NUMERIC_UNSIGNED = -201,

    /* DECIMAL */
    SQLTYPECODE_DECIMAL  = 3,

    /* DECIMAL Tandem extensions */
    SQLTYPECODE_DECIMAL_UNSIGNED       = -301,
    SQLTYPECODE_DECIMAL_LARGE          = -302,
    SQLTYPECODE_DECIMAL_LARGE_UNSIGNED = -303,

    /* INTEGER/INT */
    SQLTYPECODE_INTEGER  = 4,

    /* INTEGER/INT Tandem extensions */
    SQLTYPECODE_INTEGER_UNSIGNED       = -401,
    SQLTYPECODE_LARGEINT               = -402,
    SQLTYPECODE_LARGEINT_UNSIGNED      = -405,

    /* TINYINT */
    SQLTYPECODE_TINYINT                = -403,
    SQLTYPECODE_TINYINT_UNSIGNED       = -404,

    /* SMALLINT */
    SQLTYPECODE_SMALLINT = 5,

    /* SMALLINT Tandem extensions */
    SQLTYPECODE_SMALLINT_UNSIGNED      = -502,

    /*  Bit Precision int, Tandem extensions */
    SQLTYPECODE_BPINT_UNSIGNED         = -503,

    /* IEEE FLOAT (precision,scale)
     *    Internally converted to REAL or DOUBLE depending on
     *                 precision
     */
    SQLTYPECODE_IEEE_FLOAT    = 6,

    /* IEEE REAL
     *    Tandem note: precision == 22
     */
    SQLTYPECODE_IEEE_REAL     = 7,

    /* IEEE DOUBLE PRECISION
     *    Tandem note: precision == 54
     */
    SQLTYPECODE_IEEE_DOUBLE   = 8,

    /* Tandem FLOAT (precision,scale)
     *    Internally converted to REAL or DOUBLE depending on
     *                 precision
     */
    SQLTYPECODE_TDM_FLOAT    = -411,
    SQLTYPECODE_FLOAT = SQLTYPECODE_TDM_FLOAT,

    /* Tandem REAL
     *    Tandem note: precision == 22
     */
    SQLTYPECODE_TDM_REAL     = -412,
    SQLTYPECODE_REAL = SQLTYPECODE_TDM_REAL,

    /* Tandem DOUBLE PRECISION
     *    Tandem note: precision == 54
     */
    SQLTYPECODE_TDM_DOUBLE   = -413,
    SQLTYPECODE_DOUBLE = SQLTYPECODE_TDM_DOUBLE,

    /* DATE,TIME,TIMESTAMP */
    SQLTYPECODE_DATETIME = 9,

    /* TIMESTAMP */
    SQLTYPECODE_INTERVAL = 10,

    /* no ANSI value 11 */

    /* VARCHAR/CHARACTER VARYING */
    SQLTYPECODE_VARCHAR  = 12,

    /* SQL/MP stype VARCHAR with length prefix: Tandem Extension */
    SQLTYPECODE_VARCHAR_WITH_LENGTH = -601,

    /* LONG VARCHAR/ODBC CHARACTER VARYING */
    SQLTYPECODE_VARCHAR_LONG  = -1,		/* ## NEGATIVE??? */

    /* BLOB TYPE */
    SQLTYPECODE_BLOB  = -602,
    SQLTYPECODE_CLOB  = -603,

    /* BOOLEAN TYPE */
    SQLTYPECODE_BOOLEAN = -701,

    /* ARRAY TYPE */
    SQLTYPECODE_ARRAY = -702,

    /* ROW TYPE */
    SQLTYPECODE_ROW = -703,

    /* BINARY TYPE */
    SQLTYPECODE_BINARY = 60,

    /* VARBINARY TYPE */
    SQLTYPECODE_VARBINARY = 61,

    /* no ANSI value 13 */

    /* BIT */
    SQLTYPECODE_BIT      = 14,  /* not supported */

    /* BIT VARYING */
    SQLTYPECODE_BITVAR   = 15   /* not supported */
};
发布了352 篇原创文章 · 获赞 400 · 访问量 73万+

猜你喜欢

转载自blog.csdn.net/Post_Yuan/article/details/94397402