没有数据在oracle中找到错误 [英] No data Found error in oracle

查看:81
本文介绍了没有数据在oracle中找到错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,



在我目前的应用程序中,我有一个临时表和2个交易表。

我需要写SP从一个临时表中获取数据并更新或插入到事务表中的2个。

我的示例程序如下,但它不起作用。



我改变SP但得到错误没有找到数据。



如果有人有任何替代方法,请告诉我。



我使用的是CURSOR。

Hi all,

In my current app, I am having one temporary table and 2 transaction table.
I need to write the SP to take data from one temporary table and update or insert to 2 of the transaction table.
My sample procedure is like below, but its not working.

I alter the SP but got the error "No Data Found".

If anybody have any alternative way to do it please let me know.

I am using CURSOR.

Procedure    USP_OTC_TEMPTOACTUAL_DETAILS
   IS
 ERR_DESC VARCHAR2(4000);
 TCUSTOMER_CODE VARCHAR2(100);
 CUSTCODE VARCHAR2(100);
 TCUSTOMER_NAME VARCHAR2(100);
 TTOTAL_GROSS_DUE NUMBER;
 TOPENING_AMT NUMBER;
 TCURRENT_INVOICE_AMT NUMBER;
 TCOLLECTION_AMT NUMBER;
 TTOTAL_DUE NUMBER;
 TCLOSING_AMT NUMBER;
 TUNAPPLIED_AMT NUMBER;
 TNET_TOTAL_DUE NUMBER;
 TIS_ACTIVE VARCHAR2(10);
 TTEAM_LEAD VARCHAR2(100);
 TACC_MGR VARCHAR2(100);
 CUSTCNT NUMBER;
 TOTC_DESC1 VARCHAR2(100); TOTC_AMT1 NUMBER; TOTC_REPORTING_DATE1 DATE; TBD_REMARKS1 VARCHAR2(100); TRESOLUTION_DATE1 DATE;
TOTC_DESC2 VARCHAR2(100); TOTC_AMT2 NUMBER; TOTC_REPORTING_DATE2 DATE; TBD_REMARKS2 VARCHAR2(100); TRESOLUTION_DATE2 DATE;
TOTC_DESC3 VARCHAR2(100); TOTC_AMT3 NUMBER; TOTC_REPORTING_DATE3 DATE; TBD_REMARKS3 VARCHAR2(100); TRESOLUTION_DATE3 DATE;
TOTC_DESC4 VARCHAR2(100); TOTC_AMT4 NUMBER; TOTC_REPORTING_DATE4 DATE; TBD_REMARKS4 VARCHAR2(100); TRESOLUTION_DATE4 DATE;
TOTC_DESC5 VARCHAR2(100); TOTC_AMT5 NUMBER; TOTC_REPORTING_DATE5 DATE; TBD_REMARKS5 VARCHAR2(100); TRESOLUTION_DATE5 DATE;
TOTC_ID NUMBER;


    CURSOR C1 IS
    SELECT CUSTOMER_CODE,CUSTOMER_NAME,TOTAL_GROSS_DUE,OPENING_AMT,CURRENT_INVOICE_AMT,COLLECTION_AMT,TOTAL_DUE,
                CLOSING_AMT,UNAPPLIED_AMT,NET_TOTAL_DUE,IS_ACTIVE,TEAM_LEAD,ACC_MGR,
                OTC_DESC1,OTC_AMT1,OTC_REPORTING_DATE1,BD_REMARKS1,RESOLUTION_DATE1,
                OTC_DESC2,OTC_AMT2,OTC_REPORTING_DATE2,BD_REMARKS2,RESOLUTION_DATE2,
                OTC_DESC3,OTC_AMT3,OTC_REPORTING_DATE3,BD_REMARKS3,RESOLUTION_DATE3,
                OTC_DESC4,OTC_AMT4,OTC_REPORTING_DATE4,BD_REMARKS4,RESOLUTION_DATE4,
                OTC_DESC5,OTC_AMT5,OTC_REPORTING_DATE5,BD_REMARKS5,RESOLUTION_DATE5
     FROM OTC_TEMP_UPLOAD;
   
   BEGIN
    OPEN C1;
    LOOP
    FETCH C1 INTO TCUSTOMER_CODE,TCUSTOMER_NAME,TTOTAL_GROSS_DUE,TOPENING_AMT,TCURRENT_INVOICE_AMT,TCOLLECTION_AMT,TTOTAL_DUE,
                TCLOSING_AMT,TUNAPPLIED_AMT,TNET_TOTAL_DUE,TIS_ACTIVE,TTEAM_LEAD,TACC_MGR,
                TOTC_DESC1,TOTC_AMT1,TOTC_REPORTING_DATE1,TBD_REMARKS1,TRESOLUTION_DATE1,
                TOTC_DESC2,TOTC_AMT2,TOTC_REPORTING_DATE2,TBD_REMARKS2,TRESOLUTION_DATE2,
                TOTC_DESC3,TOTC_AMT3,TOTC_REPORTING_DATE3,TBD_REMARKS3,TRESOLUTION_DATE3,
                TOTC_DESC4,TOTC_AMT4,TOTC_REPORTING_DATE4,TBD_REMARKS4,TRESOLUTION_DATE4,
                TOTC_DESC5,TOTC_AMT5,TOTC_REPORTING_DATE5,TBD_REMARKS5,TRESOLUTION_DATE5;
   --INSERT INTO TEMP (VALS) VALUES('CUSTOMER DETAILS ' || TCUSTOMER_CODE);
   SELECT COUNT(*) INTO CUSTCNT FROM OTC_CUSTOMER_DETAILS WHERE CUSTOMER_CODE=TCUSTOMER_CODE;
   --INSERT INTO TEMP (VALS) VALUES('TOTAL GROSS DUE ' || TTOTAL_GROSS_DUE);
   --INSERT INTO TEMP (VALS) VALUES('CUSTOMER DETAILS ' || CUSTCNT);

    IF CUSTCNT>0 THEN
        SELECT DISTINCT CUSTOMER_CODE INTO CUSTCODE FROM OTC_CUSTOMER_DETAILS WHERE CUSTOMER_CODE=TCUSTOMER_CODE;
        --INSERT INTO TEMP (VALS) VALUES('CUSTOMERCODE ' || CUSTCODE);
        --COMMIT;
    END IF;

    IF (CUSTCNT=0 OR TCUSTOMER_CODE != CUSTCODE) THEN
        BEGIN

            INSERT INTO OTC_CUSTOMER_DETAILS
             (
               CUSTOMER_ID,CUSTOMER_CODE,CUSTOMER_NAME,TOTAL_GROSS_DUE,OPENING_AMT,CURRENT_INVOICE_AMT,
               COLLECTION_AMT,TOTAL_DUE,CLOSING_AMT,UNAPPLIED_AMT,NET_TOTAL_DUE,IS_ACTIVE,TEAM_LEAD,ACC_MGR
               )
               VALUES               
               (1,TCUSTOMER_CODE,TCUSTOMER_NAME,ROUND(TTOTAL_GROSS_DUE,5),ROUND(TOPENING_AMT,5),ROUND(TCURRENT_INVOICE_AMT,5),ROUND(TCOLLECTION_AMT,5),
                ROUND(TTOTAL_DUE,5),ROUND(TCLOSING_AMT,5),ROUND(TUNAPPLIED_AMT,5),ROUND(TNET_TOTAL_DUE,5),TIS_ACTIVE,TTEAM_LEAD,TACC_MGR);

              IF (LENGTH(TOTC_DESC1)>0) THEN
               SELECT OTC_ID INTO TOTC_ID FROM OTC_MASTER WHERE OTC_DESC=TOTC_DESC1;
               INSERT INTO OTC_DETAILS(OTC_ID,CUSTOMER_CODE,OTC_AMT,OTC_REPORTING_DATE,BD_REMARKS,RESOLUTION_DATE)
                VALUES (TOTC_ID,TCUSTOMER_CODE,ROUND(TOTC_AMT1,5),TOTC_REPORTING_DATE1,TBD_REMARKS1,TRESOLUTION_DATE1);
               --INSERT INTO TEMP (VALS) VALUES('OTCID ' || TOTC_ID);
              END IF;

            IF (LENGTH(TOTC_DESC2)>0) THEN
                BEGIN
                SELECT OTC_ID INTO TOTC_ID FROM OTC_MASTER WHERE OTC_DESC=TOTC_DESC2;
                INSERT INTO OTC_DETAILS(OTC_ID,CUSTOMER_CODE,OTC_AMT,OTC_REPORTING_DATE,BD_REMARKS,RESOLUTION_DATE)
                    VALUES (TOTC_ID,TCUSTOMER_CODE,ROUND(TOTC_AMT2,5),TOTC_REPORTING_DATE2,TBD_REMARKS2,TRESOLUTION_DATE2);
                END;
            END IF;

            IF (LENGTH(TOTC_DESC3)>0) THEN
                SELECT OTC_ID INTO TOTC_ID FROM OTC_MASTER WHERE OTC_DESC=TOTC_DESC3;
              INSERT INTO OTC_DETAILS(OTC_ID,CUSTOMER_CODE,OTC_AMT,OTC_REPORTING_DATE,BD_REMARKS,RESOLUTION_DATE)
                VALUES (TOTC_ID,TCUSTOMER_CODE,ROUND(TOTC_AMT3,5),TOTC_REPORTING_DATE3,TBD_REMARKS3,TRESOLUTION_DATE3);
            END IF;

            IF (LENGTH(TOTC_DESC4)>0) THEN
                SELECT OTC_ID INTO TOTC_ID FROM OTC_MASTER WHERE OTC_DESC=TOTC_DESC4;
              INSERT INTO OTC_DETAILS(OTC_ID,CUSTOMER_CODE,OTC_AMT,OTC_REPORTING_DATE,BD_REMARKS,RESOLUTION_DATE)
                VALUES (TOTC_ID,TCUSTOMER_CODE,ROUND(TOTC_AMT4,5),TOTC_REPORTING_DATE4,TBD_REMARKS4,TRESOLUTION_DATE4);
            END IF;

            IF (LENGTH(TOTC_DESC5)>0) THEN
                SELECT OTC_ID INTO TOTC_ID FROM OTC_MASTER WHERE OTC_DESC=TOTC_DESC5;
              INSERT INTO OTC_DETAILS(OTC_ID,CUSTOMER_CODE,OTC_AMT,OTC_REPORTING_DATE,BD_REMARKS,RESOLUTION_DATE)
                VALUES (TOTC_ID,TCUSTOMER_CODE,ROUND(TOTC_AMT5,5),TOTC_REPORTING_DATE5,TBD_REMARKS5,TRESOLUTION_DATE5);
            END IF;
        COMMIT;
        END;
    ELSE
    BEGIN
          UPDATE OTC_CUSTOMER_DETAILS set
               CUSTOMER_CODE=TCUSTOMER_CODE,CUSTOMER_NAME=TCUSTOMER_NAME,TOTAL_GROSS_DUE=ROUND(TTOTAL_GROSS_DUE,5),
               OPENING_AMT=ROUND(TOPENING_AMT,5),CURRENT_INVOICE_AMT=ROUND(TCURRENT_INVOICE_AMT,5),
               COLLECTION_AMT=ROUND(TCOLLECTION_AMT,5),TOTAL_DUE=ROUND(TTOTAL_DUE,5),CLOSING_AMT=ROUND(TCLOSING_AMT,5),
               UNAPPLIED_AMT=ROUND(TUNAPPLIED_AMT,5),NET_TOTAL_DUE=ROUND(TNET_TOTAL_DUE,5),
               IS_ACTIVE=TIS_ACTIVE,TEAM_LEAD=TTEAM_LEAD,ACC_MGR=TACC_MGR             
          
         WHERE CUSTOMER_CODE=TCUSTOMER_CODE;
         --INSERT INTO TEMP (VALS) VALUES('CUSTOMEE NAME ' || TCUSTOMER_NAME);
              IF (LENGTH(TOTC_DESC1)>0) THEN
                  SELECT OTC_ID INTO TOTC_ID FROM OTC_MASTER WHERE OTC_DESC=TOTC_DESC2;
                   UPDATE OTC_DETAILS SET
                        OTC_ID=TOTC_ID,
                        OTC_AMT=ROUND(TOTC_AMT1,5),OTC_REPORTING_DATE=TOTC_REPORTING_DATE1,
                        BD_REMARKS=TBD_REMARKS1,RESOLUTION_DATE=TRESOLUTION_DATE1
                   WHERE CUSTOMER_CODE=TCUSTOMER_CODE;
              END IF;

            IF (LENGTH(TOTC_DESC2)>0) THEN
                SELECT OTC_ID INTO TOTC_ID FROM OTC_MASTER WHERE OTC_DESC=TOTC_DESC2;
              UPDATE OTC_DETAILS SET
                        OTC_ID=TOTC_ID,
                        OTC_AMT=ROUND(TOTC_AMT2,5),OTC_REPORTING_DATE=TOTC_REPORTING_DATE2,
                        BD_REMARKS=TBD_REMARKS2,RESOLUTION_DATE=TRESOLUTION_DATE2
                   WHERE CUSTOMER_CODE=TCUSTOMER_CODE;
            END IF;

            IF (LENGTH(TOTC_DESC3)>0) THEN
                SELECT OTC_ID INTO TOTC_ID FROM OTC_MASTER WHERE OTC_DESC=TOTC_DESC3;
              UPDATE OTC_DETAILS SET
                        OTC_ID=TOTC_ID,
                        OTC_AMT=ROUND(TOTC_AMT3,5),OTC_REPORTING_DATE=TOTC_REPORTING_DATE3,
                        BD_REMARKS=TBD_REMARKS3,RESOLUTION_DATE=TRESOLUTION_DATE3
                   WHERE CUSTOMER_CODE=TCUSTOMER_CODE;
            END IF;

            IF (LENGTH(TOTC_DESC4)>0) THEN
                SELECT OTC_ID INTO TOTC_ID FROM OTC_MASTER WHERE OTC_DESC=TOTC_DESC4;
              UPDATE OTC_DETAILS SET
                        OTC_ID=TOTC_ID,
                        OTC_AMT=ROUND(TOTC_AMT4,5),OTC_REPORTING_DATE=TOTC_REPORTING_DATE4,
                        BD_REMARKS=TBD_REMARKS4,RESOLUTION_DATE=TRESOLUTION_DATE4
                   WHERE CUSTOMER_CODE=TCUSTOMER_CODE;
            END IF;

            IF (LENGTH(TOTC_DESC5)>0) THEN
                SELECT OTC_ID INTO TOTC_ID FROM OTC_MASTER WHERE OTC_DESC=TOTC_DESC5;
              UPDATE OTC_DETAILS SET
                        OTC_ID=TOTC_ID,
                        OTC_AMT=ROUND(TOTC_AMT5,5),OTC_REPORTING_DATE=TOTC_REPORTING_DATE5,
                        BD_REMARKS=TBD_REMARKS5,RESOLUTION_DATE=TRESOLUTION_DATE5
                   WHERE CUSTOMER_CODE=TCUSTOMER_CODE;
            END IF;
            COMMIT;
         END;
    END IF;
 END LOOP;
 CLOSE C1;

EXCEPTION
     WHEN others THEN
     ROLLBACK;
       ERR_DESC:=SQLERRM;
        INSERT INTO OTC_EXCEPTION(ERROR_DESCRIPTION,SP_NAME) VALUES(ERR_DESC,'USP_OTC_TEMPTOACTUAL_DETAILS') ;
            COMMIT;
END; -- Procedure USP_OTC_TEMPTOATCUAL_UPDATE_N


-- End of DDL script for USP_OTC_TEMPTOACTUAL_DETAILS



在此先感谢

Yogesh


Thanks In Advance
Yogesh

推荐答案

您好



查看以下链接



ORA-01403:未找到数据提示
[ ^ ]

Oracle/PLSQL:避免PLSQL代码中出现未找到数据错误 [ ^ ]



问候,

GVPrabu
Hi

Check the following links

ORA-01403: no data found tips
[^]
Oracle/PLSQL: Avoid "data not found" error in PLSQL code[^]

Regards,
GVPrabu


这篇关于没有数据在oracle中找到错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆