In SQL LOADER program the following things should be ready.
1. prepare a control file .
2. prepare .csv file .
3. move the files in to the custom directory of the bin folder.
4. register the concurrent program from the EBS 
control file
OPTIONS (SKIP = 1)
LOAD DATA
infile '$FILE'
badfile '$FILE'
truncate into table TEMP_INTERFACE_STG
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS
(
 STATUS_FLAG                    constant "N",
 RECORD_NUM         "RG_FA_TAX_SEQ.NEXTVAL",
 ASSET_NUMBER                    "NVL(:ASSET_NUMBER,Null)",  
 BOOK_TYPE_CODE                     "NVL(:BOOK_TYPE_CODE,Null)",  
 ADJUSTED_RATE                      "NVL(:ADJUSTED_RATE,Null)",
CREATED_BY                    FLOAT   EXTERNAL   "FND_GLOBAL.USER_ID",
 CREATION_DATE            SYSDATE,
 LAST_UPDATED_BY          FLOAT   EXTERNAL   "FND_GLOBAL.USER_ID",
 LAST_UPDATE_DATE         SYSDATE ,
 LAST_UPDATE_LOGIN        FLOAT   EXTERNAL   "FND_GLOBAL.LOGIN_ID",
)
validate the program based on the conditions and move the records from staging table to the interface table .
in this case the staging table is TEMP_INTERFACE_STG
develop a package and perform the validations and call the above registered SQL LOADER program in that package.
SQLloader doesn't populate the request id, File name or other input parameters directly through
control file.
so execute an update statement in the package and register that package in the EBS.
Call SQL*Loader program that load the data from csv file 
l_req_id := fnd_request.submit_request(application   => 'xxx',
            program       => 'xx_progam',
            description   => '',
            start_time    => SYSDATE,
            sub_request   => FALSE,
            argument1   => 'apps/apps_st/test/custom/bin/file.csv');
FND_FILE.PUT_LINE(FND_FILE.LOG,'Request Id for the sql loader'||l_req_id);  
IF l_req_id != 0 
    THEN
        COMMIT;
        l_call_status :=  fnd_concurrent.wait_for_request 
                                ( l_req_id,
                                  3,        -- interval
                                  0,        -- max_wait
                                  l_phase,
                                  l_status,
                                  l_dev_phase,
                                  l_dev_status,
                                  l_message
                                 );
    END IF;
    --Check Program completion status
    IF  (l_dev_phase = 'COMPLETE' AND l_dev_status = 'NORMAL') 
THEN
        fnd_file.put_line( fnd_file.log,'Program Completed Successfully');
UPDATE TEMP_INTERFACE_STG 
           SET request_id= l_req_id
where creation_date=sysdate;
        COMMIT;
ELSE
        fnd_file.put_line( fnd_file.log, 'Program did not Completed Successfully: '||l_dev_status);        
    END IF;
OPTIONS (SKIP = 1)
LOAD DATA
infile '$FILE'
badfile '$FILE'
truncate into table TEMP_INTERFACE_STG
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS
(
 STATUS_FLAG                    constant "N",
 RECORD_NUM         "RG_FA_TAX_SEQ.NEXTVAL",
 ASSET_NUMBER                    "NVL(:ASSET_NUMBER,Null)",  
 BOOK_TYPE_CODE                     "NVL(:BOOK_TYPE_CODE,Null)",  
 ADJUSTED_RATE                      "NVL(:ADJUSTED_RATE,Null)",
CREATED_BY                    FLOAT   EXTERNAL   "FND_GLOBAL.USER_ID",
 CREATION_DATE            SYSDATE,
 LAST_UPDATED_BY          FLOAT   EXTERNAL   "FND_GLOBAL.USER_ID",
 LAST_UPDATE_DATE         SYSDATE ,
 LAST_UPDATE_LOGIN        FLOAT   EXTERNAL   "FND_GLOBAL.LOGIN_ID",
SQLloader doesn't populate the request id, File name or other input parameters directly through
control file.
l_req_id := fnd_request.submit_request(application   => 'xxx',
            program       => 'xx_progam',
            description   => '',
            start_time    => SYSDATE,
            sub_request   => FALSE,
            argument1   => 'apps/apps_st/test/custom/bin/file.csv');
FND_FILE.PUT_LINE(FND_FILE.LOG,'Request Id for the sql loader'||l_req_id);  
IF l_req_id != 0 
    THEN
        COMMIT;
        l_call_status :=  fnd_concurrent.wait_for_request 
                                ( l_req_id,
                                  3,        -- interval
                                  0,        -- max_wait
                                  l_phase,
                                  l_status,
                                  l_dev_phase,
                                  l_dev_status,
                                  l_message
                                 );
    END IF;
    --Check Program completion status
    IF  (l_dev_phase = 'COMPLETE' AND l_dev_status = 'NORMAL') 
THEN
        fnd_file.put_line( fnd_file.log,'Program Completed Successfully');
UPDATE TEMP_INTERFACE_STG 
           SET request_id= l_req_id
where creation_date=sysdate;
        COMMIT;
ELSE
        fnd_file.put_line( fnd_file.log, 'Program did not Completed Successfully: '||l_dev_status);        
    END IF;
No comments:
Post a Comment