Oracle EBS更新付款银行帐户弹性域

news2024/11/23 0:00:31

批量更新 应用: 现金管理系统 标题: 银行帐户弹性域
在这里插入图片描述

create or replace PROCEDURE ML_UPDATE_BANK_ACCT_INFO(
    errbuf OUT VARCHAR2,
    retcode OUT VARCHAR2,
    ic_user_file IN VARCHAR2 )
AS

TYPE T_BANK_ACCT
IS
  RECORD
  (
    BANK_ACCOUNT_ID NUMBER(15),
    --    BANK_ACCOUNT_NAME VARCHAR2(100),
    Payment_bank_Code VARCHAR2(30),
    BANK_ACCOUNT_NUM  VARCHAR2(30),
    STATUS            VARCHAR2(200) );
TYPE R_BANK_ACCT_LIST
IS
  TABLE OF T_BANK_ACCT INDEX BY BINARY_INTEGER;
  vc_file_path     VARCHAR2(20) :='/home/';
  vc_folder        VARCHAR2(20) := NULL;
  vc_file_location VARCHAR2(100);
  vc_file_info     VARCHAR2(2000);
  vc_file_ref utl_file.file_type;
  v_read_file_flag BOOLEAN := TRUE;
  v_BANK_ACCT_list R_BANK_ACCT_LIST;
  v_counter INTEGER     :=0;
  v_BANK_ACC_check  INTEGER     :=0;
  v_o_mverp VARCHAR2(20):= NULL;
  v_org_id  NUMBER      := fnd_global.org_id;
  --------------------------------------
  Vrec_BankAcct ce_bank_pub.BankAcct_rec_type;
  v_obj_v_num      NUMBER := 1;
  Vc_upd_Status    VARCHAR2(10);
  Vc_Return_Status VARCHAR2(2000);
  Vn_Msg_Count     NUMBER;
  Vl_Msg_Data LONG;
  Vn_Message_Int        NUMBER;
  Vn_Record_Num_bankacc NUMBER:=0 ;
BEGIN
  --设置缓冲区不受限制
  DBMS_OUTPUT.ENABLE(buffer_size => NULL) ;
  /****************read file************************/
  --get file object
  BEGIN
    BEGIN
      SELECT attribute4
      INTO vc_folder
      FROM HR_ORGANIZATION_INFORMATION
      WHERE organization_id       = v_org_id
      AND org_information_context = 'Operating Unit Information';
      IF NVL(vc_folder, '')       = '' OR vc_folder IS NULL THEN
        fnd_file.put_line(fnd_file.log,'AP Folder Name is empty.');
        fnd_file.put_line(fnd_file.log,'AP Folder Name is empty.');
        vc_file_location := NULL;
        RETURN;
      ELSE
        vc_file_location := ltrim(vc_file_path) || ltrim(vc_folder);
      END IF;
    EXCEPTION
    WHEN OTHERS THEN
      fnd_file.put_line(fnd_file.log,'Cannot get the AP Folder Name.');
      fnd_file.put_line(fnd_file.log,'Cannot get the AP Folder Name.');
      vc_file_location := NULL;
      RETURN;
    END;
    vc_file_ref := utl_file.fopen(vc_file_location,ic_user_file,'r');
    --    send_output('成功打开文件.');
    fnd_file.put_line(fnd_file.log,'open file successful.');
  EXCEPTION
  WHEN utl_file.invalid_path THEN
    --    send_output('文件名无效');
    fnd_file.put_line(fnd_file.log,'FileName is invalid:'||SQLCODE||'-'||SQLERRM);
    v_read_file_flag:= FALSE;
  WHEN UTL_FILE.INVALID_OPERATION THEN
    fnd_file.put_line(fnd_file.log,'Operation is invalid:'||SQLCODE||'-'||SQLERRM);
    v_read_file_flag:= FALSE;
  WHEN UTL_FILE.READ_ERROR THEN
    fnd_file.put_line(fnd_file.log,'Read error:'||SQLCODE||'-'||SQLERRM);
    v_read_file_flag:= FALSE;
  WHEN OTHERS THEN
    fnd_file.put_line(fnd_file.log,'Other error:'||SQLCODE||'-'||SQLERRM);
    v_read_file_flag:= FALSE;
  END;
  --start read file
  --  send_output('开始读取文件.');
  fnd_file.put_line(fnd_file.log,'Begin to read file.');
  IF v_read_file_flag THEN
    BEGIN
      utl_file.get_line(vc_file_ref,vc_file_info);
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
      fnd_file.put_line(fnd_file.log,'No_Data_Found:-----'||SQLCODE||'-'||SQLERRM);
      v_read_file_flag:= FALSE;
    END;
  END IF;
  
  IF v_read_file_flag THEN
    LOOP
      --read txt file and Each time read only read one line data of the target txt file
      BEGIN
        utl_file.get_line(vc_file_ref,vc_file_info);
        IF vc_file_info IS NULL OR TRIM(vc_file_info) = '' THEN
          CONTINUE;
        END IF;
        v_counter                                     := v_counter                                                    +1;
        v_BANK_ACCT_list(v_counter).Payment_bank_Code := REPLACE(SUBSTR(vc_file_info,1,instr(vc_file_info,chr(9) ,1,1)-1),'"','');
        --        v_BANK_ACCT_list(v_counter).BANK_ACCOUNT_NUM     := SUBSTR(vc_file_info,instr(vc_file_info,chr(9) ,1,1)   +1,instr(vc_file_info,chr(9) ,1,2)-instr(vc_file_info,chr(9) ,1,1)-1) ;
        v_BANK_ACCT_list(v_counter).BANK_ACCOUNT_NUM := SUBSTR(vc_file_info,INSTR(vc_file_info,chr(9) ,1,1) +1);
        --        SEND_OUTPUT(v_BANK_ACCT_list(v_counter).VENDOR_SITE_CODE||'  :  '||v_BANK_ACCT_list(v_counter).VENDOR_CASHFLOW_TYPE);
      EXCEPTION
      WHEN NO_DATA_FOUND THEN
        fnd_file.put_line(fnd_file.log,'Total bank account record:'||v_counter);
        fnd_file.put_line(fnd_file.log,'Read file completed.');
        EXIT;
      WHEN OTHERS THEN
        fnd_file.put_line(fnd_file.log,'Get error when get data from file:-----('||v_counter||')--'||vc_file_info||'-'||SQLCODE||'-'||SQLERRM);
        v_read_file_flag:= FALSE;
        EXIT;
      END;
    END LOOP;
  END IF;
  ----validation
  IF v_read_file_flag THEN
    FOR i IN 1..v_counter
    LOOP
      IF v_BANK_ACCT_list(i).Payment_bank_Code IS NOT NULL AND v_BANK_ACCT_list(i).BANK_ACCOUNT_NUM IS NOT NULL THEN
        BEGIN
          SELECT count(1) into v_BANK_ACC_check 
          FROM ce_bank_accounts
          WHERE bank_account_num      = trim(v_BANK_ACCT_list(i).BANK_ACCOUNT_NUM) ;
          if v_BANK_ACC_check < 1 then
            v_BANK_ACCT_list(i).STATUS := '银行账户不存在';
            v_read_file_flag           := FALSE;
          end if;
          v_BANK_ACCT_list(i).STATUS :='OK' ;
        EXCEPTION
        WHEN OTHERS THEN
          fnd_file.put_line(fnd_file.log,'Error when get :'||v_BANK_ACCT_list(i).BANK_ACCOUNT_NUM||' BANK_ACCOUNT_ID ; ==>'||SQLERRM);
          v_BANK_ACCT_list(i).STATUS := SUBSTR(SQLERRM,1,150);
          v_read_file_flag           := FALSE;
        END;
      ELSE
        v_BANK_ACCT_list(i).STATUS :='Payment_bank_Code IS NULL or BANK_ACCOUNT_NUM IS NULL' ;
        v_read_file_flag           := FALSE;
      END IF;
    END LOOP;
  END IF;
  --update bank account to Oracle EBS with api
  IF v_read_file_flag THEN
    fnd_file.put_line(fnd_file.log,'Total bank account record: '||v_counter );
    FOR i IN 1..v_counter
    LOOP
      --      fnd_file.put_line(fnd_file.log,i||':'||v_org_id||' - '||v_BANK_ACCT_list(i).VENDOR_SITE_CODE||' display :'||i||'/'||v_counter);
      --      SEND_OUTPUT(v_BANK_ACCT_list(i).VENDOR_SITE_CODE||'  :  '||v_o_mverp||' => '||v_BANK_ACCT_list(i).VENDOR_CASHFLOW_TYPE);
      --upadat supplier site table
--      IF v_BANK_ACCT_list(i).STATUS ='OK' THEN
        BEGIN
          BEGIN
            FOR acc_list IN
            (SELECT BANK_ACCOUNT_ID,bank_account_name,OBJECT_VERSION_NUMBER
            FROM ce_bank_accounts
            WHERE bank_account_num = trim(v_BANK_ACCT_list(i).BANK_ACCOUNT_NUM)
            )
            LOOP
--        all required params:
--        bank_account_id 
--        bank_account_name
--        bank_account_num
--        account_classification 
--        p_object_version_number
              Vrec_BankAcct.bank_account_id := acc_list.BANK_ACCOUNT_ID;
--              fnd_file.put_line(fnd_file.log,'BANK_ACCOUNT_ID - '||acc_list.BANK_ACCOUNT_ID );
              Vrec_BankAcct.attribute2      := v_BANK_ACCT_list(i).Payment_bank_Code;              
              Vrec_BankAcct.account_classification := 'SUBSIDIARY'; --INTERNAL 原数据为,但是不行
              Vrec_BankAcct.bank_account_name := acc_list.bank_account_name;
              Vrec_BankAcct.bank_account_num := trim(v_BANK_ACCT_list(i).BANK_ACCOUNT_NUM);              
              
              ce_bank_pub.update_bank_acct ( 
                p_init_msg_list => fnd_api.g_false, 
                p_acct_rec => Vrec_BankAcct, 
                p_object_version_number => acc_list.OBJECT_VERSION_NUMBER, 
                x_return_status => vc_return_status, 
                x_msg_count => vn_msg_count, 
                x_msg_data => vl_msg_data
              );
            END LOOP;
          EXCEPTION
          WHEN OTHERS THEN
            Vc_upd_Status := 'E';
            fnd_file.put_line(fnd_file.log,'Vc_upd_Status - '||Vc_upd_Status );
          END ;
          
          IF (vc_return_status <> 'S') OR Vc_upd_Status = 'E' THEN
            fnd_file.put_line(fnd_file.log,'vl_msg_data - '||vl_msg_data );
            v_BANK_ACCT_list(i).STATUS := '----ERROR';
          ELSE
            Vn_Record_Num_bankacc      := Vn_Record_Num_bankacc + 1;
            v_BANK_ACCT_list(i).STATUS := 'Imported';
          END IF;
        END;
--      END IF;
    END LOOP;
  END IF;
  --print data status
  --  fnd_file.put_line(fnd_file.log,'#:Oracle_site_code:Old_vendor_cashflow_type:New_vendor_cashflow_type:Status');
  FOR i IN 1..v_counter
  LOOP
    fnd_file.put_line(fnd_file.log,i||' BANK_ACCOUNT_NUM:'||v_BANK_ACCT_list(i).BANK_ACCOUNT_NUM ||' ,Payment_bank_Code:'||v_BANK_ACCT_list(i).Payment_bank_Code||', check status:'||v_BANK_ACCT_list(i).STATUS);
  END LOOP;
  /****************end read file************************/
  --  send_output('付款银行.编码 更新条数:');
--  fnd_file.put_line(fnd_file.log,'Total updated bank account record:'||Vn_Record_Num_bankacc);
  fnd_file.put_line(fnd_file.log,'Total updated bank account record:'||Vn_Record_Num_bankacc);
EXCEPTION
WHEN OTHERS THEN
  fnd_file.put_line(fnd_file.log,'Othes Exception - '||SQLCODE||sqlerrm );
  ROLLBACK;
END ML_UPDATE_BANK_ACCT_INFO;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/752948.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot数码论坛系统

在国外很多发达国家&#xff0c;软件产业早已得到全面普及&#xff0c;但我国经济已不断发展&#xff0c;不断引进国外信息化建设&#xff0c;使国内软件行业得以不断发展&#xff0c;在摸索中进步&#xff0c;最终也得到一些成果&#xff0c;我国的软件业迎来了高速的发展&…

不同conda不同cuda环境变量

文章目录 更改虚拟环境中的环境变量删除虚拟环境的环境变量其他问题&#xff0c;参考&#xff1a;https://blog.csdn.net/mifangdebaise/article/details/124428380 参考了博客 conda虚拟环境内安装CUDA9.0 conda虚拟环境中设置环境变量关于 cuda 的详细安装参见: 记录自己 Ubu…

(CVPR-2019)用于人体姿势估计的深度高分辨率表示学习

用于人体姿势估计的深度高分辨率表示学习 paper题目&#xff1a;Deep High-Resolution Representation Learning for Human Pose Estimation paper是中国科学技术大学发表在CVPR 2019的工作 paper地址 Abstract 在本文中&#xff0c;我们对人体姿势估计问题感兴趣&#xff0c;…

什么是真正的骨传导耳机,列举出几款实用的骨传导耳机

骨传导耳机从发布到现在有了几年的时间&#xff0c;也有很多人开始了解&#xff0c;但真正去选购的人还是很少&#xff0c;如果你没有使用过骨传导耳机&#xff0c;在选购时会很迷茫。作为一个骨传导耳机的重度使用者&#xff0c;下面就给大家分享一下我的体验感受以及选购建议…

OpenCv色彩空间

目录 一、RGB 二、图像处理入门 三、色彩空间的转换 一、RGB 在表示图像时&#xff0c;有多种不同的颜色模型&#xff0c;但最常见的是红、绿、蓝(RGB) 模型RGB 模型是一种加法颜色模型&#xff0c;其中原色 (在RGB模型中&#xff0c;原色是红色 R、绿色 G 和蓝色 B)混合在…

selenium自动化测试工具

Selenium是一个用于测试网站的自动化测试工具&#xff0c;支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器&#xff0c;同时也支持phantomJS无界面浏览器。 查看chrome版本&#xff0c;114.05735.199 去 http://chromedriver.storage.googleapis.com/index.html 网…

【从零开始学爬虫】采集全国各地历年房价数据

l 采集网站 【场景描述】采集全国各地历年房价数据。 【源网站介绍】58同城—国内专业的“本地、免费、真实、高效”生活服务平台&#xff01; 【使用工具】前嗅ForeSpider数据采集系统&#xff0c;免费下载&#xff1a; http://www.forenose.com/view/commodity/forespider…

正则表达式与“三贱客”

第三阶段基础 时 间&#xff1a;2023年7月11日 参加人&#xff1a;全班人员 内 容&#xff1a; 正则表达式与“三贱客” 目录 shell脚本的基本应用&#xff1a; 一、正则表达式与grep 2&#xff09;正则表达式的组成 1&#xff09;正则表达式grep常见的选项 2&…

《向量数据库指南》:向量数据库Pinecone关键概念和工作流程

目录 用例 关键概念 向量搜索 向量嵌入 向量数据库 工作流程 定价和部署选项 开始使用 介绍PINECONE向量数据库 Pinecone使构建高性能的向量搜索应用程序变得轻松。 它是一个托管的、云原生的向量数据库,具有简单的API和无需基础架构的优势。 Pinecone具有以下特…

[论文分享]SimMIM:一种简单的掩模图像建模框架

文章地址&#xff1a;https://arxiv.org/abs/2111.09886 代码地址&#xff1a;GitHub - microsoft/SimMIM: This is an official implementation for "SimMIM: A Simple Framework for Masked Image Modeling". 1 摘要 本文介绍了SimMIM&#xff0c;这是一个用于掩模…

React初学者需要的库从哪里下载?

在react官网下载react.js的方法介绍 1、访问react的github官方页面 访问地址为&#xff1a;Downloads | Reacthttps://react-cn.github.io/react/downloads.html 2、点击Download页面中的"Download Starter Kit"按钮&#xff0c;进行下载 学react的时候用到了babe…

波士顿矩阵模型:产品定位

波士顿矩阵 波士 顿 矩 阵 (BCG Matrix) 又称市 场 增 长 率 — 相 对 市 场 份 额 矩 阵 、波士顿咨 询 集 团 法、四象限分析法、 产 品系列 结 构管理法等。 波士 顿 矩 阵是由美国大型商业 咨 询 公司 —— 波士 顿 咨 询 集 团 首 创 的一种 规 划企业产品 组 合的方法。…

什么是统一建模语言(UML)UML与UML类图的基本概念

什么是统一建模语言UML&#xff08;Unified Modeling Language&#xff09; UML&#xff08;统一建模语言&#xff09;是一种通用的建模语言&#xff0c;用于描述软件系统的结构、行为和交互。它提供了一组符号和规则&#xff0c;用于创建可视化的图形模型&#xff0c;帮助开发…

【雕爷学编程】Arduino动手做(149)---MAX9814咪头传感器模块6

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

resolvecomreference任务返回了false,但未记录错误

IDE从VS2015升级到了VS2022&#xff0c;然后就报了这个错&#xff0c;百度搜了下&#xff0c;没有啥结果&#xff0c;后来发现&#xff0c;2015可以用的一个dll在2022不能用了&#xff0c;把不能用的dll移除即可

VxLAN学习

目录 什么是VXLAN 为什么需要VXLAN 虚拟机动态迁移&#xff0c;要求提供一个无障碍接入的网络 什么是服务器虚拟化技术&#xff1f; 什么是虚拟机动态迁移&#xff1f; VXLAN如何满足虚拟机动态迁移时对网络的要求&#xff1f; 数据中心租户数量激增&#xff0c;要求提供…

TIOBE 2023年7月编程语言排行榜:C++即将超越C!

一、TIOBE统计数据&#xff08;2023年7月&#xff09; TIOBE Index编程社区指数是编程语言流行度的一个指标。评级基于全球熟练工程师的数量、课程和第三方供应商的数量。Google、Bing、Yahoo!、维基百科、亚马逊、YouTube 和百度等流行搜索引擎用于计算评级。 七月头条&#…

性能测试工具 Jmeter 测试 JMS (Java Message Service)/ActiveMQ 性能

目录 前言 ActiveMQ 介绍 准备工作 编写jndi.properties添加到ApacheJMeter.jar 中 下载 ActiveMQ 配置 Jmeter 进行测试 点对点 (Queues 队列) 配置 Jmeter 进行测试 发布/订阅 (Topic 队列) 配置发布 Publisher 配置订阅 Subscriber 总结 前言 JMeter是一个功能强大…

【Java】如何有效防止API的重放攻击?API接口防止参数篡改?

文章目录 前言一、API接口常见的安全防护要做到主要有以下几点&#xff1a;二、请求参数防篡改三、防止重放攻击3.1、基于timestamp的方案3.2、基于nonce的方案3.2、基于timestamp和nonce的方案3.3、微信公众号如何保证消息不会被重放攻击 前言 API重放攻击(Replay Attacks)又…

uniapp调接口出现跨域问题。

今天在写uniapp项目的时候&#xff0c;使用在线模拟接口的时候&#xff0c;出现跨域问题。 【问题描述】&#xff1a; ①在内嵌浏览器运行&#xff0c;不会出现跨域问题&#xff0c;好像是内嵌浏览器自动去掉了跨域问题。 ②在外部浏览器调用的时候会出现跨域问题。&#xf…