如何在mysql存储过程insert中判断insert是否成功

查看: 8802|回复: 10
如何判断存储过程执行成功
论坛徽章:0
我怎么样能在前一个存储过程执行成功的前提下再执行下一个存储过程?
求职 : 认证徽章论坛徽章:18
你可以创建一个包,在里面定义个bollean变量!然后在你要执行的存储过程结束的地方设置其为true,在你调用下一个存储过程的时候,首先判断是否为true,是的话再执行下一个存储过程!
论坛徽章:1
存儲過程如果執行失敗﹐你就執行不下去了。
如果你能執行下去﹐就是成功。
求职 : 认证徽章论坛徽章:18
楼上的说法有问题!
下面这个明显是执行不成功!但当我捕获了异常后,还是执行完了,没有失败提示!
[php]SQL& select a from t1;
------------------------------
create or replace procedure test_proc as
&&x varchar2(1);
& &select a into x from t1;
& &dbms_output.put_line(x);
WHEN OTHERS THEN
& && &y :=
& && &if y then
& & & & dbms_output.put_line('failure') ;
论坛徽章:7
其實通過一個out的變量來處理會更好.
create or replace procedure&&test1 (v_type1 varchar2,v_type2 out varchar2) is
& && && &begin
& && && && &insert into table1 select * from table 2;
& && && && &
& && && &exception
& && && && & when ohters then
& && && && && & v_type2='F';
& && && && && &
论坛徽章:0
我是写在shell里的,一个接一个的执行存储过程,所以执行失败了他会接着执行下一个。但这是我所不想得到的结果~
招聘 : 论坛徽章:473
最初由 nmgzw 发布
[B]楼上的说法有问题!
下面这个明显是执行不成功!但当我捕获了异常后,还是执行完了,没有失败提示!
[php]SQL& select a from t1;
------------------------------
create or replace procedure test_proc as
&&x varchar2(1);
& &select a into x from t1;
& &dbms_output.put_line(x);
WHEN OTHERS THEN
& && &y :=
& && &if y then
& & & & dbms_output.put_line('failure') ;
[/php] [/B]
不是对不对的问题,而是你俩对“存储过程成功执行”的理解不一样
招聘 : 论坛徽章:473
最初由 zouxin2000 发布
[B]我是写在shell里的,一个接一个的执行存储过程,所以执行失败了他会接着执行下一个。但这是我所不想得到的结果~ [/B]
那你就用ruili_zeng的方法,以后的存储过程都接收v_type2参数
如果v_type2 为失败,那就不执行当前存储过程
论坛徽章:27
过程抛出例外.
sqlplus脚本中用WHENEVER SQLERROR EXIT语句终止执行
如果从shell脚本中调用sql*plus, 还可以在exit后加出口码返回给shell, 由shell决定是否执行后续的操作.
论坛徽章:0
不用过程,用函数,成功时返回1,失败时返回0或-1之类的。
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号存储过程,insert之后取得当前的自增Id
DELIMITER // -- 更改结束符号
CREATE PROCEDURE insert_sharemessage(in messageContent varchar(250), &in pubDate varchar(20),in address varchar(50),in userId int,out messageId int) BEGIN &insert into sharemessage(messageContent,pubDate,address,userId)
&&VALUES(messageContent,pubDate,address,userId); &select LAST_INSERT_ID() into messageId; END; // DELIMITER ;
这是我写的一个存储过程,插入数据之后取出当前的自增id,但是为什么取出之后是下个的自增id呢,我在数据库表中直接写插入语句,在last_insert_id就是当前的自增id,为什么?
你测试的时候只有一个表么?
LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID返回表b中的Id值。本帖子已过去太久远了,不再提供回复功能。一个插入记录前做存在判断的存储过程,请问 - Sql Server当前位置:& &&&一个插入记录前做存在判断的存储过程,请问一个插入记录前做存在判断的存储过程,请问&&网友分享于:&&浏览:105次一个插入记录前做存在判断的存储过程,请教!向一个表里插入一条记录,
如果该记录ID已经存在
否则,插入记录------解决方案--------------------create table 表(id int)
create proc up_test(@id int,@cz int output)
if not exists(select 1 from 表 where )
insert into 表
select @id
declare @cz int
exec up_test 1,@cz output
------解决方案--------------------create trigger insert_trg
instead of 表
if exists(select * from 表 where id=inserted.id)
'存在 '
insert into 表 select .....
------解决方案--------------------Create Proc Test
If Exists(Select * From 表名 WHere )
Insert Into 表名 .......
Declare @cz int,@ID int
Select @ID=1,@cz=0
EXEC @cz=test,@ID
Select @cz
------解决方案--------------------写错了,应该是这样
Declare @cz int,@ID int
Select @ID=1,@cz=0
EXEC @cz=test @ID
Select @cz
------解决方案--------------------用触发器是最明智的选择~存储过程稍显麻烦~
create trigger tri_comp
instead of [table]
if exists(select * from [table] where id=inserted.id)
--判断是否有相同ID
'该记录已存在 '
insert into [table] select * from inserted
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有

我要回帖

更多关于 mysql存储过程insert 的文章

 

随机推荐