昨天下班的时候,测试爆出一个错误:
问题出在下面这个functions的第九行:
CALCNPV functions:
CREATE OR REPLACE FUNCTION "GAOFEI"."CALCNPV"
(monthFv in number, recoveryExp in number, monthTime in number, irr in number)
RETURN number IS netRec number;
BEGIN
if monthFv is null or recoveryExp is null or monthTime is null or irr is null then
return null;
end if;
netRec := ISNULL_NUMBER(monthFv, 0) * (1 - ISNULL_NUMBER(recoveryExp, 0));
return netRec / power(1 + ISNULL_NUMBER(irr, 0), ISNULL_NUMBER(monthTime, 0) / 12);
END;
拿出functions单独进行测试:
select CALCNPV(dv.VALUE_FINAL, dv.RECOVERY_EXP, dv.RECOVERY_TIME, p.IRR)
as NPV from dual
有2条数据出错。分别测试:
Eg:
1. select CALCNPV(11111,null,null,11.11111) from dual
Error data:
select CALCNPV(1,0.11,3333,11.11111) from dual -- 3333
POWER
返回n1的n2次方根
SQL 语句:
select CALCNPV(1,0.11,300,11.11111) from dual -- 3333
结果:
CALCNPV(1,0.11,300,11.11111)
------------------------------------------
0.0000000000000000000000000007409540738908
估计得到的值太小,控制一下monthTime就可以了。
测试得到临界值为monthTime>1395
改为新的functions:
CALCNPV functions:
CREATE OR REPLACE FUNCTION "GAOFEI"."CALCNPV"
(monthFv in number, recoveryExp in number, monthTime in number, irr in number)
RETURN number IS netRec number;
BEGIN
if monthFv is null or recoveryExp is null or monthTime is null or irr is null
or monthTime > 1395 then
return null;
end if;
netRec := ISNULL_NUMBER(monthFv, 0) * (1 - ISNULL_NUMBER(recoveryExp, 0));
return netRec / power
(1 + ISNULL_NUMBER(irr, 0), ISNULL_NUMBER(monthTime, 0) / 12);
END;
考虑了一下,加上限制,只是针对本条数据,如果其他的值很大。有可能也不会出错。
根本解决办法是把返回值加以验证。
分享到:
相关推荐
在实际应用中,可能会遇到s-function定义放置错误的问题。这可能是因为回调函数定义不正确,或者在编写s-function代码时没有遵循MATLAB的语法和Simulink的接口规范。解决这些问题通常需要检查函数的输入输出参数、...
本压缩包文件可能包含了一些关于S-Function函数定义放置错误及其解决方法的MATLAB源码示例。 首先,我们来深入理解S-Function的基本概念。S-Functions是由C、C++或MATLAB编写的,它们在Simulink中以模块的形式运行...
这种情况下,如果参数传递或数据格式处理不当,就可能导致`CallFunction`方法执行失败,并返回`HRESULT E_FAIL`这样的错误码。根据题目中的描述,主要涉及到两个关键点: 1. **参数格式化**:调用`CallFunction`时...
S-Function需要具备良好的错误处理机制,以确保仿真过程的稳定性。 - **防超程代码**:添加代码以防止超出数组界限的情况发生。 - **SsSetErrorStatus的终止条件**:定义错误状态下的处理逻辑。 - **数组边界检查**...
2:运行时报:jQuery.handleError is not a function 错误; 3:执行成功后,始终指向error方法处理,无法执行sucess方法; 解决方法: 1:无法带参数提交,只能上传文件; 原作者一定是把这个代码当作练习来写的,...
S-Function还需要考虑错误处理机制,确保在出现错误时能够正确地响应。例如,可以使用`ssSetErrorStatus`来报告错误,并控制Simulink仿真引擎的后续行为。 #### 结论 综上所述,S-Function是Simulink中一个非常...
在S-Function中正确处理错误和异常是非常重要的: - **防超程代码**:防止溢出和其他数值问题。 - **SsSetErrorStatus的终止条件**:设置适当的错误处理机制。 - **数组边界检查**:避免数组访问越界。 #### S-...
最后,以上内容详细说明了如何解决Koa2应用中的ctx.render is not a function错误。遇到这类问题时,开发者应当首先考虑是否是中间件顺序配置不当导致的。了解并掌握中间件的执行机制,对于Koa框架的使用至关重要,...
在Visual Studio中,开发者可能会遇到一个警告或错误,提示"This function or variable may be unsafe",这是由于Microsoft引入的安全开发生命周期(Security Development Lifecycle, SDL)检查机制。该机制旨在提高...
在Visual Studio(VS)开发环境中,当我们使用一些传统且可能引起安全问题的函数时,可能会遇到“此函数或变量可能不安全”的编译错误或警告。具体来说,这些安全检查错误通常是由于使用了诸如strcpy、scanf等老旧且...
这个特性对于生成自动生成的日志或错误报告特别有用,因为它可以自动标识出错误发生的具体位置,而无需额外的编程工作。 例如,你可以这样使用`__FUNCTION__`宏: ```cpp #include void myFunction() { std::...
为了确保S-Function的健壮性,需要实现适当的错误处理机制。例如,使用`SsSetErrorStatus`函数可以在检测到错误时终止仿真,并提供错误信息。 #### S-Function范例 本部分提供了多个S-Function的实际应用示例,...
- **调试**:使用 MATLAB 的调试工具进行错误定位和修正。 ##### 4. 应用部署 - **模型验证**:在实际环境中验证模型的准确性和稳定性。 - **优化调整**:根据测试结果调整参数,优化性能。 - **发布部署**:完成...
### Matlab S-Function的编写 #### S-Function概述 **S-Function**(系统函数)是一种强大而灵活的工具,用于扩展Simulink的功能。它允许用户定义自定义的算法和逻辑,这些算法和逻辑可以集成到Simulink模型中进行...
- **错误处理**:正确处理运行时错误是保证S-Function可靠性的关键。Simulink提供了一些API函数来帮助开发者实现这一目标。 #### S-Function范例 - **连续状态的S-Function范例**:这类范例通常展示了如何实现基于...
当你遇到“jQuery.handleError is not a function”的错误时,这意味着在使用ajaxFileUpload过程中,程序尝试调用jQuery的一个错误处理方法,但这个方法在当前版本的jQuery中并未定义。这个问题通常出现在从较旧的...
5. 错误处理与日志:FUNCTION MODULE 'RAISE_EXCEPTION'用于抛出异常,便于程序捕获错误并进行处理。FUNCTION MODULE 'LOG-TO-FILE'可将信息写入日志文件,用于调试和问题排查。 6. 远程通信:SAP的RFC(Remote ...
错误处理 89 防超程代码... 89 SsSetErrorStatus 的终止条件..... 90 数组边界检查.......... 90 S-FUNCTION 范例........ 91 连续状态的 S-Function 范例........ 92 离散状态的 S-Function 范例........ 93 ...
此时,可以先使用 `function_exists()` 来确保该函数已被定义,避免运行时错误。 2. **框架或类库兼容性检测**:在编写可复用的代码模块时,可能会依赖于某些特定的函数。通过使用 `function_exists()` 可以确保...