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 */
};