软件开发数据库

DB2存储过程使用序列报错

在存储过程里想取某个序列的下个值,存储过程编译报错,举个最简单的例子如下:CREATE SEQUENCE SAMPSEQUENCEAS BIGINTSTART WITH 1INCREMENT BY 1MAXVALUE 9223372036854775807MINVALUE 1NO CYCLENO ORDERCACHE 20;CREATE OR REPLACE PROCEDURE test (OUT recid INT)BEGIN &n...显示全部

在存储过程里想取某个序列的下个值,存储过程编译报错,举个最简单的例子如下:

CREATE SEQUENCE SAMPSEQUENCE

AS BIGINT

START WITH 1

INCREMENT BY 1

MAXVALUE 9223372036854775807

MINVALUE 1

NO CYCLE

NO ORDER

CACHE 20;

CREATE OR REPLACE PROCEDURE test (OUT recid INT)

BEGIN

  SET recid=nextval FOR SAMPSEQUENCE;

END;

先建一个测试序列,然后建一个测试存储过程,编译,报错。

SQL0104N  在 "BEGIN-OF-STATEMENT" 后面找到异常标记 "CREATE OR REPLACE PROCEDURE TES"。预期标记可能包括:""。  LINE NUMBER=6.  SQLSTATE=42601

序列是存在的,不管用values inot,还是set=(select..from..),都一样报错,db2版本是V10.5,平台是AIX,自己本机win7装了express也不能执行上面的测试语句,上面那段发给其他人可以执行无误,求解决方案。

收起
参与10

查看其它 3 个回答liaogzhu的回答

liaogzhuliaogzhu数据库开发工程师PCI

非常感谢各位的回答,问题已经解决,应该是sqldbx的一个bug导致,我之前使用的是toad工具直接可以编译,不用特别设置分隔符的,后来换了sqldbx,也是可以直接编译存储过程的,但只要编译到使用序列的值时,就会报错,包括触发器也是一样,我贴到toad去执行就可以了,一直以为是语法问题或者是数据库设置让我改了什么,没想到是工具的问题!

软件开发 · 2016-05-30
浏览1819

回答者

liaogzhu
数据库开发工程师PCI

liaogzhu 最近回答过的问题

回答状态

  • 发布时间:2016-05-30
  • 关注会员:3 人
  • 回答浏览:1819
  • X社区推广