0

我有丰富的 T-SQL 背景,一直在为客户熟悉 IBM Netezza 设备。我在 Windows 上使用过 Netezza 模拟器 7.1,运行过 DDL、DML、Control 和 Transaction 语句。此外,我还注册了 Bluemix 云上的 DashDB 试用版。

问题:

我在 DashDB 的 Aginity 工作台和 Bluemix 上的 RunSQL 上都面临语法障碍

这些使我无法编写超出简单 DDL、DML 语句的更复杂的 SQL。我对此感到非常沮丧。

  1. 变量声明

T-SQL:

DECLARE @I AS INTEGER;

我试过这个

DECLARE VARIABLE i INTEGER ; 

错误 [42601] [IBM][DB2/LINUXX8664] SQL0104N 在“DECLARE i”之后发现了意外的标记“INTEGER”。预期的标记可能包括:“END-OF-STATEMENT”。

DECLARE i AS INTEGER;

错误 [42601] [IBM][DB2/LINUXX8664] SQL0104N 在“DECLARE i AS”之后发现了意外的标记“INTEGER”。预期的标记可能包括:“END-OF-STATEMENT”。

DECLARE i INTEGER;

错误 [42601] [IBM][DB2/LINUXX8664] SQL0104N 在“DECLARE i”之后发现了意外的标记“INTEGER”。预期的标记可能包括:“END-OF-STATEMENT”。

这些都不起作用......我只是感到困惑!

  1. 这个非常简单的存储过程示例无法为我编译

代码:

CREATEPROCEDURE DASH6441.FOO (IN ORDER_DETAIL_CODE_IN VARCHAR(16), IN SALES_STAFF_CODE_IN INTEGER)
LANGUAGESQL
BEGIN
SELECT*FROM DASH6441.EMP;
END;

错误:

错误 [42601] [IBM][DB2/LINUXX8664] SQL0104N 在“ECT * FROM DASH6441.”之后发现了意外的令牌“EMP”。预期的标记可能包括:“END”。

问题:

  • 有什么我想念的吗?

  • 像 T-SQL 一样,编译器期望的 SQL 脚本或初步指令(例如USING <db_name>在 T-SQL 中)是否有任何结构?我怀疑它,但只是问

  • 如果您可以与所有这些元素共享变量声明、存储过程或通用脚本的骨架,您知道这些元素可以为您成功编译吗?也许我可以从中启发自己

我现在正面临着这个语法问题的阻碍。

4

2 回答 2

0

对于创建过程问题,问题在于玛格丽特描述的模棱两可的语句分隔符。只需在 END 语句后使用例如分隔符“@”,并在执行语句之前在 RunSQL 页面中设置此字符。

关于变量声明的问题: RunSQL 允许运行单个 SQL 语句。变量声明作为独立 SQL 无效,但仅在例程的上下文中有效,例如在您创建的存储过程的 BEGIN..END 块中。例如,请参阅此处的示例:https ://www.ibm.com/support/knowledgecenter/SS6NHC/com.ibm.swg.im.dashdb.sql.ref.doc/doc/r0004239.html

于 2016-09-01T08:49:45.633 回答
0

您可能需要将 runSQL 中的默认语句分隔符更改为 ; 以外的其他内容。字符,以便正确处理程序。

有关在 dashDB 中使用 SQL PL 的更多信息,请参见此处

于 2016-08-31T16:21:48.647 回答