请上传宽度大于 1200px,高度大于 164px 的封面图片
    调整图片尺寸与位置
    滚轮可以放大缩小图片尺寸,按住图片拖动可调整位置,多余的会自动被裁剪掉
取消
fantasy_07(uid:218534)
职业资格认证:尚未取得认证
帆软js中执行oracle update分享
在填报报表中,有个需求,通过一个按钮调用oracle存储过程,执行update语句,重置密码 js代码如下  //获取C2单元格值  var vgh=_g().getCellValue(0, 2, 1); var sql="CALL HBI.PY_ResetPwd('"+vgh+"')"; var res=FR.remoteEvaluate('=sql("Oracle","'+sql+'",1,1)'); 存储过程如下:  CREATE OR REPLACE PROCEDURE PY_ResetPwd( USER_ID IN VARCHAR2 ) AS  BEGIN           UPDATE HBI.T_NORMAL_ACCOUNT SET PASSWORD='000000' WHERE ACCOUNT_NAME=USER_ID;  COMMIT;        END; 在操作中,运行总是报错,查看日志执行了两次,报错ORA-00900 查看大佬的帖子后https://bbs.fanruan.com/thread-76079-1-1.html,发现是sql函数的特性 但是在oracle数据库中,存储过程一般无法返回数据集 我的需求中,update 执行两次,不受影响,如果是通过存储过程insert,那岂不是行不通? 有没有一种方法,优雅的解决这个问题? 思路1 让存储过程返回数据集,经过我不断尝试,失败了 思路2 通过函数执行update操作 问了下gpt,PRAGMA AUTONOMOUS_TRANSACTION 可行,搞起 1、新建更新函数  CREATE OR REPLACE FUNCTION FY_ResetPwd( USER_ID IN VARCHAR2  --用户ID  ) RETURN VARCHAR2 IS    PRAGMA AUTONOMOUS_TRANSACTION; BEGIN     UPDATE HBI.T_NORMAL_ACCOUNT SET PASSWORD='000000' WHERE ACCOUNT_NAME=USER_ID;         --显式提交事务 必须     COMMIT;  --返回执行结果     RETURN '重置成功!'; EXCEPTION     WHEN OTHERS THEN         ROLLBACK; -- 出现异常时回滚         RETURN '!!!重置失败!!!'; END; 2、js 代码修改如下  //获取C2单元格值  var vgh=_g().getCellValue(0, 2, 1); var sql="SELECT HBI.FY_RESETPWD('"+vgh+"') FROM DUAL"; var res=FR.remoteEvaluate('=sql("Oracle","'+sql+'",1,1)'); 这下执行无报错,而且执行一次,完美解决 这样还有个额外的好处,可以返回是否插入成功,并给出提示框,外层再加上更新确认窗口,完美啊!! 最终js代码  //获取C2单元格值 var vgh=_g().getCellValue(0, 2, 1); FR.Msg.confirm("提示", "确定重置用户的密码吗?", function(value) {  if (value) {    var sql="SELECT HBI.FY_RESETPWD('"+vgh+"') FROM DUAL";   var res=FR.remoteEvaluate('=sql("Oracle","'+sql+'",1,1)');  FR.Msg.alert("提示",res)   } }) 这个函数是update操作,insert并未测试,大家有需求可以测试下
个人成就
内容被浏览12,449
加入社区5年304天
返回顶部