【发布时间】:2016-04-17 07:24:52
【问题描述】:
论坛。
我正在使用 IBM System i 7.1 版。
我在以下合并语句的源代码中遇到问题,因此我将其复制到数据库客户端以利用“运行 SQL 脚本”功能。
我不想替换语句中@Variables 中的编码,而是声明局部变量,以便可以按原样测试语句。
添加了以下“声明和设置”行,我收到以下错误:
declare @groupId smallint
set @groupId = 99
declare @groupName varchar(40)
set @groupName = 'Sam'
声明@groupId smallint
SQL 状态:42601
供应商代码:-104
消息:[SQL0104] 令牌 SMALLINT 无效。有效令牌:DYNAMIC SENSITIVE ASENSITIVE INSENSITIVE。原因 。 . . . . : 语法 在令牌 SMALLINT 处检测到错误。令牌 SMALLINT 无效 令牌。有效令牌的部分列表是 DYNAMIC SENSITIVE ASENSITIVE 不敏感。此列表假定该陈述是正确的 令牌。错误可能在语句的前面,但语法 到目前为止,该声明似乎是有效的。恢复 。 . . : 执行以下一项或多项操作,然后再次尝试请求:-- 验证标记 SMALLINT 区域中的 SQL 语句。正确的 该声明。错误可能是缺少逗号或引号, 它可能是一个拼写错误的单词,或者它可能与 条款。 -- 如果错误标记是,更正SQL 语句,因为它没有以有效的子句结尾。处理结束,因为突出显示的语句没有完成>成功
我尝试在每行末尾添加分号以及开始和结束语句,但仍然没有成功。
下面是我要执行的整个语句:
declare @groupId smallint
set @groupId = 99
declare @groupName varchar(40)
set @groupName = 'Sam'
merge into database.table as t
using ( values( cast(@groupId as smallint)
,cast(@groupName as varchar(40))
))
as caz( group_id
, group_name
)
on t.group_id = caz.group_id
when matched then update
set t.group_name = caz.group_name
when not matched then
insert ( group_id
, group_name
)
values (caz.group_id
, caz.group_name
);
感谢任何帮助。
如果我可以提供更多信息,请告诉我。
【问题讨论】:
-
阅读compound statements in the manual的正确语法可能是个好主意。
-
不仅仅是语法。 docs also say this关于DECLARE VARIABLE:“Invocation这个语句只能嵌入到应用程序中。”