ORACLE链接SQLSERVER数据库数据操作函数范例

create or replace function FUN_NAME(LS_DJBH IN varchar2 ,LS_ITM varchar2 ,LS_Type int)
return varchar2
as
PRAGMA AUTONOMOUS_TRANSACTION;--有DML操作必须添加,如增删改查
/*
名称:FUN_NAME
参数:LS_DJBH 单据编号,LS_ITM 项次,LS_Type 操作类型
作用:LS_Type 为1 时同步生产日工单数据至ttt系统的任务单,LS_Type 为2 时取消ttt系统中同步的日工单数据
版本:V0001
V0001 修改人:博客燕,修改日期:20191010,修改内容:创建函数
*/
LS_ORDERID varchar2(200); --订单编号
LS_JH_DD varchar2(200); --计划日期
LS_MAX_TaskMasterOID INT; -- Task_Main表主键ID
LS_OrderAID varchar2(200);--订单编号
LS_ReceiveDateOID INT; --计划日期转换为int后为接单日期
LS_MAX_TaskDetailOID INT;--Task_Detail表主键ID
LS_ProductOID INT;--产品ID
LS_PRD_NO varchar2(200); --产品编号
LS_QTY INT;--数量
LS_Output varchar2(200);--返回值
LS_PDID INT;--用于判断
LS_PJ VARCHAR(200); --拼接字符串
begin
LS_PJ:=NVL(LS_DJBH,'')||'-'||NVL(LS_ITM,'');--必须提前拼接,Oracle和SQLSERVER拼接语法不一致导致报错
if LS_Type=1 then
LS_PDID:=0;
SELECT nvl(MAX("TaskMasterOID"),0) into LS_PDID FROM SQL_TBMAIN@链接数据库 WHERE "TaskAID"=LS_PJ;
if LS_PDID=0 then --如果INET中已经存在相同单据号和项次的记录,则不重新插入
SELECT to_char(JH_DD,'YYYY-MM-DD') INTO LS_JH_DD FROM ORACLE_TB_HEAD where DJBH=LS_DJBH;
select NVL(max("TaskMasterOID"),0)+1 into LS_MAX_TaskMasterOID from SQL_TBMAIN@链接数据库;--已存在的最大值+1
select (JH_DD-date'0001-01-01')-1 into LS_ReceiveDateOID from ORACLE_TB_HEAD where DJBH=LS_DJBH; --Oracle和SQLserver日期计算相差2,所以此处-1
SELECT ORDERID into LS_OrderAID FROM ORACLE_TB_DETAIL WHERE DJBH=LS_DJBH AND ITM=LS_ITM ;
INSERT INTO dbo.SQL_TBMAIN@链接数据库
("TaskMasterOID"
,"TaskAID"
,"OrderAID"
,"ReceiveDateOID"
,"FinishStatus"
,"AssignStatus"
,"DataResource"
,"Remarks")
VALUES (LS_MAX_TaskMasterOID,LS_PJ,LS_OrderAID,LS_ReceiveDateOID,0,0,0,'[ERP系统导入]');
COMMIT;
SELECT PRD_NO into LS_PRD_NO FROM ORACLE_TB_DETAIL WHERE DJBH=LS_DJBH AND ITM=LS_ITM ;
SELECT QTY_JH INTO LS_QTY FROM ORACLE_TB_DETAIL WHERE DJBH=LS_DJBH AND ITM=LS_ITM ;
SELECT "OID" INTO LS_ProductOID FROM Product@INET where "AID"=LS_PRD_NO;
INSERT INTO SQL_TBDetail@链接数据库
("TaskMasterOID"
,"TaskDetailItem"
,"ProductOID"
,"Quantity"
,"PreEndDateOID"
,"Remarks")
VALUES(LS_MAX_TaskMasterOID,1,LS_ProductOID,LS_QTY,LS_ReceiveDateOID,'[ERP系统导入]');
COMMIT;--对链接的SQLSERVER和ORACLE之间必须提交,否则会提示:要求事务处理或保存点回退 update ORACLE_TB_DETAIL set INET_TB=1 where to_char(ITM)=LS_ITM AND DJBH=LS_DJBH;
COMMIT;
LS_Output:='同步成功!';
ELSE
update ORACLE_TB_DETAIL set INET_TB=1 where to_char(ITM)=LS_DJBH AND DJBH=LS_DJBH;
COMMIT;
LS_Output:='项次:'||LS_ITM||' 已经存在同步记录!';
END IF; ELSE
select min("TaskMasterOID") into LS_MAX_TaskMasterOID from SQL_TBMAIN@链接数据库 WHERE "TaskAID"=LS_PJ;
LS_PDID:=0;
SELECT nvl(MAX("TaskMasterOID"),0) into LS_PDID FROM SQL_TBMAIN@链接数据库 WHERE nvl("AssignStatus",0)=1 and "TaskMasterOID"=LS_MAX_TaskMasterOID;
IF LS_PDID>0 then
LS_Output:='项次为:'||NVL(LS_ITM,'')||'的记录在INET系统中已经确认,不能取消同步,请联系车间人员取消确认!';
else
delete from SQL_TBDetail@链接数据库 where "TaskMasterOID"=LS_MAX_TaskMasterOID;
delete from SQL_TBMAIN@链接数据库 where "TaskMasterOID"=LS_MAX_TaskMasterOID;
COMMIT;--对链接的SQLSERVER和ORACLE之间必须提交 update ORACLE_TB_DETAIL set INET_TB=0 where to_char(ITM)=LS_ITM AND DJBH=LS_DJBH;
COMMIT;--对链接的SQLSERVER和ORACLE之间必须提交
LS_Output:='取消同步成功!';
end if ;
END IF ;
COMMIT;
return LS_Output;
end FUN_NAME;

Oralce 访问链接的SQLSERVER 数据库表时,如果在where 语句里用了 查询作为条件则速度会非常慢,如下代码用时 66秒,如果直接查询 0.03 秒

SELECT * FROM ProductionLog@INET WHERE ROWNUM<10 and "BeginDateOID" = (select 737378-1 from dual)
ORDER BY "BeginDateOID" DESC;

ORACLE链接SQLSERVER数据库数据操作函数范例的更多相关文章

  1. xp下Oracle数据库导入SQLServer数据库数据

    Oracle数据库利用ODBC数据源.PLSQL Developer导入SQLServer数据库数据 操作: 建立数据源:控制面板→管理工具→数据源 (ODBC) 打开,界面如下: 点击添加,界面如下 ...

  2. 使用vbScript 链接SQLserver数据库和基础操作

    使用vbs链接SQLserver数据库 数据库的创建.设计使用 management studio完成 1.本地链接数据库 set oCon = server.createObject("a ...

  3. SQLSERVER数据库备份操作和还原操作做了什么

    SQLSERVER数据库备份操作和还原操作做了什么 看了这篇文章:还原/备份时做了些什么 自己也测试了一下,下面说的错误日志指的是SQLSERVER ERRORLOG 一般在C:\Program Fi ...

  4. jtds链接SqlServer数据库(整合)

    先前使用的时候没做汇总,现在结合遇到的问题总结下. 开始使用jdbc驱动配置调用SqlServer不合适,根据网上的资料修改成了jtds配置方式. 当时使用的maven配置,配置如下: <spa ...

  5. Jq_Ajax 操作函数跟JQuery 遍历函数跟JQuery数据操作函数

    JQuery文档操作方法 jQuery 库拥有完整的 Ajax 兼容套件.其中的函数和方法允许我们在不刷新浏览器的情况下从服务器加载数据. 函数                             ...

  6. 【summary】JQuery 相关css、ajax、数据操作函数或方法

    总结一下JQuery常用的函数方法,更加系统的整理一下. JQuery遍历的一些函数: 函数 描述 .add() 将元素添加到匹配元素的集合中. .andSelf() 把堆栈中之前的元素集添加到当前集 ...

  7. 关于在Java中链接SQLServer数据库中失败的原因分析

    首先声明:笔者是Java的初学者,并且一值是走在自学的道路上,长久以来只有“度娘”相伴.(加入了各种Java学习群,基本没有热心帮人解决问题的.可以理解-_-!!!)大神级的人物就不必看拙文了,没有什 ...

  8. Sqlserver 连接oracle和mysql数据库 已经oracle导入sqlserver表数据

    SQL Server2012创建连接服务器到ORACLE11G 8,百思考不知道原因啊??突然我发现如下:链接服务器—〉访问接口—〉OraOLEDB.Oracle—〉允许进程内没有勾上,但是我想上面的 ...

  9. 采用Hibernate框架的研发平台如何能够真正兼容Oracle和sqlServer数据库

    都说Hibernate框架的使用可以很容易的让你的研发平台支持多种不同类型的数据库,但实践表明,这里的“容易”,是相对的. 想让研发平台支持多种数据库,并不是一件简单的事,也可以这么说:并不是只要使用 ...

随机推荐

  1. Android入门教程(四)

    关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己. 本篇文章同步微信公众号 欢迎大家关注我的微信公众号:「醉翁猫咪」 学习Android要掌握Android程序结构,和通信技术,和如 ...

  2. 安利一个github上面的一个神级库thefuck,Linux命令敲错了,没关系,自动纠正你的命令

    没错就是这么神奇,名字相当噶性,thefuck.当你命令输入错误不要怕,直接来一句fuck,自动纠正你输入的命令. 在你输入错误的命令的时候,忍俊不禁的想来一句fuck,没错你不仅可以嘴上说,命令里面 ...

  3. rabbitmq生产者queue接收不到消息

    项目问题: 客户的UAT环境下,项目运行一段时间后,rabbitmq的生产者queue再也接收不到系统发送的消息了.因为queue接收不到消息,所以消费者无法消费数据,流程断掉了. 原因: 客户UAT ...

  4. Ubuntu 16.04与Win10双系统双硬盘安装图解

    一.先做准备工作.建议:在当前系统所在的硬盘上,留一片空的主分区安装Ubuntu系统. 2.划分多大的空间够?安装的过程中需要涉及到分区,为了以免日后重装,我的建议是如下分区:1).5G,主分区,空间 ...

  5. Cannot capture jmeter traffic in fiddler

    Cannot capture jmeter traffic in fiddler First, change Fiddler's port back to 8888 as it was origina ...

  6. spring源码的设计模式

    转:https://blog.csdn.net/huyang0304/article/details/82928900 接下来我们只介绍在Spring中常用的设计模式. 1.1.简单工厂模式(Fact ...

  7. sqlite3 读写锁

    转载:https://blog.csdn.net/u012218838/article/details/79362929(sqlite3 使用读写锁SRWLOCK例子) 转载:https://my.o ...

  8. sqlserver表被锁了,解锁方法,删除锁的方法

    -- 查询死锁select        request_session_id spid,       OBJECT_NAME(resource_associated_entity_id) table ...

  9. DEPICT实现基因优化(gene prioritization)、gene set富集分析(geneset enrichment)、组织富集分析(tissue enrichment)

    全基因组关联分析除了找到显著的关联位点,我们还可以做基因优化.geneset富集分析.组织富集分析,下面具体讲一讲怎么利用GWAS的summary数据做这个分析. summary数据就是关联分析的结果 ...

  10. 3秒钟unittest入门使用

    一:unittest跑起来 unittest使用,具体使用方式可以查看unittest官网,以下简单做个介绍,在工作中使用最多的 # 第一步: 创建unittest类,且一定要继承unittest.T ...