雪花ODBC和变量数据类型

雪花ODBC和变量数据类型,odbc,snowflake-cloud-data-platform,variant,Odbc,Snowflake Cloud Data Platform,Variant,使用适用于Windows的odbctest和Snowflake 64位ODBC驱动程序: 使用此DDL在snowflake中创建了一个表: 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) N

使用适用于Windows的odbctest和Snowflake 64位ODBC驱动程序:

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

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 )
然后尝试准备insert语句: 尝试使用SQL:

INSERT INTO "SFDEST"."QAUSER"."BT14726" 
("VARCHAR_10_COL",
 "VARCHAR_4000_COL",
 "CHAR_10_COL",
 "ROWID",
 "CLOB_COL")
VALUES ( ?, ?, ?, ?, ?)  
但返回了此错误:

准备目标insert语句失败。SQL编译错误: 表达式类型与列数据类型不匹配,应为变量,但 获取列clobu COL的VARCHAR1

这是odbc跟踪的相关部分:

sqdrsvc 3dfc-52bc输入SQLPrepare HSTMT 0x000000435C961620 UCHAR*0x000000435D262720[140]插入到SFDEST.QAUSER.BT14726 VARCHAR\u 10\u COL中, VARCHAR\u 4000\u列、CHAR\u 10\u列、ROWID、CLOB\u列值?, ?, ?, ?, ? SDWORD 140

sqdrsvc 3dfc-52bc退出SQLPrepare,返回代码为 -1 SQL\u错误 HSTMT 0x000000435C961620 UCHAR*0x000000435D262720[140]插入到SFDEST.QAUSER.BT14726 VARCHAR\u 10\u COL中, VARCHAR\u 4000\u列、CHAR\u 10\u列、ROWID、CLOB\u列值?, ?, ?, ?, ? SDWORD 140 DIAG[22000]SQL编译错误:表达式类型与列数据类型不匹配,应为变量,但得到 COL 2023柱的VARCHAR1


如果您有一个格式化为有效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(?))  

本文描述了除了传递到INSERT语句中的实际绑定变量之外的所有内容。插入的CLOB_COL值是多少?如果是字符串形式的JSON,则需要先使用PARSE_JSON函数将其设置为JSON。谢谢您的建议。我们的开发人员说ODBC不需要在准备之前绑定变量。所以这仍然是一个悬而未决的问题。我认为问题归结为变量的值,这些变量正在被绑定。你能在上面的问题中加上这些例子吗。。。您是否仍会收到与此更改相同的错误?如果不同,您能否提供新的错误消息?