如何在PBperl 脚本返回值当中获取存储过程的返回值

PB应该怎样判断调用的存储过程是否成功呢
[问题点数:40分,结帖人whyisgood]
PB应该怎样判断调用的存储过程是否成功呢
[问题点数:40分,结帖人whyisgood]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关推荐:
2010年7月 总版技术专家分月排行榜第二2010年6月 总版技术专家分月排行榜第二
2010年5月 总版技术专家分月排行榜第三
2003年7月 PowerBuilder大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。1953人阅读
SYBASE ASE 10.X11.XPBSELECTRETURNOUTPUTPBFETCH…INTO…
SYBASE ASE 10.X11.Xdeptroster@deptno@totsal
@avgsalRETURN@number_of_empsSELECT@deptnoPB
CREATE PROCEDURE deptroster @deptno integer,
@totsal double precision output,
&&&&&& @avgsal double precision output
DECLARE @number_of_emps integer
SELECT emp_fname, emp_lname, salary FROM employee
&&&&&& WHERE dept_id = @deptno
SELECT @totsal = sum(salary),
&&&&&& @avgsal = avg(salary),
&&&&&& @number_of_emps = COUNT(*) FROM employee
&&&&&& WHERE dept_id = @deptno
RETURN @number_of_
PBSELECTRETURNSELECTRETURN
integer fetchcount = 0
long&&& lDeptno, rc
string& fname, lname
double& dSalary, dTotSal, dAvgSal
lDeptno = 100
DECLARE deptproc PROCEDURE FOR
&&&&&& @rc = dbo.deptroster
&&&&&& @deptno = :lDeptno,
&&&&&& @totsal = 0 output,
&&&&&& @avgsal = 0 output
USING SQLCA;
CHOOSE CASE SQLCA.sqlcode
&&&&&& //0SELECT
&&&&&& //LOOPSELECT
&&&&&&&&&&&&& FETCH deptproc INTO :fname, :lname, :dS
&&&&&&&&&&&&& CHOOSE CASE SQLCA.sqlcode
&&&&&&&&&&&&& CASE 0
&&&&&&&&&&&&&&&&&&&& fetchcount++
&&&&&&&&&&&&& CASE 100
&&&&&&&&&&&&&&&&&&&& MessageBox ("End of Result Set",& &
&&&&&&&&&&&&&&&&&&&&&&&&&&& string (fetchcount) " rows fetched")
&&&&&&&&&&&&& CASE -1
&&&&&&&&&&&&&&&&&&&& MessageBox ("Fetch Failed",& &
&&&&&&&&&&&&&&&&&&&&&&&&&&& string (SQLCA.sqldbcode) " = "& &
SQLCA.sqlerrtext)
&&&&&&&&&&&&& END CHOOSE
&&&&&& LOOP WHILE SQLCA.sqlcode = 0
// FETCHRETURNOUTPUT
&&&&&& FETCH deptproc INTO :rc, :dTotSal, :dAvgS
&&&&&& CHOOSE CASE SQLCA.sqlcode
&&&&&& CASE 0
&&&&&&&&&&&&& MessageBox ("Fetch Return Value and Output"& &
&&&&&&&&&&&&&&&&&&&& "Parms SUCCESSFUL", "Return Value is: "& &
&&&&&&&&&&&&&&&&&&&& string (rc)& &
&&&&&&&&&&&&&&&&&&&& "~r~nTotal Salary: " string (dTotSal)& &
&&&&&&&&&&&&&&&&&&&& "~r~nAverage Sal:& " string (dAvgSal))
&&&&&& CASE 100
&&&&&&&&&&&&& MessageBox ("Return Value and Output Parms"& &
&&&&&&&&&&&&&&&&&&&& "NOT FOUND", "")
&&&&&& CASE ELSE
&&&&&&&&&&&&& MessageBox ("Fetch Return Value and Output"& &
"Parms FAILED", "SQLDBCode is "& &
&&&&&&&&&&&&&&&&&&&& string (SQLCA.sqldbcode) " = "& &
&&&&&&&&&&&&&&&&&&&& SQLCA.sqlerrtext)
&&&&&& END CHOOSE
&&&&&& // CLOSE.
&&&&&& MessageBox ("Execute Successful", "No result set")
MessageBox ("Execute Failed",& &
&&&&&&&&&&&&& string (SQLCA.sqldbcode) " = "& &
&&&&&&&&&&&&& SQLCA.sqlerrtext)
END CHOOSE
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:112666次
积分:1497
积分:1497
排名:第15213名
原创:32篇
评论:30条
(1)(1)(1)(1)(4)(19)(4)(5)获取存储过程返回值及代码中获取返回值_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
获取存储过程返回值及代码中获取返回值
阅读已结束,如果下载本文需要使用
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩2页未读,继续阅读
你可能喜欢讨论一下PB调用存储过程问题 -PB- TryCatch
>> Content
讨论一下PB调用存储过程问题
各位朋友,对PB调用存储过程的问题,大家可发现什么问题,怎么解决的?今天我用PB调用一个存储过程,执行的时候,如果sqlcocd&0或sqldbcode&0,我就messagebox()然后rollback可是没有用,居然提交了,如果先rollback再messagebox就可以回滚。急着我没有办法,直接把错误提示保存的变量中,先roolback再messagebox()如果各位朋友发现过这样的问题,并且有好的解决办法,请大家都把解决办法贴出来,谢谢!
------Solutions------
提交与回滚在存储过程写,调用@@error如果不等于0就回滚。PB中调用存储过程的返回值,如果不成功在MESSAGEBOX一下!!
------Solutions------
1.没遇到过!&设置断点看看是否有执行这句代码.2."直接把错误提示保存的变量中,先roolback再messagebox()"这是一个好的做法,事实上你应该这么做的,因为如果先messagebox后rollback的话,客户响应messagebox的时间有可能很长的(比如刚好有别的事,而没有响应你这个message等等),这样有可能增加死锁的机会.&所以你应该先rollback再messagebox.
------Solutions------
也曾经如楼上的试过,但是有时候存储过程里面的事务好像不起作用,在外面照样可以回滚掉。
------Solutions------
这样错误捕捉不到了。
------Solutions------
调用存储过程的时候,还遇到过这样的问题,退出当前窗口的时候,提交了,但是退出整个应用程序的时候,他虽然回滋了,真是晕了。
------Solutions------
请打PB补丁!&你所说的没遇到过,或许是你的代码问题,或许是Bug.
------Solutions------
不过先保存sqlerrtext到变量,回滚然后messagebox&变量是对的。。你的存储过程里面会不会有提交语句呢。。还有autocommit&是不是设置成了true呢。?
------Solutions------
如果事物嵌套的话,里面的事物不怎么管用。autocommit当然是false
------Solutions------
事物嵌套?================如何嵌套?&能否给出代码?
------Solutions------
/*急着我没有办法,直接把错误提示保存的变量中,先roolback再messagebox()*/其实这是个好办法,不管是否自动提交,这样处理都是对的。我也一直这么做的。原因一如楼上一位仁兄说的。或者你可以用这种方式,道理差不多:post&messagebox('error',sqlca.sqlerrtext)
------Solutions------
messagebox()是一个要人为干预的东西,只要有人为做的东西一般都是写在后面的
------Solutions------
在pb中执行rollback&并不回滚存储过程中的对数据库的操作
------Solutions------
在pb中执行rollback&并不回滚存储过程中的对数据库的操作==================这种说法是错误的!!!&除非存储过程中写了rollback或commit语句,否则,在PB中一样可以rollback.
------Solutions------
就算写了,也回滚了。因为是事物嵌套,以外面的事物为准。
------Solutions------
另外,楼主先messagebox,再rollback,这种写法明显是存在问题的,如果跳出messagebox以后,用户不去确认,则事务一直处于锁定状态,相关的表的锁一直不会被释放,如果此时有其它事务试图访问&这些表,就会被锁住,所以,在事务rollback或commit前,是不应该存在与用户的交互过程的,除非应用是单机应用,不存在并发的问题
------Solutions------
同意楼上的一般这么写string&ls_errls_err&=&sqlca.sqlerrtextrollback&using&messagebox('',ls_err)
------Solutions------
搭顺风车问个问题pb10&如何使用sqlserver带output参数的存储过程?注:低版本pb用sqlserver接口直接连库,存储过程使用没有问题pb10不提供sqlserver专用接口,该用odbc连接就不行了,execute不能成功
------Solutions------
------Solutions------
存储过程感觉写的时候不好调试,,虽然也有调试工具
------Solutions------
回滚交给存储过程去做,PB只捕获返回值,如在PB中用事务控制,要写在MESSAGEBOX前。
------Solutions------
要调试存储过程用.NET比较方便。
------Solutions------
先MESSAGE后ROLLBACK本身就不能这样写,你想想如果是多用户在操作,你这里一个MESSAGEBOX把事务给占了不是造成其他人不能用了啊,应该先把ERRTEXT写进变量再MESSAGEBOX
------Solutions------
侵魅绻SQL2000的,我建h你直接在Server上{,那才是正_的做法,而且也很好{。再f你的s_procedure在的r候遇到Error&本砭Return&才Α
------Solutions------
为什么dw.update()不成功时候取sqlca.sqlerrtext取不到???
------Solutions------
我顶!---------------------|水&是&生&命&之&源!|买&点&卡,拿&工&资|http://www.pay3&.cn---------------------
------Solutions------
我知道了,sqlca.sqlerrtext要在rollback之前取
------Solutions------
sqlca本身就是一个事务对象,他调用的存储过程本身就是一个嵌套的事务,只有pb的事务对象才能提交结果,回滚可以在存储过程里,也可以在pb里.但只能回滚一次.rollback一定要在messagebox前面执行.
------Solutions------
多人同时访问一张表的情况很多如果一个事务没提交/回滚就能锁住整个表,那我们都不要做了!请释疑
------Solutions------
理解事务不难,思路要清晰:1、前(PB代码)/后台(存储过程)对事务的理解一样,把前台update()函数理解为INSERT,UPDATE&SQL语句,前后台是否分开事务、或前后台1个事务,就看业务的需要了,注意SQL语句的执行顺序就行。2、后台触发器不能作为事务,它处在在前台update()函数和&COMMIT/ROLLBACK&USING&SQLCA;代码之间。触发器返回的值,决定update()函数的返回值。
------Solutions------
有理,我也是这样想的,如果锁定也是瞬间的> pb中调用oracle中存储过程执行结果在数据窗口中显示解决办法
pb中调用oracle中存储过程执行结果在数据窗口中显示解决办法
hchming2008 & &
发布时间: & &
浏览:233 & &
回复:2 & &
悬赏:0.0希赛币
pb中调用oracle中存储过程执行结果在数据窗口中显示在pb界面通过条件执行存储过程,存储过程执行后的结果放到一个数据库临时表中,建立临时表的数据窗口来显示执行结果。在pb界面中输入p_bworkdate,p_eworkdate,p_countLimit ,p_amtLimt 四个条件查询执行存储过程pb中代码如下 :t_stat_stdate=''t_stat_endate''t_term_count=5t_term_amt=100.00declare lp_reprot_proc PROCEDURE FOR Person_Term_Stat_Date_dy(t_stat_stdate,t_stat_endate,t_term_count,t_term_amt);Execute lp_reprot_为何执行后数据库Stat_Temp_Person没有更新呢?直接在oracle中执行就可以。是不是要建立存储过程数据窗口的,如果建立,输出要怎样呢?oracle存储过程如下:CREATE OR REPLACE PROCEDURE Person_Term_Stat_Date_dy(
p_bworkdate IN
VARCHAR2, -- 开始日期
p_eworkdate IN
VARCHAR2, -- 结束日期
p_countLimit
--最小笔数.
--最小金额.
p_errorcode
OUT NUMBER,
-- 错误代码
OUT VARCHAR2) -- 错误信息 IS
NUMBER DEFAULT 0;
l_sum NUMBER DEFAULT 0; --统计金额.
l_count NUMBER DEFAULT 0; --统计笔数. &
--l_operation VARCHAR2 DEFAULT 'ALL';
--l_file UTL_FILE.FILE_TYPE;
CURSOR c1(szPerson VARCHAR2) IS SELECT distinct Term_id,nvl(person_name,'') person_name
where Term_Status = '正常' and
Person_Name = szPerson
order by Term_
CURSOR c2 IS SELECT DISTINCT nvl(PERSON_NAME,'') PERSON_NAME
FROM PERSON_TEMP ; BEGIN
p_errorcode := 0;
p_szerror := 'OK'; &
--l_operation := p_ &
FOR c12 in c2 LOOP &
--DBMS_OUTPUT.put_line('姓名'||'-'||C12.person_name);
delete from Stat_Temp_Person where Person_Name = c12.PERSON_NAME;
FOR c11 IN c1(c12.PERSON_NAME)
select nvl(sum(Term_Count),0),nvl(sum(Term_amt),0.00)
l_count,l_sum
From Term_Stat_Date Where Stat_Date &=p_bworkdate and Stat_Date &=p_eworkdate and Term_id = c11.Term_
IF l_count & p_countLimit OR
l_sum & p_amtLimt THEN
Insert Into Stat_Temp_Person(Term_id,Term_Count,Term_amt,Person_Name) Values(c11.Term_id,l_count,l_sum,c12.PERSON_NAME) ; &
p_szerror :='finish';
--关闭文件
--p_szerror := 'utl_file.fclose';
--UTL_FILE.FCLOSE(l_file); EXCEPTION
WHEN OTHERS THEN
p_errorcode := 1901;
--p_szerror := 'finish 处理完成'; END Person_Term_Stat_Date_
PB 调存储过程生成DW 对象的方法是在建立DW对象向导中选择数据源的时候选择:Stored Procedure& 再在存储过程列表中选择相应的存储过程即可。
hcj50187 & &
& & (0)(0)引用
参数是 默认的,你只需在 dw.retrive()按照SP参数列表顺序填写参数即可。hcjbijie & &
& & (0)(0)引用
本问题标题:
本问题地址:
温馨提示:本问答中心的任何言论仅代表发言者个人的观点,与希赛网立场无关。请对您的言论负责,遵守中华人民共和国有关法律、法规。如果您的言论违反希赛网问答中心的规则,将会被删除。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&增值电信业务经营许可证湘B2-

我要回帖

更多关于 shell脚本 程序返回值 的文章

 

随机推荐