简单存储过程里的问题

[复制链接]
查看11 | 回复6 | 2010-3-17 01:01:04 | 显示全部楼层 |阅读模式
最近才开始用 IBM Data Studio来写SQL 存储过程,在用DB2安装目录下提供的例子来试验的时候,cardinality函数那行总过不去,过来请教各位达达
--
--1. Create an array type to implement a stack
--
CREATE TYPE int_stack AS INTEGER ARRAY[] ;
--
--Create a sql stored procedure to to push a value into the stack.
--
CREATE PROCEDURE push(INOUT s int_stack, IN element INTEGER)
BEGIN
IF (s is NULL) THEN

SET s[1] = element;
ELSE

SET s[cardinality(s) + 1] = element;
END IF;
END;

在SET s[cardinality(s) + 1] = element; 这一行,中括号下面有红色波浪纹[],左边有错误标志,详请麻烦大家看error01, error02图片,谢谢!
另,如果我把赋值的式子左右交换一下就不出错误提示: SETelement = s[cardinality(s) + 1];
为什么呀?难道是语法方面的问题?谢谢!
[ 本帖最后由 hbsbjerry 于 2010-5-28 15:15 编辑 ]
回复

使用道具 举报

千问 | 2010-3-17 01:01:04 | 显示全部楼层
仔细看了一下DB2存储过程的基础详解,“定义一个数组类型的变量,需要先在数据库中创建该类型,然后在过程或应用程序中声明它”
我先手动连上数据库,执行了“CREATE TYPE int_stack AS INTEGER ARRAY[] ”,在数据库中创建了该类型。
然后再在DATA STUDIO的这个SQL/PL编辑窗口里写PROCEDURE部分,就没问题了,deploy也OK。
可为什么不能在这个存储过程里面写CREATE TYPE int_stack AS INTEGER ARRAY[] 呢,奇怪?有知道的达人欢迎继续回答,谢谢
[ 本帖最后由 hbsbjerry 于 2010-5-28 16:43 编辑 ]
回复

使用道具 举报

千问 | 2010-3-17 01:01:04 | 显示全部楼层
存储过程里面不能定义数组,只能引用。
回复

使用道具 举报

千问 | 2010-3-17 01:01:04 | 显示全部楼层
受不了,IBM 的SQL PL了。。
回复

使用道具 举报

千问 | 2010-3-17 01:01:04 | 显示全部楼层
看一看。!
回复

使用道具 举报

千问 | 2010-3-17 01:01:04 | 显示全部楼层
呵呵,我们项目最近也在用IDA。
呵呵。楼主,你可以用游标实现的啊
回复

使用道具 举报

千问 | 2010-3-17 01:01:04 | 显示全部楼层
你要先定义这种类型,才能引用,语法上是这样讲的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行