怎么PLSQL编译过程总不行,一会还报锁住
CREATE OR REPLACE PROCEDURE TEMP_LIKE0914(V_RETCODE OUT VARCHAR2,
V_RETINFO OUT VARCHAR2) AS
V_SQL LONG;
V_SQL1 LONG;
I NUMBER := 1;
J NUMBER := 1;
TOTAL1 NUMBER := 0;
TOTAL2 NUMBER := 0;
TOTALEVERY NUMBER := 0;
BEGIN
V_SQL := 'OLD_357=UAGP2405+OLD_066+MWGG2001+OLD_087';
V_SQL1 := REGEXP_REPLACE(V_SQL, '[a-zA-Z]+=', '');
LOOP
SELECT INSTR(V_SQL1, '+', 1, J) INTO I FROM DUAL ;
SELECT KPI_VALUE1 INTO TOTALEVERY FROM DM.DM_KPI_DIFF_M@CUJFBA T
WHERE T.KPI_CODE = REGEXP_SUBSTR(V_SQL1, '[^+]+', 1, J)
AND T.ACCT_DATE = '201201'
AND T.PROV_ID = '011';
EXIT WHEN I = 0;
J := J + 1;
DBMS_OUTPUT.PUT_LINE(REGEXP_SUBSTR(V_SQL1, '[^+]+', 1, J)||'='||TOTALEVERY);
TOTAL1 := TOTAL1 + TOTALEVERY;
COMMIT;
END LOOP;
SELECT KPI_VALUE1
INTO TOTAL2
FROM DM.DM_KPI_DIFF_M@CUJFBA T
WHERE T.KPI_CODE = SUBSTR(V_SQL, 1, (INSTR(V_SQL, '=', 1, J) - 1))
AND T.ACCT_DATE = '201201'
AND T.PROV_ID = '011';
DBMS_OUTPUT.PUT_LINE(SUBSTR(V_SQL, 1, (INSTR(V_SQL, '=', 1, J) - 1))||'='||TOTAL2);
IF TOTAL1<>TOTAL2 THEN
DBMS_OUTPUT.PUT_LINE('错误');
ELSE
DBMS_OUTPUT.PUT_LINE('正确');
END IF;
V_RETCODE := 'SUCCESS ';
V_RETINFO := ' 结束 ';
EXCEPTION WHEN OTHERS THEN
V_RETCODE := 'FAIL';
V_RETINFO := '失败';
END;
------最佳解决方案--------------------commit要放到循环end loop;外
------其他解决方案--------------------我觉得你那条语句要么返回0行,要么返回>1行,报异常的时候需要看错误信息是什么。
或者你改为SELECT MAX(KPI_VALUE1) INTO TOTALEVERY FROM DM.DM_KPI_DIFF_M@CUJFBA T
------其他解决方案--------------------为什么我单步执行 执行到
SELECT KPI_VALUE1 INTO TOTALEVERY FROM DM.DM_KPI_DIFF_M@CUJFBA T
这里的时候 直接到了异常呢 我找了半天也找不到 先谢谢你commit的帮助 一会分数给你 请帮忙在解决下吧
------其他解决方案--------------------都是查询为什么要加commit呢?不过这个不应该是引起无法编译的问题,编译时有什么错误吗?
------其他解决方案--------------------