【问题标题】:table creation procedure DB2表创建过程 DB2
【发布时间】:2020-12-22 06:29:09
【问题描述】:

我已经创建了一个类似下面的过程。我有点了解 PL SQL,但我是 DB2 新手。 当我执行以下过程时,出现错误提示使用保留关键字结尾无效。

CREATE PROCEDURE test()
  LANGUAGE SQL
  DYNAMIC RESULT SETS 1
  WLM ENVIRONMENT FOR DEBUG MODE #TTCOM
  ASUTIME NO LIMIT

BEGIN
  DECLARE SQLSTATE CHAR(5) DEFAULT '00000';
  DECLARE SQLCODE INTEGER DEFAULT 0;
  DECLARE TABLE_DOES_NOT_EXIST_STATE CONDITION FOR SQLSTATE '42704';
  DECLARE tname VARCHAR(5000);
 
  DECLARE CONTINUE HANDLER FOR TABLE_DOES_NOT_EXIST_STATE BEGIN
  END;
   
FOR i AS SELECT tablename FROM EWPS.tablelist
DO
tname = 'create table '+i.tablename+'_2112 like '+i.tablename+';' ;
tname1 = 'insert into '+i.tablename+'_2112 (select * from '+i.tablename+');';
call DBMS_OUTPUT.PUT(tname)
execute immediate tname;
execute immediate tname;
--set tname=i.tablename
END FOR;
--RETURN tname ;
--COMMIT;

END test;

非常感谢任何帮助

【问题讨论】:

  • Db2 的版本和平台是什么?如果是 LUW,是否启用了 Oracle 兼容模式?确切的错误信息是什么?什么是语句终止符?

标签: db2


【解决方案1】:

您需要两个不同的终止符 - 一个用于过程中的语句,一个用于 CREATE PPROCEDURE 本身。

查看此命令以设置终止符

--#SET TERMINATOR @

也检查一下这个question & answers

【讨论】:

  • 我应该在程序中的什么地方使用终结符?对不起,如果我问一个基本问题
  • 所有“;”除了您的示例/问题中的最后一个是过程中语句的终止符 - 最后一个是 CREATE 语句本身的终止符 - 这些需要不同。希望对你有帮助
  • 是这样吗? CREATE PROCEDURE test() BEGIN DECLARE tname VARCHAR(5000); DECLARE CONTINUE HANDLER FOR TABLE_DOES_NOT_EXIST_STATE BEGIN END; FOR i AS SELECT tablename FROM EWPS.tablelist DO tname = 'create table '+i.tablename+'_2112 like '+i.tablename+';' ; tname1 = '插入'+i.tablename+'_2112 (select * from '+i.tablename+');';调用 DBMS_OUTPUT.PUT(tname) 立即执行 tname;立即执行 tname;结束;结尾;结束测试@;
猜你喜欢
  • 1970-01-01
  • 2015-12-11
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-14
相关资源
最近更新 更多