【问题标题】:DB2 Query Token SMALLINT was not validDB2 查询令牌 SMALLINT 无效
【发布时间】: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
    );

感谢任何帮助。

如果我可以提供更多信息,请告诉我。

【问题讨论】:

标签: sql db2 db2-400


【解决方案1】:

我可能在这里找到了答案:https://stackoverflow.com/a/4451159/2272357

CREATE OR REPLACE VARIABLE variableName VARCHAR(50);
SET variableName = 'blah';
SELECT * FROM table WHERE column = variableName;
DROP VARIABLE variableName;

我还没有验证它是否成功运行。我相信这可能是一个本地问题。

【讨论】:

  • 在给定的示例中编写单独的 SET 语句很愚蠢;只需添加DEFAULT 子句以在CREATE 期间分配值。那么验证完成了吗?如果这成功了,那么接受这个答案似乎是合适的。?
猜你喜欢
  • 2010-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
相关资源
最近更新 更多