殡葬类网站建设,庆阳西峰,北京做电商网站,上海装修公司排名十强一、MERGE INTO语句1、merge into语句的功能#xff1a;我们操作数据库的时候#xff0c;有时候会遇到insert或者Update这种需求。我们操纵代码时至少需要写一个插入语句和更新语句并且还得单独写方法效验数据是否存在#xff0c;这种操作完全可以用merge into语句代替…一、MERGE INTO语句1、merge into语句的功能我们操作数据库的时候有时候会遇到insert或者Update这种需求。我们操纵代码时至少需要写一个插入语句和更新语句并且还得单独写方法效验数据是否存在这种操作完全可以用merge into语句代替不仅省时省力而且条理更清晰一个SQL语句直接完成插入如果有相同主键进行更新操作。使用场景判断表和表是否满足ON中条件如果满足则用B表去更新A表如果不满足则将B表数据插入A表或者更多的操作。2、具体SQL下边sql是我在工作中最常使用的功能是对接口表(表B)中通过批次ID查到的合同进行对正式表(表A)插入和更新。除此之外还可以根据你的想实现功能进行各种条件更新和插入。只update或者只insert带条件的update或带条件的insert全插入insert实现带delete的update(觉得可以用3来实现)MERGE INTO后是更新的表USING是对接口表进行筛选(如果有重复数据仅选取一行插入用ORDER BY 控制)。ON中是具体的条件(表中标识字段字段编码)满足执行 WHEN MATCHED THEN 下的语句不满足则执行WHEN NOT MATCHED THEN 后语句:MERGE INTO TableA AUSING ((SELECT L.*,ROW_NUMBER() OVER(PARTITION BY T.FLEX_VALUE ORDER BY 1) AS RNFROM TABLEB LWHERE T.BATCH_ID #{batchId} ) LAND L.RN 1 ) BON ( A.FLEX_VALUE B.FLEX_VALUE )WHEN MATCHED THENUPDATEA.FLEX_VALUE_SET_NAME B.FLEX_VALUE_SET_NAME,A.VALIDATION_TYPE B.VALIDATION_TYPE,WHEN NOT MATCHED THENINSERT (A.FLEX_VALUE_SET_NAME B.FLEX_VALUE_SET_NAME,A.VALIDATION_TYPE B.VALIDATION_TYPE)二、Oracle的存储过程1、定义存储过程(Stored Procedure):就是一组用于完成特定数据库功能的SQL语句集该SQL语句集经过,编译后存储在数据库系统中。在使用时候用户通过指定已经定义的存储过程名字并给出相应的存储过程参数,来调用并执行它从而完成一个或一系列的数据库操作。2、创建Oracle存储过程包含三部分过程声明执行过程部分存储过程异常。我在工作中常用的一个存储过程结构如下--存储过程校验信息三个入参一个输入批次。输出分别是错误编码和错误信息。PROCEDURE VALIDATE_ARCHIVE_ITF(P_BATCHID IN VARCHAR2,P_FLAG OUT NUMBER,P_MSG OUT VARCHAR2) ISCURSOR CMS_ARCHIVE_ITF(BATCHID VARCHAR2) ISSELECT ROWID,CONTRACT_NO,ARCHIVE_STUTAS,ERROR_INFO,ARC_TIMEFROM CMS_ARCHIVE_IFT CAIWHERE CAI.BATCH_ID BATCHID;L_ERROR_MSG VARCHAR2(255); --定义变量错误信息L_TENANT_ID VARCHAR2(255);--定义变量租户IDL_CONTRACT_SERIAL_NO VARCHAR2(255);--定义变量BEGINFOR RET IN CMS_ARCHIVE_ITF(P_BATCHID) LOOPL_ERROR_MSG : NULL;--给传入三个参数赋默认值P_FLAG : 1;P_MSG : NULL;--对输入字段非空效验IF (RET.ARC_TIME IS NULL OR RET.ARC_TIME ) THENL_ERROR_MSG : L_ERROR_MSG || LAST_UPDATE_DATE不能为空;;END IF;--判断非空校验是否成功不成功继续继续下一个。如果有错误更新接口表IF L_ERROR_MSG IS NOT NULL THENP_FLAG : -99;UPDATE CMS_ARCHIVE_IFTSET ERROR_CODE 01, ERROR_MSG L_ERROR_MSGWHERE ROWID RET.ROWID;CONTINUE;END IF;--如果成功通过条件效验IF P_FLAG 1 THENBEGININSERT INTO CMS_ARCHIVE_INFO(TENANT_ID,CONTRACT_ID,ARCHIVE_ID)VALUES( RET.TENANT_ID,(SELECT CONTRACT_IDFROM CMS_CONTRACT_INFOWHERE CONTRACT_NO RET.CONTRACT_NO),SYS_GUID() )EXCEPTION--异常信息WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE(SUBSTR(SQLERRM, 1, 200));P_FLAG : -99;P_MSG : SUBSTR(SQLERRM, 1, 200);END;END IF;END LOOP;END;