DB2匿名SQL阻止的有效语法是什么?

时间:2016-03-06 15:58:21

标签: sql db2 procedure toad zos

我有DB2 v9.7客户端驱动程序来访问安装在Z / OS环境中的DB2实例。我试图在Toad for DB2 4.7的帮助下编写并执行匿名过程。不幸的是,互联网上给定的示例代码都没有克服语法错误。无论我尝试什么,即使是非常简单的,也不能正常工作。我很好奇是否存在Toad的执行模式或者我在尝试中遗漏的东西。以下是我收到的尝试和语法错误:

DECLARE
  somechr VARCHAR2(255);
BEGIN
  somechr:='some value';
END;

上面的示例抛出了这些错误:

  • DB2数据库错误:错误[42601] [IBM] [DB2] SQL0104N意外的令牌" VARCHAR2"发现在""之后。预期的代币可能包括:" TABLE STATEMENT ,.滚动不敏感的敏感"。 SQLSTATE = 42601
  • DB2数据库错误:错误[42601] [IBM] [DB2] SQL0104N意外的令牌" SOMECHR"发现在""之后。预期的代币可能包括:" DECLARE"。 SQLSTATE = 42601
  • DB2数据库错误:错误[42601] [IBM] [DB2] SQL0104N意外的令牌" END-OF-STATEMENT"发现在""之后。预期的代币可能包括:" DECLARE"。 SQLSTATE = 42601

当我改变某些价值时,最后一个消失了。到某些价值'; -

一些示例使用以下语法:

BEGIN
  DECLARE somechr VARCHAR2(255);--
  somechr:='some value';
END;

但是,此语法也会引发异常:

  • DB2数据库错误:错误[42601] [IBM] [DB2] SQL0104N意外的令牌" SOMECHR"发现在""之后。预期的代币可能包括:" SECTION"。 SQLSTATE = 42601

最后我试过这个:

BEGIN
  DECLARE SECTION BEGIN
    somechr VARCHAR2(255);--
  END;
  somechr:='some value';--
END;

得到了这些:

  • DB2数据库错误:错误[42612] [IBM] [DB2] SQL0084N EXECUTE IMMEDIATE语句包含SELECT或VALUES语句。 SQLSTATE = 42612
  • DB2数据库错误:错误[42601] [IBM] [DB2] SQL0104N意外的令牌" SOMECHR"发现在""之后。预期的代币可能包括:"获取SQL SAVEPOINT HOLD FREE ASSOCIATE"。 SQLSTATE = 42601

除了这些尝试之外,有些人还指出使用' - #SET TERMINATOR @'在代码的开头,它对上面的所有例子都没有帮助。我通过更改&#39 ;;'符号' @'对于所有组合(有或没有' - #SET TERMINATOR @'语句),但是错误似乎并没有消失。

1 个答案:

答案 0 :(得分:1)

我使用的是DB2 LUW,而不是z / OS。也就是说,你可以试试这个:

BEGIN
    DECLARE V_SOMECHR NVARCHAR(255);

    SET V_SOMECHR = 'some value';
END

我在DB2 LUW中的经验是声明必须在BEGIN块内,并且必须先出现,但是没有标题声明它是DECLARE部分。您可以在最后一次声明后立即放置程序代码。不确定z / OS中是否会出现这种情况。