从IBM i(AS400)提取数据的SQL查询 - 如何分离多个查询

时间:2015-03-30 15:46:51

标签: ssrs-2008 ibm-midrange db2-400

AS400中用于在同一SQL中运行多个语句的查询分隔符是什么。我们在MS SQL中有GO语句类似我虽然在AS400中使用分号来分隔多个查询,但由于某种原因它不起作用。

  

我实际上在此查询中有多个步骤

     
      
  1. Crete a GLOBAL TEMPORARY TABLE

  2.   
  3. 将数据插入此全局临时表

  4.   
  5. 通过更新此全局临时表上的数据的一些逻辑   加入其他表格。

  6.   
  7. 从此全局临时表

  8. 中选择值   

当我使用分号分隔每个步骤时,我得到错误,分号未被识别为查询分隔符...以下是查询的片段

DECLARE GLOBAL TEMPORARY TABLE SESSION.FinalRes
(
       SLSTRTY  CHAR(4)
       ,SLSMAN CHAR(5)
       ,CSTNAM CHAR(30)
       ,CustN  CHAR(16)
       ,ADR1 CHAR(30)       
       ,ADR4 CHAR(30)
       ,"STATE" CHAR(2)
       ,ZIPCD CHAR(12)
       ,DTEADDED DATE
       ,SalesCM DECIMAL(22,7)
       ,SalesYTD DECIMAL(22,7)
       ,SalesPY DECIMAL(22,7)
       ,EXTGPCM DECIMAL(22,7)
       ,EXTGPYTD DECIMAL(22,7)
       ,EXTGPPY DECIMAL(22,7)
       ,GMYTD DECIMAL(22,7)
       ,GMCM DECIMAL(22,7)
       ,GMPY DECIMAL(22,7)
       ,SalesPYM DECIMAL(22,7)
       ,SalesPYTD DECIMAL(22,7)
       ,STATIND CHAR(1)
       ,CSTCLS CHAR(3)
       ,CSort NUMERIC(5)
) WITH REPLACE ON COMMIT PRESERVE ROWS ;

SELET * from SESSION.FinalRes

这是我尝试执行查询时遇到的错误

  

SQL0104:令牌;无效。有效令牌:END-OF-STATEMENT。   原因。 。 。 。 。 :在令牌处检测到语法错误;。令牌;   不是有效的令牌。有效令牌的部分列表是   。此列表假定该语句是正确的   直到令牌。错误可能在语句中更早,但是   到目前为止,语句的语法似乎是有效的。复苏   。 。 。 :执行以下一项或多项操作并再次尝试请求:    - 验证令牌区域中的SQL语句;纠正声明。错误可能是缺少逗号或引号,它   可能是一个拼写错误的单词,或者它可能与顺序有关   条款。 - 如果错误标记是,请更正SQL   声明,因为它不以有效的子句结束。

2 个答案:

答案 0 :(得分:1)

DB2 for i SQL将为每次调用只准备和执行[EXECUTE IMMEDIATE]一个动态语句。虽然我没有机会使用该功能,但是从DB2 for IBM i 7.1开始,显然支持接受动态复合语句。复合语句中的语句分隔符[用于声明语句和程序语句]是分号。

http://www.itjungle.com/fhg/fhg011514-story02.html
DB2 for i中的动态复合语句
发布日期:2014年1月15日
作者:Michael Sansoterra

答案 1 :(得分:1)

可能已经考虑到这一点,但是您的'select'关键字缺少'c'。另请尝试在select语句后添加一个分号。