Sybase:使用“;”时 WHILE 语句的行为非常奇怪
Sybase: Very strange behaviour on WHILE statement when using ';'
我在sybase中使用WHILE遇到了一个很奇怪的问题。
为什么执行此代码:
BEGIN
WHILE 'toto' = 'titi'
BEGIN
DECLARE @val int
SELECT * FROM randomtable1
SELECT * FROM randomtable2
END
END
不是这个?
BEGIN
DECLARE @val INT;
WHILE 'toto' = 'titi'
BEGIN
DECLARE @val int
SELECT * FROM randomtable1
SELECT * FROM randomtable2
END
END
事实上我注意到我使用';'的那一刻在我的脚本中,在 WHILE 语句之内或之外,Sybase returns 在 WHILE 之后的 BEGIN 附近出现语法错误。
我反复阅读了 sybase 文档并进行了搜索,但我不明白这里发生了什么。
我给出的示例是重现我遇到的错误的简化,但这不是我要尝试执行的真实脚本。
请注意,我正在实习并且是第一次接触 Sybase。我害怕我错过了一些明显的东西。
有什么想法吗?
提前致谢
您似乎在混合使用 Watcom SQL(原始的本地 SQL Anywhere 方言)和 Transact-SQL(来自 SYbase ASE,[=27 也部分支持=] 任何地方)。您不能在同一个 SQL 批次中混合使用两者。
Watcom 使用“;”作为语句分隔符,Transact-SQL 在看到 ';'
时会抛出错误
Transact-SQL 使用 BEGIN-END 进行语句分组,就像您使用 WHILE 所做的那样。但是,在Watcom中,BEGIN-END并不对语句进行分组,而是异常处理的一个单位。
在 Watcom 中,使用 'WHILE ... LOOP ... END LOOP;' 语法
我在sybase中使用WHILE遇到了一个很奇怪的问题。 为什么执行此代码:
BEGIN
WHILE 'toto' = 'titi'
BEGIN
DECLARE @val int
SELECT * FROM randomtable1
SELECT * FROM randomtable2
END
END
不是这个?
BEGIN
DECLARE @val INT;
WHILE 'toto' = 'titi'
BEGIN
DECLARE @val int
SELECT * FROM randomtable1
SELECT * FROM randomtable2
END
END
事实上我注意到我使用';'的那一刻在我的脚本中,在 WHILE 语句之内或之外,Sybase returns 在 WHILE 之后的 BEGIN 附近出现语法错误。 我反复阅读了 sybase 文档并进行了搜索,但我不明白这里发生了什么。
我给出的示例是重现我遇到的错误的简化,但这不是我要尝试执行的真实脚本。
请注意,我正在实习并且是第一次接触 Sybase。我害怕我错过了一些明显的东西。
有什么想法吗?
提前致谢
您似乎在混合使用 Watcom SQL(原始的本地 SQL Anywhere 方言)和 Transact-SQL(来自 SYbase ASE,[=27 也部分支持=] 任何地方)。您不能在同一个 SQL 批次中混合使用两者。
Watcom 使用“;”作为语句分隔符,Transact-SQL 在看到 ';'
时会抛出错误
Transact-SQL 使用 BEGIN-END 进行语句分组,就像您使用 WHILE 所做的那样。但是,在Watcom中,BEGIN-END并不对语句进行分组,而是异常处理的一个单位。
在 Watcom 中,使用 'WHILE ... LOOP ... END LOOP;' 语法