例如:PB 中的 SQLCODE 一样,还是其它!
不成功返加什么?
成功返回什么?
删除多少行返回什么?
12 个解决方案
#1
我一般用
show errors
show errors
#2
如果你想在存储过程中返回错误信息可以这样定义存储过程:
DECLARE
Person_no varchar (18);
Person_age integer;
Err_validation exception; --自定义错误,人员年龄小于18岁
BEGIN
SELECT age
INTO person_age
FROM person
WHERE person_no =person_no;
If person_age < 18 Then
RAISE err_validation; --使用自定义的错误标志
End If;
EXCEPTION
WHEN err_validation THEN
RAISE_APPLICATION_ERROR (20000,'当前人员年龄小于18周岁!'); --自定义
WHEN no_data_found THEN
RAISE_APPLICATION_ERROR (20001,'未发现此人员! '); --预定义
WHEN others THEN
RAISE_APPLICATION_ERROR (20002,'未知错误!'); --未定义错误
END;
/
在PB调用可以检测sqlca.sqldbcode的值
If sqlca.sqldbcode=20001 Then
..
ElseIf sqlca.sqldbcode=20002 Then
..
Else
..
End If
注意:ORACLE中自定义错误号范围为(-20000至-20999)!
DECLARE
Person_no varchar (18);
Person_age integer;
Err_validation exception; --自定义错误,人员年龄小于18岁
BEGIN
SELECT age
INTO person_age
FROM person
WHERE person_no =person_no;
If person_age < 18 Then
RAISE err_validation; --使用自定义的错误标志
End If;
EXCEPTION
WHEN err_validation THEN
RAISE_APPLICATION_ERROR (20000,'当前人员年龄小于18周岁!'); --自定义
WHEN no_data_found THEN
RAISE_APPLICATION_ERROR (20001,'未发现此人员! '); --预定义
WHEN others THEN
RAISE_APPLICATION_ERROR (20002,'未知错误!'); --未定义错误
END;
/
在PB调用可以检测sqlca.sqldbcode的值
If sqlca.sqldbcode=20001 Then
..
ElseIf sqlca.sqldbcode=20002 Then
..
Else
..
End If
注意:ORACLE中自定义错误号范围为(-20000至-20999)!
#3
谢谢!但我按你的方法做怎么不能正确执行。
我想知道有没有查看存储过程执行的工具,或怎么去做。
If sqlca.sqldbcode=20001 Then
..
ElseIf sqlca.sqldbcode=20002 Then
..
Else
..
End If
请问上面的..是否全是用户自定义的信息还是也有存储过程中定义的信息。如果我只显示用户定义的信息应该怎么办?
我执行时总是出现这样的情况:
本应该出现的提示却没有提示,而提示超出系统定义的参数范围。
我想知道有没有查看存储过程执行的工具,或怎么去做。
If sqlca.sqldbcode=20001 Then
..
ElseIf sqlca.sqldbcode=20002 Then
..
Else
..
End If
请问上面的..是否全是用户自定义的信息还是也有存储过程中定义的信息。如果我只显示用户定义的信息应该怎么办?
我执行时总是出现这样的情况:
本应该出现的提示却没有提示,而提示超出系统定义的参数范围。
#4
哦,我知道了,我给你的例子代码有点问题,自定义的错误号只能是负值!
看到我给你的提示吗(注意:ORACLE中自定义错误号范围为(-20000至-20999)!
)ORACLE自定义的错误号只能在这个范围!!!
调试存储过程的工具PL/SQL Developer,我手里有,不过5M多呢,怕你的信箱放不下
去www.51soft.com上面去看看一定有这个工具的下载
看到我给你的提示吗(注意:ORACLE中自定义错误号范围为(-20000至-20999)!
)ORACLE自定义的错误号只能在这个范围!!!
调试存储过程的工具PL/SQL Developer,我手里有,不过5M多呢,怕你的信箱放不下
去www.51soft.com上面去看看一定有这个工具的下载
#5
另外顺便问一下你有没有关于ORACLE 的帮助,能够很方便的查到函数存储过程等的用法,也可以介绍一下网站!
#6
create or replace procedure sp_del_user_privileges (p_function_id in varchar2,p_maker_id in varchar2,p_user_id varchar2) as
/*
** Procedure : sp_del_user_privileges
** Description : according to pass in reference to delete the relative record in
** user_privileges. at the same as insert reclative record into
** table profchg_log
**
**
** Parameters: p_function_id --the function id
** p_maker_id --deal with maker action of maker id
** p_user_iad --user id
**
** Result Set: delete the relative record and insert a new record into log table
**
** Return : none
**
** Modification History :
**
** Date By Change Description
************************************************************************************
** 2003-02-28 Alan li Creation
**
*/
--declare var
v_seq_no number(10); --auto produce
v_last_upd_date date;
v_function_desc varchar(50);
v_source_name varchar2(30); --client or account
v_count number(2);
my_exception exception;
Begin
--confirm if exist the current condition of record,no exist then return
select count(FUNCTION_ID) INTO v_count from USER_PRIVILEGES where FUNCTION_ID =p_function_id
and USER_ID ='gfhgfh';
if v_count is null or v_count = 0
then
RAISE my_exception; --I will make the current exception trigger
--return ;
end if;
EXCEPTION
when my_exception then
DBMS_OUTPUT.PUT_LINE('dfdsfdsfdsf');
RAISE_APPLICATION_ERROR (-20000,'test only');
return;
when no_data_found then
RAISE_APPLICATION_ERROR(-20001,'no data found');
return;
when others then
RAISE_APPLICATION_ERROR(-20002,'Others error info!');
return;
/*
--get relative info(group_id and source_name)
select SOURCE_NAME into v_source_name from USER_PRIVILEGES
where FUNCTION_ID = p_function_id and USER_ID = p_user_id;
--get function_desc
select nvl(FUNCTION_DESC,'') into v_function_desc from FUNCTIONS
where FUNCTION_ID = p_function_id;
--get sequence and system date
select UBS_SEQU_NO.NEXTVAL, sysdate into v_seq_no, v_last_upd_date from dual;
--record the user delete info : insert relative info into table profchg_log
insert into PROFCHG_LOG(ID,USER_ID,CHG_DESC,MAKER_ID,LAST_UPD_DT)
values(v_seq_no,p_user_id,'Delete function access:'||v_function_desc,
p_maker_id,v_last_upd_date);
-- according pass in reference to delete relative info
delete from USER_PRIVILEGES where FUNCTION_ID =p_function_id
and USER_ID =p_user_id;
return ;
*/
End;
在SQL PLUS 中执行:
execute sp_del_user_privileges('tadf','dsf','sdfsdf')
提示:
BEGIN sp_del_user_privileges('tadf','dsf','sdfsdf'); END;
*
ERROR 位于第 1 行:
ORA-20000: test only
ORA-06512: 在"CTONG.SP_DEL_USER_PRIVILEGES", line 48
ORA-06512: 在line 1
实际上是触发:RAISE_APPLICATION_ERROR (-20000,'test only'); 但是为什么会出现上面这样的提示:
另外存储过程可以有返回值吗?
/*
** Procedure : sp_del_user_privileges
** Description : according to pass in reference to delete the relative record in
** user_privileges. at the same as insert reclative record into
** table profchg_log
**
**
** Parameters: p_function_id --the function id
** p_maker_id --deal with maker action of maker id
** p_user_iad --user id
**
** Result Set: delete the relative record and insert a new record into log table
**
** Return : none
**
** Modification History :
**
** Date By Change Description
************************************************************************************
** 2003-02-28 Alan li Creation
**
*/
--declare var
v_seq_no number(10); --auto produce
v_last_upd_date date;
v_function_desc varchar(50);
v_source_name varchar2(30); --client or account
v_count number(2);
my_exception exception;
Begin
--confirm if exist the current condition of record,no exist then return
select count(FUNCTION_ID) INTO v_count from USER_PRIVILEGES where FUNCTION_ID =p_function_id
and USER_ID ='gfhgfh';
if v_count is null or v_count = 0
then
RAISE my_exception; --I will make the current exception trigger
--return ;
end if;
EXCEPTION
when my_exception then
DBMS_OUTPUT.PUT_LINE('dfdsfdsfdsf');
RAISE_APPLICATION_ERROR (-20000,'test only');
return;
when no_data_found then
RAISE_APPLICATION_ERROR(-20001,'no data found');
return;
when others then
RAISE_APPLICATION_ERROR(-20002,'Others error info!');
return;
/*
--get relative info(group_id and source_name)
select SOURCE_NAME into v_source_name from USER_PRIVILEGES
where FUNCTION_ID = p_function_id and USER_ID = p_user_id;
--get function_desc
select nvl(FUNCTION_DESC,'') into v_function_desc from FUNCTIONS
where FUNCTION_ID = p_function_id;
--get sequence and system date
select UBS_SEQU_NO.NEXTVAL, sysdate into v_seq_no, v_last_upd_date from dual;
--record the user delete info : insert relative info into table profchg_log
insert into PROFCHG_LOG(ID,USER_ID,CHG_DESC,MAKER_ID,LAST_UPD_DT)
values(v_seq_no,p_user_id,'Delete function access:'||v_function_desc,
p_maker_id,v_last_upd_date);
-- according pass in reference to delete relative info
delete from USER_PRIVILEGES where FUNCTION_ID =p_function_id
and USER_ID =p_user_id;
return ;
*/
End;
在SQL PLUS 中执行:
execute sp_del_user_privileges('tadf','dsf','sdfsdf')
提示:
BEGIN sp_del_user_privileges('tadf','dsf','sdfsdf'); END;
*
ERROR 位于第 1 行:
ORA-20000: test only
ORA-06512: 在"CTONG.SP_DEL_USER_PRIVILEGES", line 48
ORA-06512: 在line 1
实际上是触发:RAISE_APPLICATION_ERROR (-20000,'test only'); 但是为什么会出现上面这样的提示:
另外存储过程可以有返回值吗?
#7
DBMS_OUTPUT.PUT_LINE('dfdsfdsfdsf'); 为什么不能正常的显示出来!
#8
我现在的机器上没有安装ORACLE,所以没办法测试你说的错误:(
不过好象不能在存储过程、函数和触发器中使用PUT_LINE吧
至于存储过程的返回值问题,可以说存储过程和函数的区别就在这里,存储过程是没有返回值 的,但是可以使用OUT类型的参数来模拟返回值,但是强烈推荐在有返回值的时候使用函数,因为在DB2中带有OUT类型的存储过程在PB是无法接收的!!!
至于相关的网站,我常去的是www.oradb.net
不过好象不能在存储过程、函数和触发器中使用PUT_LINE吧
至于存储过程的返回值问题,可以说存储过程和函数的区别就在这里,存储过程是没有返回值 的,但是可以使用OUT类型的参数来模拟返回值,但是强烈推荐在有返回值的时候使用函数,因为在DB2中带有OUT类型的存储过程在PB是无法接收的!!!
至于相关的网站,我常去的是www.oradb.net
#9
to:lyzalan()
1. DBMS_OUTPUT.PUT_LINE('dfdsfdsfdsf'); 为什么不能正常的显示出来!
要显示,需要在SQL*PLUS中先执行set serveroutput on
2.ERROR 位于第 1 行:
ORA-20000: test only
ORA-06512: 在"CTONG.SP_DEL_USER_PRIVILEGES", line 48
ORA-06512: 在line 1
出现exception,Oracle就认为是出错,只不过你可以通过exception来捕获而已。
1. DBMS_OUTPUT.PUT_LINE('dfdsfdsfdsf'); 为什么不能正常的显示出来!
要显示,需要在SQL*PLUS中先执行set serveroutput on
2.ERROR 位于第 1 行:
ORA-20000: test only
ORA-06512: 在"CTONG.SP_DEL_USER_PRIVILEGES", line 48
ORA-06512: 在line 1
出现exception,Oracle就认为是出错,只不过你可以通过exception来捕获而已。
#10
To Lastdrop
你的方法我试过啦!可以显示,但我的实质问题没有解决,我定义的异常在PB 脚本中没有得到解决,不能正常返回异常处理的部分?
TO Alwaystar
可以在存储过程中使用DBMS_OUTPUT.PUT_LINE('DDFSDF')
但是在SQL PLUS 中执行时要用 set serveroutput on
才可以显示
你的方法我试过啦!可以显示,但我的实质问题没有解决,我定义的异常在PB 脚本中没有得到解决,不能正常返回异常处理的部分?
TO Alwaystar
可以在存储过程中使用DBMS_OUTPUT.PUT_LINE('DDFSDF')
但是在SQL PLUS 中执行时要用 set serveroutput on
才可以显示
#11
我定义的异常在PB 脚本中没有得到解决,不能正常返回异常处理的部分?
哪部分没有返回,还是都没有返回,能说的具体一些吗?
我只是觉得
EXCEPTION
when my_exception then
DBMS_OUTPUT.PUT_LINE('dfdsfdsfdsf');
RAISE_APPLICATION_ERROR (-20000,'test only');
在exception中又通过RAISE_APPLICATION_ERROR报异常的用法可能有问题,你直接将
DBMS_OUTPUT.PUT_LINE('dfdsfdsfdsf');
RAISE_APPLICATION_ERROR (-20000,'test only');
这部分放在RAISE my_exception; 处,替换RAISE my_exception; 试试。
哪部分没有返回,还是都没有返回,能说的具体一些吗?
我只是觉得
EXCEPTION
when my_exception then
DBMS_OUTPUT.PUT_LINE('dfdsfdsfdsf');
RAISE_APPLICATION_ERROR (-20000,'test only');
在exception中又通过RAISE_APPLICATION_ERROR报异常的用法可能有问题,你直接将
DBMS_OUTPUT.PUT_LINE('dfdsfdsfdsf');
RAISE_APPLICATION_ERROR (-20000,'test only');
这部分放在RAISE my_exception; 处,替换RAISE my_exception; 试试。
#12
To: LastDrop
你是正确的,是我的原因,两种方法都可以。(即定义异常和直接触发异常都行。)
非常感谢你!
顺便说一句,你是一个非常优秀的人才,你的名字告诉我你很谦虚,这正是你优秀的根本,我们要不断的学习,才不落伍。我在珠海工作,你呢?
你是正确的,是我的原因,两种方法都可以。(即定义异常和直接触发异常都行。)
非常感谢你!
顺便说一句,你是一个非常优秀的人才,你的名字告诉我你很谦虚,这正是你优秀的根本,我们要不断的学习,才不落伍。我在珠海工作,你呢?
#1
我一般用
show errors
show errors
#2
如果你想在存储过程中返回错误信息可以这样定义存储过程:
DECLARE
Person_no varchar (18);
Person_age integer;
Err_validation exception; --自定义错误,人员年龄小于18岁
BEGIN
SELECT age
INTO person_age
FROM person
WHERE person_no =person_no;
If person_age < 18 Then
RAISE err_validation; --使用自定义的错误标志
End If;
EXCEPTION
WHEN err_validation THEN
RAISE_APPLICATION_ERROR (20000,'当前人员年龄小于18周岁!'); --自定义
WHEN no_data_found THEN
RAISE_APPLICATION_ERROR (20001,'未发现此人员! '); --预定义
WHEN others THEN
RAISE_APPLICATION_ERROR (20002,'未知错误!'); --未定义错误
END;
/
在PB调用可以检测sqlca.sqldbcode的值
If sqlca.sqldbcode=20001 Then
..
ElseIf sqlca.sqldbcode=20002 Then
..
Else
..
End If
注意:ORACLE中自定义错误号范围为(-20000至-20999)!
DECLARE
Person_no varchar (18);
Person_age integer;
Err_validation exception; --自定义错误,人员年龄小于18岁
BEGIN
SELECT age
INTO person_age
FROM person
WHERE person_no =person_no;
If person_age < 18 Then
RAISE err_validation; --使用自定义的错误标志
End If;
EXCEPTION
WHEN err_validation THEN
RAISE_APPLICATION_ERROR (20000,'当前人员年龄小于18周岁!'); --自定义
WHEN no_data_found THEN
RAISE_APPLICATION_ERROR (20001,'未发现此人员! '); --预定义
WHEN others THEN
RAISE_APPLICATION_ERROR (20002,'未知错误!'); --未定义错误
END;
/
在PB调用可以检测sqlca.sqldbcode的值
If sqlca.sqldbcode=20001 Then
..
ElseIf sqlca.sqldbcode=20002 Then
..
Else
..
End If
注意:ORACLE中自定义错误号范围为(-20000至-20999)!
#3
谢谢!但我按你的方法做怎么不能正确执行。
我想知道有没有查看存储过程执行的工具,或怎么去做。
If sqlca.sqldbcode=20001 Then
..
ElseIf sqlca.sqldbcode=20002 Then
..
Else
..
End If
请问上面的..是否全是用户自定义的信息还是也有存储过程中定义的信息。如果我只显示用户定义的信息应该怎么办?
我执行时总是出现这样的情况:
本应该出现的提示却没有提示,而提示超出系统定义的参数范围。
我想知道有没有查看存储过程执行的工具,或怎么去做。
If sqlca.sqldbcode=20001 Then
..
ElseIf sqlca.sqldbcode=20002 Then
..
Else
..
End If
请问上面的..是否全是用户自定义的信息还是也有存储过程中定义的信息。如果我只显示用户定义的信息应该怎么办?
我执行时总是出现这样的情况:
本应该出现的提示却没有提示,而提示超出系统定义的参数范围。
#4
哦,我知道了,我给你的例子代码有点问题,自定义的错误号只能是负值!
看到我给你的提示吗(注意:ORACLE中自定义错误号范围为(-20000至-20999)!
)ORACLE自定义的错误号只能在这个范围!!!
调试存储过程的工具PL/SQL Developer,我手里有,不过5M多呢,怕你的信箱放不下
去www.51soft.com上面去看看一定有这个工具的下载
看到我给你的提示吗(注意:ORACLE中自定义错误号范围为(-20000至-20999)!
)ORACLE自定义的错误号只能在这个范围!!!
调试存储过程的工具PL/SQL Developer,我手里有,不过5M多呢,怕你的信箱放不下
去www.51soft.com上面去看看一定有这个工具的下载
#5
另外顺便问一下你有没有关于ORACLE 的帮助,能够很方便的查到函数存储过程等的用法,也可以介绍一下网站!
#6
create or replace procedure sp_del_user_privileges (p_function_id in varchar2,p_maker_id in varchar2,p_user_id varchar2) as
/*
** Procedure : sp_del_user_privileges
** Description : according to pass in reference to delete the relative record in
** user_privileges. at the same as insert reclative record into
** table profchg_log
**
**
** Parameters: p_function_id --the function id
** p_maker_id --deal with maker action of maker id
** p_user_iad --user id
**
** Result Set: delete the relative record and insert a new record into log table
**
** Return : none
**
** Modification History :
**
** Date By Change Description
************************************************************************************
** 2003-02-28 Alan li Creation
**
*/
--declare var
v_seq_no number(10); --auto produce
v_last_upd_date date;
v_function_desc varchar(50);
v_source_name varchar2(30); --client or account
v_count number(2);
my_exception exception;
Begin
--confirm if exist the current condition of record,no exist then return
select count(FUNCTION_ID) INTO v_count from USER_PRIVILEGES where FUNCTION_ID =p_function_id
and USER_ID ='gfhgfh';
if v_count is null or v_count = 0
then
RAISE my_exception; --I will make the current exception trigger
--return ;
end if;
EXCEPTION
when my_exception then
DBMS_OUTPUT.PUT_LINE('dfdsfdsfdsf');
RAISE_APPLICATION_ERROR (-20000,'test only');
return;
when no_data_found then
RAISE_APPLICATION_ERROR(-20001,'no data found');
return;
when others then
RAISE_APPLICATION_ERROR(-20002,'Others error info!');
return;
/*
--get relative info(group_id and source_name)
select SOURCE_NAME into v_source_name from USER_PRIVILEGES
where FUNCTION_ID = p_function_id and USER_ID = p_user_id;
--get function_desc
select nvl(FUNCTION_DESC,'') into v_function_desc from FUNCTIONS
where FUNCTION_ID = p_function_id;
--get sequence and system date
select UBS_SEQU_NO.NEXTVAL, sysdate into v_seq_no, v_last_upd_date from dual;
--record the user delete info : insert relative info into table profchg_log
insert into PROFCHG_LOG(ID,USER_ID,CHG_DESC,MAKER_ID,LAST_UPD_DT)
values(v_seq_no,p_user_id,'Delete function access:'||v_function_desc,
p_maker_id,v_last_upd_date);
-- according pass in reference to delete relative info
delete from USER_PRIVILEGES where FUNCTION_ID =p_function_id
and USER_ID =p_user_id;
return ;
*/
End;
在SQL PLUS 中执行:
execute sp_del_user_privileges('tadf','dsf','sdfsdf')
提示:
BEGIN sp_del_user_privileges('tadf','dsf','sdfsdf'); END;
*
ERROR 位于第 1 行:
ORA-20000: test only
ORA-06512: 在"CTONG.SP_DEL_USER_PRIVILEGES", line 48
ORA-06512: 在line 1
实际上是触发:RAISE_APPLICATION_ERROR (-20000,'test only'); 但是为什么会出现上面这样的提示:
另外存储过程可以有返回值吗?
/*
** Procedure : sp_del_user_privileges
** Description : according to pass in reference to delete the relative record in
** user_privileges. at the same as insert reclative record into
** table profchg_log
**
**
** Parameters: p_function_id --the function id
** p_maker_id --deal with maker action of maker id
** p_user_iad --user id
**
** Result Set: delete the relative record and insert a new record into log table
**
** Return : none
**
** Modification History :
**
** Date By Change Description
************************************************************************************
** 2003-02-28 Alan li Creation
**
*/
--declare var
v_seq_no number(10); --auto produce
v_last_upd_date date;
v_function_desc varchar(50);
v_source_name varchar2(30); --client or account
v_count number(2);
my_exception exception;
Begin
--confirm if exist the current condition of record,no exist then return
select count(FUNCTION_ID) INTO v_count from USER_PRIVILEGES where FUNCTION_ID =p_function_id
and USER_ID ='gfhgfh';
if v_count is null or v_count = 0
then
RAISE my_exception; --I will make the current exception trigger
--return ;
end if;
EXCEPTION
when my_exception then
DBMS_OUTPUT.PUT_LINE('dfdsfdsfdsf');
RAISE_APPLICATION_ERROR (-20000,'test only');
return;
when no_data_found then
RAISE_APPLICATION_ERROR(-20001,'no data found');
return;
when others then
RAISE_APPLICATION_ERROR(-20002,'Others error info!');
return;
/*
--get relative info(group_id and source_name)
select SOURCE_NAME into v_source_name from USER_PRIVILEGES
where FUNCTION_ID = p_function_id and USER_ID = p_user_id;
--get function_desc
select nvl(FUNCTION_DESC,'') into v_function_desc from FUNCTIONS
where FUNCTION_ID = p_function_id;
--get sequence and system date
select UBS_SEQU_NO.NEXTVAL, sysdate into v_seq_no, v_last_upd_date from dual;
--record the user delete info : insert relative info into table profchg_log
insert into PROFCHG_LOG(ID,USER_ID,CHG_DESC,MAKER_ID,LAST_UPD_DT)
values(v_seq_no,p_user_id,'Delete function access:'||v_function_desc,
p_maker_id,v_last_upd_date);
-- according pass in reference to delete relative info
delete from USER_PRIVILEGES where FUNCTION_ID =p_function_id
and USER_ID =p_user_id;
return ;
*/
End;
在SQL PLUS 中执行:
execute sp_del_user_privileges('tadf','dsf','sdfsdf')
提示:
BEGIN sp_del_user_privileges('tadf','dsf','sdfsdf'); END;
*
ERROR 位于第 1 行:
ORA-20000: test only
ORA-06512: 在"CTONG.SP_DEL_USER_PRIVILEGES", line 48
ORA-06512: 在line 1
实际上是触发:RAISE_APPLICATION_ERROR (-20000,'test only'); 但是为什么会出现上面这样的提示:
另外存储过程可以有返回值吗?
#7
DBMS_OUTPUT.PUT_LINE('dfdsfdsfdsf'); 为什么不能正常的显示出来!
#8
我现在的机器上没有安装ORACLE,所以没办法测试你说的错误:(
不过好象不能在存储过程、函数和触发器中使用PUT_LINE吧
至于存储过程的返回值问题,可以说存储过程和函数的区别就在这里,存储过程是没有返回值 的,但是可以使用OUT类型的参数来模拟返回值,但是强烈推荐在有返回值的时候使用函数,因为在DB2中带有OUT类型的存储过程在PB是无法接收的!!!
至于相关的网站,我常去的是www.oradb.net
不过好象不能在存储过程、函数和触发器中使用PUT_LINE吧
至于存储过程的返回值问题,可以说存储过程和函数的区别就在这里,存储过程是没有返回值 的,但是可以使用OUT类型的参数来模拟返回值,但是强烈推荐在有返回值的时候使用函数,因为在DB2中带有OUT类型的存储过程在PB是无法接收的!!!
至于相关的网站,我常去的是www.oradb.net
#9
to:lyzalan()
1. DBMS_OUTPUT.PUT_LINE('dfdsfdsfdsf'); 为什么不能正常的显示出来!
要显示,需要在SQL*PLUS中先执行set serveroutput on
2.ERROR 位于第 1 行:
ORA-20000: test only
ORA-06512: 在"CTONG.SP_DEL_USER_PRIVILEGES", line 48
ORA-06512: 在line 1
出现exception,Oracle就认为是出错,只不过你可以通过exception来捕获而已。
1. DBMS_OUTPUT.PUT_LINE('dfdsfdsfdsf'); 为什么不能正常的显示出来!
要显示,需要在SQL*PLUS中先执行set serveroutput on
2.ERROR 位于第 1 行:
ORA-20000: test only
ORA-06512: 在"CTONG.SP_DEL_USER_PRIVILEGES", line 48
ORA-06512: 在line 1
出现exception,Oracle就认为是出错,只不过你可以通过exception来捕获而已。
#10
To Lastdrop
你的方法我试过啦!可以显示,但我的实质问题没有解决,我定义的异常在PB 脚本中没有得到解决,不能正常返回异常处理的部分?
TO Alwaystar
可以在存储过程中使用DBMS_OUTPUT.PUT_LINE('DDFSDF')
但是在SQL PLUS 中执行时要用 set serveroutput on
才可以显示
你的方法我试过啦!可以显示,但我的实质问题没有解决,我定义的异常在PB 脚本中没有得到解决,不能正常返回异常处理的部分?
TO Alwaystar
可以在存储过程中使用DBMS_OUTPUT.PUT_LINE('DDFSDF')
但是在SQL PLUS 中执行时要用 set serveroutput on
才可以显示
#11
我定义的异常在PB 脚本中没有得到解决,不能正常返回异常处理的部分?
哪部分没有返回,还是都没有返回,能说的具体一些吗?
我只是觉得
EXCEPTION
when my_exception then
DBMS_OUTPUT.PUT_LINE('dfdsfdsfdsf');
RAISE_APPLICATION_ERROR (-20000,'test only');
在exception中又通过RAISE_APPLICATION_ERROR报异常的用法可能有问题,你直接将
DBMS_OUTPUT.PUT_LINE('dfdsfdsfdsf');
RAISE_APPLICATION_ERROR (-20000,'test only');
这部分放在RAISE my_exception; 处,替换RAISE my_exception; 试试。
哪部分没有返回,还是都没有返回,能说的具体一些吗?
我只是觉得
EXCEPTION
when my_exception then
DBMS_OUTPUT.PUT_LINE('dfdsfdsfdsf');
RAISE_APPLICATION_ERROR (-20000,'test only');
在exception中又通过RAISE_APPLICATION_ERROR报异常的用法可能有问题,你直接将
DBMS_OUTPUT.PUT_LINE('dfdsfdsfdsf');
RAISE_APPLICATION_ERROR (-20000,'test only');
这部分放在RAISE my_exception; 处,替换RAISE my_exception; 试试。
#12
To: LastDrop
你是正确的,是我的原因,两种方法都可以。(即定义异常和直接触发异常都行。)
非常感谢你!
顺便说一句,你是一个非常优秀的人才,你的名字告诉我你很谦虚,这正是你优秀的根本,我们要不断的学习,才不落伍。我在珠海工作,你呢?
你是正确的,是我的原因,两种方法都可以。(即定义异常和直接触发异常都行。)
非常感谢你!
顺便说一句,你是一个非常优秀的人才,你的名字告诉我你很谦虚,这正是你优秀的根本,我们要不断的学习,才不落伍。我在珠海工作,你呢?