Snowflake ODBC和VARIANT数据类型

问题描述 投票:0回答:1

为Windows使用odbctest和Snowflake 64位ODBC驱动程序:

使用此DDL在雪花中创建了一个表:

CREATE TABLE "SFDEST"."QAUSER"."BT14726" 
("VARCHAR_10_COL" VARCHAR (10),
 "VARCHAR_4000_COL" VARCHAR (4000) ,
 "CHAR_10_COL" CHAR (10) ,
 "CLOB_COL" VARIANT,
 "ROWID" CHAR (18)  NOT NULL )

然后尝试准备插入语句:尝试执行SQL:

INSERT INTO "SFDEST"."QAUSER"."BT14726" 
("VARCHAR_10_COL",
 "VARCHAR_4000_COL",
 "CHAR_10_COL",
 "ROWID",
 "CLOB_COL")
VALUES ( ?, ?, ?, ?, ?)  

但返回此错误:

目标插入语句的准备失败。 SQL编译错误:表达式类型与列数据类型不匹配,期望为VARIANT但为列CLOB_COL获得了VARCHAR(1)

这是odbc跟踪的相关部分:

sqdrsvc 3dfc-52bc ENTER SQLPrepareHSTMT 0x000000435C961620UCHAR * 0x000000435D262720 [140]“插入” SFDEST“。” QAUSER“。” BT14726“(” VARCHAR_10_COL“,“ VARCHAR_4000_COL”,“ CHAR_10_COL”,“ ROWID”,“ CLOB_COL”)VALUES(?,?,?,?,?)”SDWORD 140

sqdrsvc 3dfc-52bc EXIT SQLPrepare,包含返回码-1(SQL_ERROR)HSTMT 0x000000435C961620UCHAR * 0x000000435D262720 [140]“插入” SFDEST“。” QAUSER“。” BT14726“(” VARCHAR_10_COL“,“ VARCHAR_4000_COL”,“ CHAR_10_COL”,“ ROWID”,“ CLOB_COL”)VALUES(?,?,?,?,?)”SDWORD 140DIAG [22000] SQL编译错误:表达式类型与列数据类型不匹配,期望为VARIANT但得到了CLOB_COL列的VARCHAR(1)(2023)

odbc snowflake-datawarehouse variant
1个回答
0
投票

如果您有一个格式为有效JSON Blob的字符串,则需要使用PARSE_JSON将其转换为实际的变体类型,以便SnowFlake能够识别出它。

大概是这样:

INSERT INTO "SFDEST"."QAUSER"."BT14726" 
("VARCHAR_10_COL",
 "VARCHAR_4000_COL",
 "CHAR_10_COL",
 "ROWID",
 "CLOB_COL")
VALUES ( ?, ?, ?, ?, PARSE_JSON(?))  
© www.soinside.com 2019 - 2024. All rights reserved.