CREATE OR REPLACE FUNCTION NZTX_ZDDCTZQNR --年中调薪——自动带出调整前内容 (canshu int) RETURN varchar2 is C212621 number(10,2); --调整前标准工资C21262, gz_ym年月 C212622 number(10,2); --调整前基本工资GZ_MAIN203 C212623 number(10,2); --调整前岗位工资C21057 C212624 number(10,2); --调整前绩效工资C21106 C212625 varchar2(500); --员工工号A0190 BEGIN select C21262 into C212621 from C21 where A0188=canshu and GZ_YM=to_char(sysdate,'yyyymm')-1; SELECT GZ_MAIN203 into C212622 from C21 where A0188=canshu and GZ_YM=to_char(sysdate,'yyyymm')-1; SELECT C21057 into C212623 from C21 where A0188=canshu and GZ_YM=to_char(sysdate,'yyyymm')-1; select C21106 into C212624 from C21 where A0188=canshu and GZ_YM=to_char(sysdate,'yyyymm')-1; select A0190 into C212625 from view_a01 where A0188=canshu; RETURN 'FFC_NZTXZJ006:'||C212621||',FFC_NZTXZJ007:'||C212622||',FFC_NZTXZJ008:'||C212623||',FFC_NZTXZJ009:'||C212624||',FFC_NZTXZJ001:'||C212625; END;哪里有问题?正确代码是啥?
时间: 2024-03-15 21:47:25 浏览: 145
这段代码可能存在以下问题:
1. 没有对参数进行有效性验证,导致可能会出现查询无结果或者查询结果不准确的问题。
2. 在使用to_char函数时,没有对语言环境进行指定,可能会导致在不同的语言环境下查询结果不一致的问题。
3. 没有对select语句的结果进行异常处理,如果查询结果为空,将会导致程序抛出异常。
4. 对于select语句,如果A0188存在多个匹配值,将会导致查询结果不准确的问题。
下面是进行改进后的代码:
```
CREATE OR REPLACE FUNCTION NZTX_ZDDCTZQNR (canshu IN NUMBER) RETURN VARCHAR2 IS
C212621 NUMBER(10,2); --调整前标准工资C21262, gz_ym年月
C212622 NUMBER(10,2); --调整前基本工资GZ_MAIN203
C212623 NUMBER(10,2); --调整前岗位工资C21057
C212624 NUMBER(10,2); --调整前绩效工资C21106
C212625 VARCHAR2(500); --员工工号A0190
BEGIN
SELECT C21262, GZ_MAIN203, C21057, C21106
INTO C212621, C212622, C212623, C212624
FROM C21
WHERE A0188 = canshu AND GZ_YM = TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'YYYYMM')
AND ROWNUM = 1;
SELECT A0190 INTO C212625
FROM view_a01
WHERE A0188 = canshu AND ROWNUM = 1;
RETURN 'FFC_NZTXZJ006:' || C212621 || ',FFC_NZTXZJ007:' || C212622
|| ',FFC_NZTXZJ008:' || C212623 || ',FFC_NZTXZJ009:' || C212624
|| ',FFC_NZTXZJ001:' || C212625;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN NULL; -- 可以返回 null,而不是抛出异常
END;
```
主要修改了以下几点:
1. 在查询C21表时,使用了ROWNUM = 1来保证只有一条查询结果。
2. 将to_char函数改为了ADD_MONTHS(SYSDATE, -1)来获取上一个月的年月。
3. 在select语句中,增加了异常处理来避免程序中断。
4. 调整了函数的格式。
阅读全文