1、先自定义表结构;
2、循环读取excel表的每行数据存到一个字符串数组中;
3、把每个字符串数组放到自定义表;
4、存储过程直接操作该自定义表即可。
这样就不需要每次都在数据库中建立一张临时表。
注意:在存储过程中使用自定义表时写法为:table(p_table)
private void paseExcelPqxx(UploadedFile excelFile) throws Exception { try { CallableStatement stmt = null; Connection conn = null; JyglAMImpl jyglAMImpl = (JyglAMImpl) ADFUtils.getApplicationModuleForDataControl("JyglAMDataControl"); conn = jyglAMImpl.getDBTransaction().createStatement(1).getConnection(); StructDescriptor structdesc = new StructDescriptor("IMPORT_JYXX_TYPE", conn); try { InputStream inp = excelFile.getInputStream(); Workbook wb = WorkbookFactory.create(inp); Sheet sheet = wb.getSheetAt(0); //读取Excel中第一个sheet的数据 Row dataRow = null; int rowNum = 1; int lastNum = sheet.getLastRowNum(); STRUCT[] structs = new STRUCT[lastNum - rowNum+1]; //执行操作 for(int n=1;n<=lastNum;n++){ dataRow = sheet.getRow(n); String[] result = new String[22]; //定义一个字符串数组,该数组的顺序必须和'IMPORT_JYXX_TYPE'这里面的顺序相同 result[0] = getCellStrValue(dataRow.getCell(9)); result[1] = getCellStrValue(dataRow.getCell(11)); result[2] = getCellStrValue(dataRow.getCell(23)); result[3] = getCellStrValue(dataRow.getCell(25)); result[4] = getCellStrValue(dataRow.getCell(28)); result[5] = getCellStrValue(dataRow.getCell(29)); result[6] = getCellStrValue(dataRow.getCell(31)); result[7] = getCellStrValue(dataRow.getCell(34)); result[8] = getCellStrValue(dataRow.getCell(35)); result[9] = getCellStrValue(dataRow.getCell(38)); result[10] = getCellStrValue(dataRow.getCell(39)); result[11] = getCellStrValue(dataRow.getCell(40)); result[12] = getCellStrValue(dataRow.getCell(42)); result[13] = getCellStrValue(dataRow.getCell(43)); result[14] = getCellStrValue(dataRow.getCell(44)); result[15] = getCellStrValue(dataRow.getCell(51)); result[16] = getCellStrValue(dataRow.getCell(52)); result[17] = getCellStrValue(dataRow.getCell(53)); result[18] = getCellStrValue(dataRow.getCell(54)); result[19] = getCellStrValue(dataRow.getCell(55)); result[20] = getCellStrValue(dataRow.getCell(71)); result[21] = getCellStrValue(dataRow.getCell(72)); structs[n-1] = new STRUCT(structdesc, conn, result); } executeProJyxxPqdr(jyglAMImpl, structs,conn); inp.close(); } finally { if (stmt != null) { stmt.close(); } } } catch (Exception e) { log.severe(e); e.printStackTrace(); } } public void executeProJyxxPqdr(JyglAMImpl am, STRUCT[] structs,Connection conn) throws SQLException { String stmt = "BEGIN JYGL_DR_PKG.MAIN_JYGL(?, ?, ?); END;"; // String stmt = "BEGIN jygl_syncpqxx_temp(?,?, ?); END;"; java.sql.CallableStatement st = null; ArrayDescriptor desc = ArrayDescriptor.createDescriptor("JYXX_TABLE_TYPE", conn); ARRAY array = new ARRAY(desc, conn, structs); try { st = am.getDBTransaction().createCallableStatement(stmt, 0); st.setArray(1, array); st.registerOutParameter(2, Types.VARCHAR); //第一个返回值 st.registerOutParameter(3, Types.VARCHAR); //第二个返回值 st.execute(); //返回结果的处理 // if ("E".equals(st.getString(2))) { // inputValue.setValue(st.getString(1)); // } else { // inputValue.setValue(st.getString(1) + " 共导入" + st.getBigDecimal(3)); // } inputValue.setValue(st.getString(2)); } catch (java.sql.SQLException s) { s.printStackTrace(); throw new oracle.jbo.JboException(s); } finally { try { if (st != null) { st.close(); } } catch (java.sql.SQLException s2) { throw new oracle.jbo.JboException(s2); } } }
1、自定义表结构
create or replace type IMPORT_JYXX_TYPE as object ( dah VARCHAR2(50), xh VARCHAR2(50), pqxz VARCHAR2(50), dwlxdm VARCHAR2(50), zgdwdm VARCHAR2(50), jtjsdw VARCHAR2(150), bddzdm VARCHAR2(50), dwsshydm VARCHAR2(50), dwdqdm VARCHAR2(50), syytdm VARCHAR2(50), dwlxr VARCHAR2(50), dwlxdh VARCHAR2(50), zylxdm VARCHAR2(50), xc VARCHAR2(50), bdzh VARCHAR2(100), jtlxdz VARCHAR2(200), jtlxdh VARCHAR2(50), jtyzbm VARCHAR2(150), yddh VARCHAR2(50), dzyj VARCHAR2(50), byqx VARCHAR2(50), dwzzjgdm VARCHAR2(50) )
2、自定义表
CREATE OR REPLACE TYPE JYXX_TABLE_TYPE AS TABLE OF IMPORT_JYXX_TYPE
3、存储过程
CREATE OR REPLACE PACKAGE BODY jygl_dr_pkg AS PROCEDURE main_jygl(p_table in JYXX_TABLE_TYPE, res_str OUT VARCHAR2, res_code OUT VARCHAR2) AS /*同步更新就业协议登记、派遣信息和报到证 p_table:自定义表结构,用于存放导入excel表的数据 res_str:操作信息 res_code:返回操作代码 'S'成功,'E'失败 */ BEGIN --就业协议登记 merge into jygl_jyxydj a using (SELECT xs.xh, t.byqx, t.dwzzjgdm, t.dwsshydm, t.dwlxr, t.dwlxdh, t.syytdm, t.dwlxdm, t.dwdqdm, t.zylxdm, t.xc, t.jtjsdw, t.bddzdm, t.jtyzbm, t.jtlxdh FROM table(p_table) t, xsxxgl_xsjbxx xs WHERE t.xh = xs.jwxh and t.xh IS NOT NULL) b on (a.xh = b.xh) when matched then update set a.byqx = b.byqx, a.dwzzjgdm = b.dwzzjgdm, a.dwsshy = b.dwsshydm, a.dwlxr = b.dwlxr, a.dwlxdh = b.dwlxdh, a.syyt = b.syytdm, a.dwlx = b.dwlxdm, a.dwssdq = b.dwdqdm, a.zylx = b.zylxdm, a.xc = b.xc, a.jsdadwmc = b.jtjsdw, a.xqdz = b.bddzdm, a.yzbm = b.jtyzbm, a.lxdh = b.jtlxdh --更新 when not matched then insert (a.jyxydjid, a.xh, a.byqx, a.dwzzjgdm, a.sfbh, a.sfzydk, a.dwsshy, a.dwlxr, a.dwlxdh, a.syyt, a.dwlx, a.dwssdq, a.zylx, a.xc, a.sfjykn, a.jsdadwmc, a.xqdz, a.yzbm, a.lxdh, a.sfqbshtg, a.sfjrshlc, a.shzt, a.tjsj, a.sftj) values (xl_jygl_jyxydj.nextval, b.xh, b.byqx, b.dwzzjgdm, 0, 0, b.dwsshydm, b.dwlxr, b.dwlxdh, b.syytdm, b.dwlxdm, b.dwdqdm, b.zylxdm, b.xc, '0', b.jtjsdw, b.bddzdm, b.jtyzbm, b.jtlxdh, 1, 1, '导入通过', to_char(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'), 1); --插入 --派遣信息 merge into jygl_pqxx pq using (SELECT xs.xh, t.pqxz, t.zgdwdm, t.jtjsdw, t.bddzdm FROM table(p_table) t, xsxxgl_xsjbxx xs WHERE t.xh = xs.jwxh and t.xh IS NOT NULL) pqt on (pq.xh = pqt.xh) when matched then update set pq.zgdw = pqt.zgdwdm, pq.jtpqdw = pqt.jtjsdw, pq.bddz = pqt.bddzdm --更新 when not matched then insert (pq.pqxxid, pq.xh, pq.zgdw, pq.jtpqdw, pq.bddz, pq.sfqbshtg, pq.sfjrshlc, pq.tjsj, pq.shzt, pq.sfbh, pq.pqxz) values (xl_jygl_pqxx.nextval, pqt.xh, pqt.zgdwdm, pqt.jtjsdw, pqt.bddzdm, 1, 1, to_char(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'), '导入通过', 0, case pqt.pqxz when '申请暂缓就业' then '2' else '1' end); --插入 --就业报到证 merge into jygl_bdz bd using (SELECT xs.xh, t.bdzh FROM table(p_table) t, xsxxgl_xsjbxx xs WHERE t.xh = xs.jwxh and t.xh IS NOT NULL) bdt on (bd.xh = bdt.xh) when matched then update set bd.bdzh = bdt.bdzh --更新 when not matched then insert (bd.bdzrkid, bd.xh, bd.bdzzt, bd.bdzh) values (xl_jygl_bdzrk.nextval, bdt.xh, 0, bdt.bdzh); --插入 res_str := '同步成功'; res_code := 'S'; commit; EXCEPTION WHEN OTHERS THEN res_str := dbms_utility.format_error_backtrace() || '---' || SQLERRM; /*res_str := '执行失败';*/ res_code := 'E'; ROLLBACK; END; END jygl_dr_pkg;
-- 摘自就业信息管理 的派遣信息导入
相关推荐
- **.frm**:这是MySQL存储表结构定义的文件。 - **.myd**:存储表的实际数据。 - **.myi**:存储表的索引数据。 #### 导入前准备 确保MySQL服务已正确安装,并且能够正常运行。此外,还需要准备数据文件及必要的...
- **BULK INSERT T-SQL命令**:对于大量数据,可以使用BULK INSERT语句直接从Excel文件批量导入数据。需要将Excel文件保存为CSV格式,因为BULK INSERT只支持文本格式。 - **Openrowset函数**:通过在查询中使用...
1. **创建临时表结构**: 在将JSON数据导入临时表之前,你需要知道JSON字符串的结构,以便创建匹配的表结构。例如,如果JSON字符串包含键值对"key1":"value1","key2":"value2"等,你需要创建一个临时表,包含相应的...
4. **数据处理过程自动调用**:在导入数据后自动调用预定义的数据处理过程,这是一种自动化工作流的体现。这可能包括数据清洗(如去除空值、异常值处理)、数据转换(如格式转换、单位转换)和数据整合等步骤,以...
在ASP中导入Excel数据是一项常见的任务,特别是在需要批量处理或更新数据库时。此过程通常涉及读取Excel文件的内容并将其转化为可以插入或更新数据库格式的数据。 在描述中提到的“无组件上传”,指的是在不依赖...
4. **数据映射**:将自定义数据格式与数据库中的表结构进行映射是关键步骤。每个自定义数据字段需要对应到数据库表的相应列,这可能需要编写映射规则或配置文件。 5. **导入工具或脚本**:为了实现自动化导入,...
1. **数据预处理**:HDFS上的文件可能是CSV、JSON或自定义格式,需要先进行解析和转换,使其符合HBase的表结构。这可能涉及到使用MapReduce或者Spark等工具进行数据清洗和转换。 2. **创建HBase表**:在HBase中创建...
可以创建一个DataTable或自定义的数据结构来存储这些数据。在转换过程中,可能需要处理日期格式、数字格式等问题,确保它们与SQL Server数据库中的列类型匹配。 接下来,我们使用SQLDMO库来与SQL Server进行交互。...
在某些场景下,可能需要在 Oracle 和 Access 之间进行数据迁移,比如整合数据、备份或临时数据存储。本文将详细讲解如何在 Oracle 的 FORM 程序中实现这两个系统之间的数据导入和导出。 首先,为了在 Oracle 和 ...
Hive是基于Hadoop的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供SQL类语言(HQL)进行数据查询和分析。 【描述】:博客链接指向的可能是一篇关于如何在Hive中进行数据分区导入的文章。在Hive中...
在Excel中,你可以通过"数据"菜单选择"从文本/CSV"或"从其他来源"来导入数据。这个过程允许你设置数据分隔符、数据类型、日期格式等,确保数据正确地被解析和导入。 接着是“导出”操作。如果你已经完成了数据的...
- 数据清洗是关键步骤,确保Excel中的数据格式与SQL Server表结构匹配,避免因类型不兼容导致的问题。 - 大量数据导入导出时要考虑性能问题,可能需要分批处理数据,避免一次性操作导致的资源占用过高。 - 安全性...
3. **读取数据**:使用Apache POI打开Excel文件,创建Workbook对象,遍历Sheets、Rows和Cells,将数据存储到合适的数据结构(如List<List<Object>>或自定义的实体类)。 4. **数据处理**:根据业务需求,对读取到的...
同时,了解如何使用数组或临时表来暂存数据也是必要的。 总的来说,DBF表数据的行列转换是一个涉及数据处理和编程技能的任务,需要对数据库概念、文件格式和特定编程语言有深入理解。对于那些不熟悉FoxPro或类似...
1. **选择数据源**:你可以连接到VFP的数据表或视图,或者从外部数据库导入数据。 2. **选择字段**:根据需求挑选需要展示在报表中的字段,可以排序和分组数据。 3. **定义格式**:设定字体、颜色、边框等样式,还...
在数据库系统中,输出表通常是指经过查询处理后生成的结果集,这些结果集可能被存储为临时表或永久表,以便后续分析或报告使用。当输出表的数据出现问题,例如数据错误、数据丢失或需要更新数据时,就需要进行输出表...
实施迁移时,需确保兼容性,因为Hive的表结构、分区和元数据都需要精确地在新环境中复现。此外,对于大规模数据,可能需要分批迁移,同时监控数据完整性与一致性。 其次,**Kudu迁移方案**:Kudu是一种列式存储系统...
6. **优化数据类型**:POI允许自定义数据类型,根据实际数据类型选择最小的内存表示,例如,使用整数代替双精度浮点数。 在提供的lib包中,可能包含了Apache POI库和其他依赖,这些依赖可能包含了处理大数据Excel所...
- **临时表**:临时表是在会话期间存在的表,主要用于存储临时数据,会话结束时自动清除。 - **外部表**:外部表允许直接访问文件系统或其他文件格式的数据,无需将数据导入数据库。 - **表存储**:表的存储方式对...
Excel作为一种灵活的数据处理工具,经常被用来存储和组织临时或中期的数据。而SQL Server作为强大的关系型数据库管理系统,用于长期存储和管理结构化数据。当需要将Excel中的数据迁移到SQL Server时,有多种方法可以...