PB调用的存储过程执行完毕后,仍然挂在数据库进程中,该如何解决

PB调用的存储过程执行完毕后,仍然挂在数据库进程中

integer msg
string sql



msg=messagebox('问题','确实要运算月销售报表数据吗',question!,yesno!,2) 
 if msg = 2 then return

   cb_2.enabled=false
   sle_1.text='正在运算,请不要关闭窗口...'
   sql = 'sp_sales_report'

   execute immediate :sql using sqlca;

IF SQLCA.SQLCode<>0 THEN
Beep(1)
sle_1.text=SQLCA.SQLerrText
return
ELSE
sle_1.text='恭喜!恭喜!运算完全成功!'
cb_2.enabled=true
END IF 


return



以上是PB中的一个按钮,调用sql = 'sp_sales_report'这个存储过程。
在最后,系统也提示了sle_1.text='恭喜!恭喜!运算完全成功!'

问题:但是在数据库的进程中,该存储过程还在执行,并为堵塞状态,为什么?
我也有做return,哪里有问题?

存储过程单独执行没有任何问题。
------解决方案--------------------
改为以下代码试试

msg=messagebox('问题','确实要运算月销售报表数据吗',question!,yesno!,2) 
 if msg = 2 then return
   cb_2.enabled=false
   sle_1.text='正在运算,请不要关闭窗口...'
   sql = 'sp_sales_report'
 
   execute immediate :sql using sqlca;
 
IF SQLCA.SQLCode<>0 THEN
    rollback;
    Beep(1)
    sle_1.text=SQLCA.SQLerrText
    return
ELSE
   commit using sqlca;
    sle_1.text='恭喜!恭喜!运算完全成功!'
    cb_2.enabled=true
END IF 
 
 
return