db2创建PROCEDURE成功,但是运行db2 call TESTCASE() 会报错

lxs_huntingjob 2011-09-29 03:46:49
创建PROCEDURE成功,但是运行db2 call TESTCASE() 会报错,哪位大侠知道是什么原因吗
以前是console 里面的显示:
$ db2 -td@ -vf /mnt/hgfs/Win2Ubuntu-2/put_line/put_line_aix/testcase.sqp
CREATE PROCEDURE TESTCASE() RESULT SETS 0 LANGUAGE SQL
L_TESTCASE:
BEGIN NOT ATOMIC
DECLARE V_DEPTNO SMALLINT;
DECLARE V_DEPTNAME VARCHAR(20);
DECLARE V_DIVISION VARCHAR(20);
-- FOR DEBUG
DECLARE V_NUM SMALLINT DEFAULT 0;
DECLARE V_MSG1 VARCHAR(4000);
DECLARE V_MSG2 VARCHAR(1);
-- END
-- SAMPLE1
SET V_NUM=2000;
SET V_MSG1='debugging start';
VALUES(PUT_LINE(V_NUM,V_MSG1)) INTO V_MSG2;
-- SAMPLE2
VALUES(PUT_LINE(SMALLINT(2),'this is no2')) INTO V_MSG2;
-- SAMPLE3
VALUES(PUT_LINE(3)) INTO V_MSG2;
-- SAMPEL4
VALUES(PUT_LINE('##number4##')) INTO V_MSG2;
-- SAMPLE5
SET V_NUM = 0;
FOR V_C1_REC AS C1 CURSOR FOR
SELECT DEPTNUMB, DEPTNAME, DIVISION
FROM ORG ORDER BY DEPTNUMB DESC
DO
SET V_DEPTNO = v_C1_REC.DEPTNUMB;
SET V_DEPTNAME = v_C1_REC.DEPTNAME;
SET V_DIVISION = v_C1_REC.DIVISION;
SET V_NUM = V_NUM + 1;
SET V_MSG1 ='DEPTNO=' || CHAR(V_DEPTNO)||','
||'DEPTNAME='||V_DEPTNAME||','
||'DIVISION='||V_DIVISION;
VALUES(PUT_LINE(V_NUM,V_MSG1)) INTO V_MSG2;
END FOR;
VALUES(PUT_LINE(32000,'end of the program')) INTO V_MSG2;

END L_TESTCASE

DB20000I The SQL command completed successfully.

$ db2 call testcase()
sh: Syntax error: "(" unexpected
...全文
393 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxs_huntingjob 2011-10-14
  • 打赏
  • 举报
回复
int i ;
SoftwKLC 2011-10-05
  • 打赏
  • 举报
回复
接上你模式名就可以了,例如:db2 call SCHEMA.TESTCASE()
lxs_huntingjob 2011-09-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhaojianmi1 的回复:]
你在什么环境下编译c
[/Quote]
准备在Ubuntu下,据说 Eclipse 下面可以生成C文件的dll
zhaojianmi1 2011-09-29
  • 打赏
  • 举报
回复
你在什么环境下编译c
lxs_huntingjob 2011-09-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhaojianmi1 的回复:]
function "put_line" 这个写对了吗
[/Quote]
我一开始用的例子里自带的put_line这个dll,应该不行,应该先在自己的机子上编译 put_line.c ,然后把生成的put_line拷贝到function文件夹下面。我检查了一下 put_line.c 这个文件,发现这个c文件里面没有 main()函数,所以无法编译,请问你知道是怎么编译的吗
zhaojianmi1 2011-09-29
  • 打赏
  • 举报
回复
已对可以采用的解决方案进行排序,以便与消息
说明中提供的原因相匹配:

1. 可能会涉及多个间接级别,最终导致此原因码
。例如,可以找到例程实体 X,它需要共享库
Y(也可以找到),而共享库 Y
需要另一个共享库 Z,但是无法找到共享库
Z。应重新链接例程库,或者用户应验证
LIBPATH(Unix)或
PATH(INTEL)中是否提供了所有相关库。使用
db2set 命令来将 LIBPATH
更新为包括库所在的路径。例如,db2set
db2libpath=/db2test/db2inst1/sqll

2. 使用受支持的库。

3. 如果确定内存不足,则可能需要更改系统配置
,为 DB2 腾出更多的可用内存。
zhaojianmi1 2011-09-29
  • 打赏
  • 举报
回复
5

没有足够的内存来装入包含该函数的库,或不能
解析一个或多个符号。此原因码指示下列情况之一


1. 可能尚未解析一个或多个符号。例程库可能依
赖于这样一个共享库:使用在 LIBPATH
环境变量(对于基于 UNIX 的系统)和 PATH
环境变量(对于 INTEL
系统)中指定的目录的并置无法找到该共享库


2. 例程有一个 64 位库,而 64 位库在 32 位 DB2
实例中是不受支持的;或者,例程具有一个 64
位 DB2 实例中的 32 位库或 DLL,而该 32 位库或
DLL 与例程定义不兼容。

3. 没有足够的内存来装入包含该函数的库。
zhaojianmi1 2011-09-29
  • 打赏
  • 举报
回复
function "put_line" 这个写对了吗
lxs_huntingjob 2011-09-29
  • 打赏
  • 举报
回复
还有我已经把 put_line 这个dll 放到了 $home/db2inst2/sqllib/function/ 下面
lxs_huntingjob 2011-09-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhaojianmi1 的回复:]
db2 "call testcase()"
[/Quote]
正解啊,看来是字符的问题!
后来我到 db2inst2 下执行 db2 call testcase() 提示如下,不知道是不是堆设置的问题
$ db2 "call testcase()"
SQL0444N Routine "PUT_LINE" (specific name "SQL110928225919900") is
implemented with code in library or path ".../sqllib/function/put_line",
function "put_line" which cannot be accessed. Reason code: "5".
SQLSTATE=42724
zhaojianmi1 2011-09-29
  • 打赏
  • 举报
回复
db2 "call testcase()"

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧