关于调用存储过程的异常问题
我在JAVA中用存储过程出现如下错误:
[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]超出了存储过程、函数、触发器或视图的最大嵌套层数(最大层数为 32)。
代码大致如下:
String SQL="{call MOVER_MOULD_APPEND(7,0,1,'Mover','aaaaaaaaa','aaaaaaaaaaa',0,0,'null','2006-06-03 8:23:02')}"
...
Operator.prepareCall(SQL);
try
{
int number=Operator.getCallableStatement().executeUpdate();
if(number<=0)
{
event.write("append()数据追加失败:"+SQL);
inserted=false;
}
else
{
event.write("append()数据追加成功:"+SQL);
inserted=true;
}
}
catch (java.sql.SQLException se)
{
event.write(se.getMessage());
}
finally
{
Operator.Close();
}
这个问题困扰我一天了。原因在哪,如何解决?
问题点数:30、回复次数:23Top
1 楼zlp321002(Life Is Good,Let's Shine)回复于 2006-06-03 10:02:24 得分 10
--在数据库测试存储过程,有报告错误吗?Java 不会.Top
2 楼moverfan()回复于 2006-06-03 10:07:10 得分 0
在查询分析器里运行以下语句,错误是一样的。
{call MOVER_MOULD_APPEND(7,0,1,'Mover','aaaaaaaaa','aaaaaaaaaaa',0,0,'null','2006-06-03 8:23:02')}
这是创建存储过程的语句,你可以试一下,谢谢。
CREATE PROCEDURE MOVER_MOULD_APPEND @id int,@classid int,@userid int,@author varchar(255),@caption varchar(255),@content text,@$default int,@recommend int,@picture varchar(255),@date varchar(255) AS INSERT INTO MOVER_MOULD VALUES(@id,@classid,@userid,@author,@caption,@content,@$default,@recommend,@picture,@date)Top
3 楼moverfan()回复于 2006-06-03 10:10:59 得分 0
我看到过相关的贴子,曾有人说是触发器的问题,可是我已经去掉选项中的“递归触发器”,怎么还有这种现象呢,我初次接触存储过程,有些问题问得可能比较弱智,呵呵,请指点,感激不尽!Top
4 楼zlp321002(Life Is Good,Let's Shine)回复于 2006-06-03 10:23:36 得分 0
--先禁用下你的触发器,再测试下.
alter table MOVER_MOULD DISABLE TRIGGER 触发器名称Top
5 楼moverfan()回复于 2006-06-03 10:31:14 得分 0
我没有创建任何触发器呀Top
6 楼zlp321002(Life Is Good,Let's Shine)回复于 2006-06-03 10:38:51 得分 0
--你的存储过程没有问题.也不可能出现递归调用错误的.Top
7 楼moverfan()回复于 2006-06-03 10:44:28 得分 0
可是偏偏就存在这种错误,唉,这会是哪方面的原因呢?Top
8 楼moverfan()回复于 2006-06-03 10:45:37 得分 0
以下是在查询分析器中产生的错误报告:
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
服务器: 消息 217,级别 16,状态 1,过程 MOVER_MOULD_APPEND,行 2
超出了存储过程、函数、触发器或视图的最大嵌套层数(最大层数为 32)。
Top
9 楼zlp321002(Life Is Good,Let's Shine)回复于 2006-06-03 10:48:28 得分 0
--存储过程没有循环,怎么可能影响到这么多行呢??
--如果没有触发器,你测试存储过程的时候,只能影响到一行数据的....Top
10 楼paoluo(一天到晚游泳的鱼)回复于 2006-06-03 10:48:56 得分 10
CREATE PROCEDURE MOVER_MOULD_APPEND @id int,@classid int,@userid int,@author varchar(255),@caption varchar(255),@content text,@$default int,@recommend int,@picture varchar(255),@date varchar(255) AS INSERT INTO MOVER_MOULD VALUES(@id,@classid,@userid,@author,@caption,@content,@$default,@recommend,@picture,@date)
存儲過程只有這一句代碼??
你先禁用觸發器試試看看。Top
11 楼cosio()回复于 2006-06-03 10:52:22 得分 10
把存储过程的代码贴出来看看Top
12 楼cosio()回复于 2006-06-03 10:53:34 得分 0
应该是where的条件没有写死,所以影响到多行!Top
13 楼moverfan()回复于 2006-06-03 11:01:55 得分 0
To zlp321002(龙卷风2006) :
没有触发器的.
To paoluo(一天到晚游泳的鱼):
只有这一行
To cosio:
贴出来了啊Top
14 楼moverfan()回复于 2006-06-03 11:04:02 得分 0
To paoluo(一天到晚游泳的鱼)
如何禁用?
引用龙卷风:
--先禁用下你的触发器,再测试下.
alter table MOVER_MOULD DISABLE TRIGGER 触发器名称
触发器名称是什么?
Top
15 楼moverfan()回复于 2006-06-03 11:07:43 得分 0
To cosio:
新插入一行应该不需要条件吧?Top
16 楼paoluo(一天到晚游泳的鱼)回复于 2006-06-03 11:09:00 得分 0
企業管理器中,選中你的表,點右鍵,選擇“所有工作”->“管理觸發程序”,在出來的對話框中,選擇“名稱”後的下拉菜單,看看有沒有東西,那裡就是你的觸發器名稱。Top
17 楼moverfan()回复于 2006-06-03 11:20:28 得分 0
里面啥也没有,只有一个新建项Top
18 楼moverfan()回复于 2006-06-03 11:29:11 得分 0
搞定了,对不住大家了。原因是:我手工创建了一个MOVER_MOULD_APPEND存储过程,里面还包含了一句调用存储过程的语句。所以导致死循环。为感谢大家的帮助,我要散分了。
Top
19 楼paoluo(一天到晚游泳的鱼)回复于 2006-06-03 11:32:43 得分 0
暈Top
20 楼moverfan()回复于 2006-06-03 11:36:14 得分 0
我想给每人5分怎么给不了?Top
21 楼moverfan()回复于 2006-06-03 11:38:00 得分 0
我不是有意的~初次接触易范低级错误,请谅解。Top
22 楼moverfan()回复于 2006-06-03 11:43:08 得分 0
公平起见,每人发10分,嘿嘿Top
23 楼lshlfyf()回复于 2006-06-04 09:14:56 得分 0
对Top




