用 proc 命令不知为何会重复执行 oracle 存储过程
集算器语句如下:两个输入参数,中间是输出参数。
=A4.proc(“{call TL_GetTestID(?,?,?)}”,2443:1, :11:“o”:sheetid, A14:11)
存储过程代码如下:
根据条件取序列号,用 plsql 调用没问题,用集算器调用一次会重复。
即 SerialNumber 会被加 2
CREATE OR REPLACE Procedure TL_GetTestID
(v_SheetType In Number Default Null,
v_SheetID Out Varchar2,
v_ShopID IN varchar2 default null)
IS
PRAGMA AUTONOMOUS_TRANSACTION;
v_ERR Number(10, 0);
v_nSerial Number(10, 0);
v_dDate Date;
v_DateStr Varchar2(8);
v_myShopID Varchar2(4);
v_Len Number(10);
v_Msg Varchar2(50);
Begin
update SerialNumber set SerialNumber = SerialNumber + 1
where serialid = v_SheetType and shopid = v_ShopID;
begin
select SERIALNUMBER into v_nSerial
from SerialNumber
where serialid = v_SheetType and shopid = v_ShopID;
Exception When NO_DATA_FOUND Then
v_Msg := 'SerialNumber表中不存在SerialID='||to_char(v_nSerial)||v_SheetType||v_ShopID||'的记录';
raise_application_error(-20002, v_Msg);
End;
v_DateStr := TO_CHAR((SYSDATE), 'YYYYMMDD') ;
v_myShopID := v_Shopid;
If v_nSerial < 10000 Then
v_SheetID := v_myShopID || v_DateStr || LPAD(to_char(v_nSerial), 4, ‘0’);
End if;
commit;
End TL_GetTestID;
说说是什么样的执行过程,放在 ide 里执行会出现加 2 次?
是在 idea 中执行的
idea 里怎么执行?idea 只是个集成环境而已
我问的是这个 splx 怎么执行的,是直接写代码用 PgmCellSet 类计算 splx, 还是写代码用 jdbc 的 call splx,还是在集算器 ide 里执行?
客户代码里 Statement.execute 调用了 2 次?
是的,我发现如果给存储过程定义了参数,在集算器工具里面执行 SPLX 脚本,就会执行两次。但是如果存储过程没有定义出入参,则只会执行一次。
也有人遇到同样问题了,看来是有 BUG,需要 SPL 官方来解决了
集算器工具?哪个,能具体点么
有人也遇到同样问题,知道什么样的场景么,是自己写代码,还是直接在 ide 里
是在集算器开发工具中,点击执行,就会执行两遍,我帖子中有存储过程代码,你放 oracle 中自己调用试试就知道了。
有输出参数时确实会执行 2 次,下周会更新
DPS