如果 child table 在 Oracle 中有一个 sysdate 记录,则限制在 master table 中插入数据

Restrict inserting data in master table if child table has one record for the sysdate in Oracle

我有一个 stored-procedure 可以在 Master table 和 child table 中插入记录。逻辑是 child table 当前可以有多个条目。但是由于有时有多个条目,如果我们尝试使用两个不同的浏览器插入相同的记录,则会在 child table.

中发生重复

甚至我们想要该记录的多个条目而不是重复的条目。

下面是我的table信息。

TBL_FIBER_INV_JOBS 硕士table TBL_FIBER_INV_JOB_PROGRESS Child table

下面还有 SP 和 table 描述。

PROCEDURE INS_WORKFLOW
(
  PSPAN_ID IN TBL_FIBER_INV_JOBS.SPAN_ID%TYPE,
    PLINK_ID IN TBL_FIBER_INV_JOBS.LINK_ID%TYPE,
    PCREATED_BY IN TBL_FIBER_INV_JOBS.CREATED_BY%TYPE,
    PMAINTENANCEZONECODE IN TBL_FIBER_INV_JOBS.MAINTENANCEZONECODE%TYPE,
    PMAINTENANCEZONENAME IN TBL_FIBER_INV_JOBS.MAINTENANCEZONENAME%TYPE,
    PMAINT_ZONE_NE_SPAN_LENGTH IN TBL_FIBER_INV_JOBS.MAINT_ZONE_NE_SPAN_LENGTH%TYPE,
    PSTATUS_ID IN TBL_FIBER_INV_JOB_PROGRESS.STATUS_ID%TYPE,
    PHOTO_OFFERED_DATE IN NVARCHAR2,
    PAPPROV_REJECT_REMARK IN TBL_FIBER_INV_JOB_PROGRESS.APPROV_REJECT_REMARK%TYPE,
    PISABDMISSING IN TBL_FIBER_INV_JOB_PROGRESS.ISABDMISSING%TYPE,
    PHOTO_OFFERED_LENGTH IN TBL_FIBER_INV_JOB_PROGRESS.HOTO_OFFERED_LENGTH%TYPE,
    PUMS_GROUP_ASS_BY_ID IN TBL_FIBER_INV_JOB_PROGRESS.UMS_GROUP_ASS_BY_ID%TYPE,
    PUMS_GROUP_ASS_BY_NAME IN TBL_FIBER_INV_JOB_PROGRESS.UMS_GROUP_ASS_BY_NAME%TYPE,
    PUMS_GROUP_ASS_TO_ID IN TBL_FIBER_INV_JOB_PROGRESS.UMS_GROUP_ASS_TO_ID%TYPE,
    PUMS_GROUP_ASS_TO_NAME IN TBL_FIBER_INV_JOB_PROGRESS.UMS_GROUP_ASS_TO_NAME%TYPE,
    PSPAN_TYPE IN TBL_FIBER_INV_JOBS.SPAN_TYPE%TYPE,
    POUTMSG OUT NVARCHAR2
) 
AS
PJOB_PROGRESS_ID NUMBER:=0;
PJOB_ID NUMBER :=0;
PCNT_JOBID NUMBER :=-1;
PNELENGTH NUMBER:=0;
PUGLENGTH NUMBER:=0;
PARLENGTH NUMBER:=0;

BEGIN
    --execute immediate 'alter session set nls_date_format = ''DD/MM/YYYY''';
    IF PSPAN_TYPE = 'INTRACITY' OR PSPAN_TYPE = 'ENTERPRISE' THEN
    BEGIN
         SELECT COUNT(JOB_ID) INTO PCNT_JOBID 
            FROM TBL_FIBER_INV_JOBS
            WHERE LINK_ID = PLINK_ID
            AND MAINTENANCEZONECODE = PMAINTENANCEZONECODE;
            
            SELECT  ROUND(SUM(NVL(CALCULATED_LENGTH,0)/1000),4) AS NE_LENGTH,
 ROUND(SUM(CASE WHEN RJ_CONSTRUCTION_METHODOLOGY NOT LIKE '%AERIAL%' OR RJ_CONSTRUCTION_METHODOLOGY IS  NULL OR RJ_CONSTRUCTION_METHODOLOGY NOT LIKE '%CLAMP%' THEN NVL(CALCULATED_LENGTH,0) ELSE 0 END)/1000,4) AS UG_LEN
       ,ROUND(SUM(CASE WHEN RJ_CONSTRUCTION_METHODOLOGY LIKE '%AERIAL%' OR RJ_CONSTRUCTION_METHODOLOGY LIKE '%CLAMP%'  THEN NVL(CALCULATED_LENGTH,0) ELSE 0 END)/1000,4) AS AR_LEN

               INTO PNELENGTH,PUGLENGTH,PARLENGTH
          FROM NE.MV_SPAN@DB_LINK_NE_VIEWER 
    --FROM APP_FTTX.span@sat
              WHERE RJ_INTRACITY_LINK_ID = PLINK_ID
              AND INVENTORY_STATUS_CODE = 'IPL'
              AND RJ_MAINTENANCE_ZONE_CODE = PMAINTENANCEZONECODE
              GROUP BY RJ_INTRACITY_LINK_ID,RJ_MAINTENANCE_ZONE_CODE;
    END;
    ELSIF PSPAN_TYPE = 'INTERCITY' THEN
    BEGIN
          SELECT COUNT(JOB_ID) INTO PCNT_JOBID 
              FROM TBL_FIBER_INV_JOBS
              WHERE SPAN_ID = PSPAN_ID
              AND MAINTENANCEZONECODE = PMAINTENANCEZONECODE;
        ---CR981 implemenation
         IF LENGTH(PSPAN_ID) = 9  THEN
         BEGIN              
           SELECT  ROUND(SUM(NVL(CALCULATED_LENGTH,0)/1000),4) AS NE_LENGTH,
 ROUND(SUM(CASE WHEN RJ_CONSTRUCTION_METHODOLOGY NOT LIKE '%AERIAL%' OR RJ_CONSTRUCTION_METHODOLOGY IS  NULL OR RJ_CONSTRUCTION_METHODOLOGY NOT LIKE '%CLAMP%' THEN NVL(CALCULATED_LENGTH,0) ELSE 0 END)/1000,4) AS UG_LEN
       ,ROUND(SUM(CASE WHEN RJ_CONSTRUCTION_METHODOLOGY LIKE '%AERIAL%' OR RJ_CONSTRUCTION_METHODOLOGY LIKE '%CLAMP%'  THEN NVL(CALCULATED_LENGTH,0) ELSE 0 END)/1000,4) AS AR_LEN

               INTO PNELENGTH,PUGLENGTH,PARLENGTH
         FROM NE.MV_SPAN@DB_LINK_NE_VIEWER 
    --FROM APP_FTTX.span@sat
              WHERE RJ_INTRACITY_LINK_ID = PSPAN_ID
              AND INVENTORY_STATUS_CODE = 'IPL'
              AND RJ_MAINTENANCE_ZONE_CODE = PMAINTENANCEZONECODE
              GROUP BY RJ_INTRACITY_LINK_ID,RJ_MAINTENANCE_ZONE_CODE;
         END;
         ELSE
         BEGIN
          SELECT  ROUND(SUM(NVL(CALCULATED_LENGTH,0)/1000),4) AS NE_LENGTH,
        ROUND(SUM(CASE WHEN RJ_CONSTRUCTION_METHODOLOGY NOT LIKE '%AERIAL%' OR RJ_CONSTRUCTION_METHODOLOGY IS  NULL OR RJ_CONSTRUCTION_METHODOLOGY NOT LIKE '%CLAMP%' THEN NVL(CALCULATED_LENGTH,0) ELSE 0 END)/1000,4) AS UG_LEN
   ,ROUND(SUM(CASE WHEN RJ_CONSTRUCTION_METHODOLOGY LIKE '%AERIAL%' OR RJ_CONSTRUCTION_METHODOLOGY LIKE '%CLAMP%'  THEN NVL(CALCULATED_LENGTH,0) ELSE 0 END)/1000,4) AS AR_LEN
              
               INTO PNELENGTH,PUGLENGTH,PARLENGTH
          FROM NE.MV_SPAN@DB_LINK_NE_VIEWER 
    --FROM APP_FTTX.span@sat
              WHERE RJ_SPAN_ID = PSPAN_ID
              AND INVENTORY_STATUS_CODE = 'IPL'
              AND (NOT REGEXP_LIKE (RJ_INTRACITY_LINK_ID,'_(9)','i') OR RJ_INTRACITY_LINK_ID IS NULL)
              AND RJ_MAINTENANCE_ZONE_CODE = PMAINTENANCEZONECODE
              GROUP BY RJ_SPAN_ID,RJ_MAINTENANCE_ZONE_CODE;
         END;
         END IF;
        
    END;
    END IF;
    IF PCNT_JOBID = 0 THEN
    BEGIN        
        INSERT
        INTO TBL_FIBER_INV_JOBS
          (
            SPAN_ID,
            LINK_ID,
            CREATED_BY,
            MAINTENANCEZONECODE,
            MAINTENANCEZONENAME,
            MAINT_ZONE_NE_SPAN_LENGTH,
            SPAN_TYPE,
            FSA_UG,
            FSA_AERIAL
          )
          VALUES
          (
            PSPAN_ID,
            PLINK_ID,
            PCREATED_BY,
            PMAINTENANCEZONECODE,
            PMAINTENANCEZONENAME,
            --PMAINT_ZONE_NE_SPAN_LENGTH,
            PNELENGTH,
            PSPAN_TYPE,
            PUGLENGTH,
            PARLENGTH
          )RETURNING JOB_ID INTO PJOB_ID;
        IF PJOB_ID > 0 THEN
        BEGIN
            INSERT
            INTO TBL_FIBER_INV_JOB_PROGRESS
              (
                JOB_ID,
                STATUS_ID,
                HOTO_OFFERED_DATE,
                APPROV_REJECT_REMARK,
                ISABDMISSING,
                HOTO_OFFERED_LENGTH,
                NE_SPAN_LENGTH,
                CREATED_BY,
                UMS_GROUP_ASS_BY_ID,
                UMS_GROUP_ASS_BY_NAME,
                UMS_GROUP_ASS_TO_ID,
                UMS_GROUP_ASS_TO_NAME,
                UMS_GROUP_ASS_TO_DATE,
                MODIFIED_BY,
                MODIFIED_DATE,
                APPROVED_BY,
                APPROVED_DATE,
                FSA_UG,
                FSA_AERIAL
              )
              VALUES
              (
                PJOB_ID,
                PSTATUS_ID,
                TO_DATE(PHOTO_OFFERED_DATE,'DD/MM/YYYY'),
                PAPPROV_REJECT_REMARK,
                PISABDMISSING,
                PHOTO_OFFERED_LENGTH,
                --PMAINT_ZONE_NE_SPAN_LENGTH,
                PNELENGTH,
                PCREATED_BY,
                PUMS_GROUP_ASS_BY_ID,
                PUMS_GROUP_ASS_BY_NAME,
                PUMS_GROUP_ASS_TO_ID,
                PUMS_GROUP_ASS_TO_NAME,
                SYSDATE,
                PCREATED_BY,
                SYSDATE,
                PCREATED_BY,
                SYSDATE,
                -- PUG_LENGTH,
              --  PAR_LENGTH
                PUGLENGTH,
                PARLENGTH
              )RETURNING JOB_PROGRESS_ID INTO PJOB_PROGRESS_ID;
          END;
          END IF;
          IF PJOB_PROGRESS_ID > 0 THEN
          BEGIN
            POUTMSG := 'SUCCESS|'||PJOB_PROGRESS_ID;
            COMMIT;
          END;
          ELSE
          BEGIN
            POUTMSG := 'FAILED|Record not created';
            ROLLBACK;
          END;
          END IF;
      END;
      ELSE
      BEGIN
          POUTMSG := 'EXISTS|Record already exists';
      END;
      END IF;
  EXCEPTION  
    WHEN OTHERS THEN
      ERROR_CODE := SQLCODE;
      ERROR_MESSAGE := SUBSTR(SQLERRM, 1, 200);
      ROLLBACK;
      POUTMSG := 'ERROR|Error ocurred on record creation';
      PKG_FIBER_HOTO_COMP_TEST.INS_ERRORLOG(PCREATED_BY,PSPAN_ID||PLINK_ID,'DB : INS_WORKFLOW',ERROR_CODE||' : '||ERROR_MESSAGE);
END INS_WORKFLOW;

下面还有table描述

TBL_FIBER_INV_JOBS

Name                        Null     Type           
--------------------------- -------- -------------- 
JOB_ID                      NOT NULL NUMBER         PK
SPAN_ID                              NVARCHAR2(100) 
LINK_ID                              NVARCHAR2(100) 
CREATED_BY                           NVARCHAR2(200) 
CREATED_DATE                NOT NULL DATE           
MAINTENANCEZONECODE                  NVARCHAR2(50)  
MAINTENANCEZONENAME                  NVARCHAR2(100) 
MAINT_ZONE_NE_SPAN_LENGTH            NUMBER         
SPAN_TYPE                            NVARCHAR2(20)  
JOB_FLAG                             NUMBER         
MISSING_ABD_LENGTH                   NUMBER(38,10)  
REOFFERFLAG                          VARCHAR2(10)   
FSA_ID                               NVARCHAR2(8)   
FSA_COMMON                           NUMBER         
FSA_UG                               NUMBER         
FSA_AERIAL                           NUMBER         
FSA_MDU                              NUMBER         
MISSING_ABD_UG                       NUMBER         
MISSING_ABD_AR                       NUMBER         
CALCULATED_LENGTH                    NUMBER         
RJ_CONSTRUCTION_METHODOLOGY          NUMBER 


TBL_FIBER_INV_JOB_PROGRESS

Name                  Null     Type           
--------------------- -------- -------------- 
JOB_PROGRESS_ID       NOT NULL NUMBER        
JOB_ID                         NUMBER      FK   
STATUS_ID                      NUMBER         
HOTO_OFFERED_DATE              DATE           
HOTO_ACCEPTENCE_DATE           DATE           
LIT_ACCEPTENCE_DATE            DATE           
APPROVED_BY                    NVARCHAR2(200) 
APPROVED_DATE                  DATE           
REJECTED_BY                    NVARCHAR2(200) 
REJECTED_DATE                  DATE           
APPROV_REJECT_REMARK           NVARCHAR2(255) 
DELAY_REASON                   NVARCHAR2(255) 
ISABDMISSING                   NUMBER         
HOTO_OFFERED_LENGTH            NUMBER         
LIT_OFFERED_LENGTH             NUMBER         
HOTO_ACTUAL_LENGTH             NUMBER         
LIT_ACTUAL_LENGTH              NUMBER         
ABD_COMPLETED_LENGTH           NUMBER         
NE_SPAN_LENGTH                 NUMBER         
CREATED_BY                     NVARCHAR2(200) 
CREATED_DATE          NOT NULL DATE           
MODIFIED_BY                    NVARCHAR2(200) 
MODIFIED_DATE                  DATE           
UMS_GROUP_ASS_BY_ID            NUMBER         
UMS_GROUP_ASS_BY_NAME          NVARCHAR2(200) 
UMS_GROUP_ASS_TO_ID            NUMBER         
UMS_GROUP_ASS_TO_NAME          NVARCHAR2(200) 
UMS_GROUP_ASS_TO_DATE          DATE           
JOB_PROGRESS_FLAG     NOT NULL NUMBER         
HOTO_OFFER_LEN_UPD_BY          NVARCHAR2(200) 
FSA_COMMON                     NUMBER         
FSA_UG                         NUMBER         
FSA_AERIAL                     NUMBER         
FSA_MDU                        NUMBER         
FSA_UG_ACTUAL                  NUMBER         
FSA_AERIAL_ACTUAL              NUMBER         
FSA_MDU_ACTUAL                 NUMBER  

我会尝试看看这个解决方案是否符合您的要求。关键因素:

  • 我删除了所有不需要的开始结束块。当你想控制那些块上的异常时,你只需要指定块。
  • 如果 child 存在于已插入的 parent 中,则它已由事务级别 READ UNCOMMITTED 控制。因此,当 child 存在于 parent created_date
  • 时,我可以计算 child 中相同 P_JOBID 的记录
  • 我在该列上使用了 to_char,因为我不知道您有哪些 NLS_DATE 设置。

如有任何疑问,请告诉我。

更新

只要使用 SERVEROUPUT ON 或 DBMS_OUTPUT.ENABLE 执行过程并且会话配置为捕获输出,就可以显示消息。

PROCEDURE INS_WORKFLOW
(
    PSPAN_ID IN TBL_FIBER_INV_JOBS.SPAN_ID%TYPE,
    PLINK_ID IN TBL_FIBER_INV_JOBS.LINK_ID%TYPE,
    PCREATED_BY IN TBL_FIBER_INV_JOBS.CREATED_BY%TYPE,
    PMAINTENANCEZONECODE IN TBL_FIBER_INV_JOBS.MAINTENANCEZONECODE%TYPE,
    PMAINTENANCEZONENAME IN TBL_FIBER_INV_JOBS.MAINTENANCEZONENAME%TYPE,
    PMAINT_ZONE_NE_SPAN_LENGTH IN TBL_FIBER_INV_JOBS.MAINT_ZONE_NE_SPAN_LENGTH%TYPE,
    PSTATUS_ID IN TBL_FIBER_INV_JOB_PROGRESS.STATUS_ID%TYPE,
    PHOTO_OFFERED_DATE IN NVARCHAR2,
    PAPPROV_REJECT_REMARK IN TBL_FIBER_INV_JOB_PROGRESS.APPROV_REJECT_REMARK%TYPE,
    PISABDMISSING IN TBL_FIBER_INV_JOB_PROGRESS.ISABDMISSING%TYPE,
    PHOTO_OFFERED_LENGTH IN TBL_FIBER_INV_JOB_PROGRESS.HOTO_OFFERED_LENGTH%TYPE,
    PUMS_GROUP_ASS_BY_ID IN TBL_FIBER_INV_JOB_PROGRESS.UMS_GROUP_ASS_BY_ID%TYPE,
    PUMS_GROUP_ASS_BY_NAME IN TBL_FIBER_INV_JOB_PROGRESS.UMS_GROUP_ASS_BY_NAME%TYPE,
    PUMS_GROUP_ASS_TO_ID IN TBL_FIBER_INV_JOB_PROGRESS.UMS_GROUP_ASS_TO_ID%TYPE,
    PUMS_GROUP_ASS_TO_NAME IN TBL_FIBER_INV_JOB_PROGRESS.UMS_GROUP_ASS_TO_NAME%TYPE,
    PSPAN_TYPE IN TBL_FIBER_INV_JOBS.SPAN_TYPE%TYPE,
    POUTMSG OUT NVARCHAR2
) 
AS
PJOB_PROGRESS_ID NUMBER:=0;
PJOB_ID NUMBER :=0;
PCNT_JOBID NUMBER :=-1;
PNELENGTH NUMBER:=0;
PUGLENGTH NUMBER:=0;
PARLENGTH NUMBER:=0;
VCOUNTERCHILD PLS_INTEGER;
BEGIN
    --execute immediate 'alter session set nls_date_format = ''DD/MM/YYYY''';
    IF ( PSPAN_TYPE = 'INTRACITY' OR PSPAN_TYPE = 'ENTERPRISE' ) 
    THEN
        SELECT COUNT(JOB_ID) INTO PCNT_JOBID 
        FROM TBL_FIBER_INV_JOBS
        WHERE LINK_ID = PLINK_ID
        AND MAINTENANCEZONECODE = PMAINTENANCEZONECODE;
            
        SELECT  ROUND(SUM(NVL(CALCULATED_LENGTH,0)/1000),4) AS NE_LENGTH,
        ROUND(SUM(CASE WHEN RJ_CONSTRUCTION_METHODOLOGY NOT LIKE '%AERIAL%' OR RJ_CONSTRUCTION_METHODOLOGY IS  NULL OR RJ_CONSTRUCTION_METHODOLOGY NOT LIKE '%CLAMP%' THEN NVL(CALCULATED_LENGTH,0) ELSE 0 END)/1000,4) AS UG_LEN
       ,ROUND(SUM(CASE WHEN RJ_CONSTRUCTION_METHODOLOGY LIKE '%AERIAL%' OR RJ_CONSTRUCTION_METHODOLOGY LIKE '%CLAMP%'  THEN NVL(CALCULATED_LENGTH,0) ELSE 0 END)/1000,4) AS AR_LEN
        INTO PNELENGTH,PUGLENGTH,PARLENGTH
          FROM NE.MV_SPAN@DB_LINK_NE_VIEWER 
    --FROM APP_FTTX.span@sat
              WHERE RJ_INTRACITY_LINK_ID = PLINK_ID
              AND INVENTORY_STATUS_CODE = 'IPL'
              AND RJ_MAINTENANCE_ZONE_CODE = PMAINTENANCEZONECODE
              GROUP BY RJ_INTRACITY_LINK_ID,RJ_MAINTENANCE_ZONE_CODE;
    ELSIF PSPAN_TYPE = 'INTERCITY' 
    THEN
          SELECT COUNT(JOB_ID) INTO PCNT_JOBID 
              FROM TBL_FIBER_INV_JOBS
              WHERE SPAN_ID = PSPAN_ID
              AND MAINTENANCEZONECODE = PMAINTENANCEZONECODE;
        ---CR981 implemenation
          IF LENGTH(PSPAN_ID) = 9  
          THEN
           SELECT  ROUND(SUM(NVL(CALCULATED_LENGTH,0)/1000),4) AS NE_LENGTH,
           ROUND(SUM(CASE WHEN RJ_CONSTRUCTION_METHODOLOGY NOT LIKE '%AERIAL%' OR RJ_CONSTRUCTION_METHODOLOGY IS  NULL OR RJ_CONSTRUCTION_METHODOLOGY NOT LIKE '%CLAMP%' THEN NVL(CALCULATED_LENGTH,0) ELSE 0 END)/1000,4) AS UG_LEN
          ,ROUND(SUM(CASE WHEN RJ_CONSTRUCTION_METHODOLOGY LIKE '%AERIAL%' OR RJ_CONSTRUCTION_METHODOLOGY LIKE '%CLAMP%'  THEN NVL(CALCULATED_LENGTH,0) ELSE 0 END)/1000,4) AS AR_LEN
               INTO PNELENGTH,PUGLENGTH,PARLENGTH
           FROM NE.MV_SPAN@DB_LINK_NE_VIEWER 
           --FROM APP_FTTX.span@sat
              WHERE RJ_INTRACITY_LINK_ID = PSPAN_ID
              AND INVENTORY_STATUS_CODE = 'IPL'
              AND RJ_MAINTENANCE_ZONE_CODE = PMAINTENANCEZONECODE
              GROUP BY RJ_INTRACITY_LINK_ID,RJ_MAINTENANCE_ZONE_CODE;
         ELSE
             SELECT  ROUND(SUM(NVL(CALCULATED_LENGTH,0)/1000),4) AS NE_LENGTH,
              ROUND(SUM(CASE WHEN RJ_CONSTRUCTION_METHODOLOGY NOT LIKE '%AERIAL%' OR RJ_CONSTRUCTION_METHODOLOGY IS  NULL OR RJ_CONSTRUCTION_METHODOLOGY NOT LIKE '%CLAMP%' THEN NVL(CALCULATED_LENGTH,0) ELSE 0 END)/1000,4) AS UG_LEN
             ,ROUND(SUM(CASE WHEN RJ_CONSTRUCTION_METHODOLOGY LIKE '%AERIAL%' OR RJ_CONSTRUCTION_METHODOLOGY LIKE '%CLAMP%'  THEN NVL(CALCULATED_LENGTH,0) ELSE 0 END)/1000,4) AS AR_LEN
              INTO PNELENGTH,PUGLENGTH,PARLENGTH
              FROM NE.MV_SPAN@DB_LINK_NE_VIEWER 
              --FROM APP_FTTX.span@sat
              WHERE RJ_SPAN_ID = PSPAN_ID
              AND INVENTORY_STATUS_CODE = 'IPL'
              AND (NOT REGEXP_LIKE (RJ_INTRACITY_LINK_ID,'_(9)','i') OR RJ_INTRACITY_LINK_ID IS NULL)
              AND RJ_MAINTENANCE_ZONE_CODE = PMAINTENANCEZONECODE
              GROUP BY RJ_SPAN_ID,RJ_MAINTENANCE_ZONE_CODE;
         END IF;
    END IF;

    IF PCNT_JOBID = 0 
    THEN
        INSERT
        INTO TBL_FIBER_INV_JOBS
          (
            SPAN_ID,
            LINK_ID,
            CREATED_BY,
            MAINTENANCEZONECODE,
            MAINTENANCEZONENAME,
            MAINT_ZONE_NE_SPAN_LENGTH,
            SPAN_TYPE,
            FSA_UG,
            FSA_AERIAL
          )
          VALUES
          (
            PSPAN_ID,
            PLINK_ID,
            PCREATED_BY,
            PMAINTENANCEZONECODE,
            PMAINTENANCEZONENAME,
            --PMAINT_ZONE_NE_SPAN_LENGTH,
            PNELENGTH,
            PSPAN_TYPE,
            PUGLENGTH,
            PARLENGTH
          )RETURNING JOB_ID INTO PJOB_ID;
          IF PJOB_ID > 0 
          THEN
            SELECT COUNT(*) INTO VCOUNTERCHILD FROM 
   TBL_FIBER_INV_JOB_PROGRESS c INNER JOIN  TBL_FIBER_INV_JOBS p 
        ON c.job_id=p.job_id and c.job_id = PJOB_ID and 
      to_char(p.CREATED_DATE,'dd/mm/yyyy') = to_char(sysdate,'dd/mm/yyyy') 
        and nvl(c.span_id,'XXX') = nvl(p.span_id,'XXX') and 
        nvl(c.MAINTENANCEZONECODE,'XXX') = nvl(p.MAINTENANCEZONECODE,'XXX') ;
            -- if the child is not there we insert
            if VCOUNTERCHILD = 0
            then 
                insert INTO TBL_FIBER_INV_JOB_PROGRESS
              (
                JOB_ID,
                STATUS_ID,
                HOTO_OFFERED_DATE,
                APPROV_REJECT_REMARK,
                ISABDMISSING,
                HOTO_OFFERED_LENGTH,
                NE_SPAN_LENGTH,
                CREATED_BY,
                UMS_GROUP_ASS_BY_ID,
                UMS_GROUP_ASS_BY_NAME,
                UMS_GROUP_ASS_TO_ID,
                UMS_GROUP_ASS_TO_NAME,
                UMS_GROUP_ASS_TO_DATE,
                MODIFIED_BY,
                MODIFIED_DATE,
                APPROVED_BY,
                APPROVED_DATE,
                FSA_UG,
                FSA_AERIAL
              )
              VALUES
              (
                PJOB_ID,
                PSTATUS_ID,
                TO_DATE(PHOTO_OFFERED_DATE,'DD/MM/YYYY'),
                PAPPROV_REJECT_REMARK,
                PISABDMISSING,
                PHOTO_OFFERED_LENGTH,
                --PMAINT_ZONE_NE_SPAN_LENGTH,
                PNELENGTH,
                PCREATED_BY,
                PUMS_GROUP_ASS_BY_ID,
                PUMS_GROUP_ASS_BY_NAME,
                PUMS_GROUP_ASS_TO_ID,
                PUMS_GROUP_ASS_TO_NAME,
                SYSDATE,
                PCREATED_BY,
                SYSDATE,
                PCREATED_BY,
                SYSDATE,
                -- PUG_LENGTH,
              --  PAR_LENGTH
                PUGLENGTH,
                PARLENGTH
              )RETURNING JOB_PROGRESS_ID INTO PJOB_PROGRESS_ID;
            end if;
          END IF;
          IF PJOB_PROGRESS_ID > 0 
          THEN
              POUTMSG := 'SUCCESS|'||PJOB_PROGRESS_ID;
              COMMIT;
          ELSE
             POUTMSG := 'WARNING|Record not created - Already a child record for job id '||PJOB_ID||' ';
        -- I will remove the rollback. Here it does not make sense as you don't need to rollback the whole transaction
        -- ROLLBACK;
        dbms_output.put_line ( POUTMSG );
          END IF;
      ELSE
          POUTMSG := 'EXISTS|Record already exists';
      END IF;
  EXCEPTION  
    WHEN OTHERS THEN
      ERROR_CODE := SQLCODE;
      ERROR_MESSAGE := SUBSTR(SQLERRM, 1, 200);
      ROLLBACK;
      POUTMSG := 'ERROR|Error ocurred on record creation';
      PKG_FIBER_HOTO_COMP_TEST.INS_ERRORLOG(PCREATED_BY,PSPAN_ID||PLINK_ID,'DB : INS_WORKFLOW',ERROR_CODE||' : '||ERROR_MESSAGE);
END INS_WORKFLOW;