oracle提交数据按键,Oracle PLSQL - 仅提交数据库链接(Oracle PLSQL - Commit only database link)...

Oracle PLSQL - 仅提交数据库链接(Oracle PLSQL - Commit only database link)

有没有办法只通过数据库链接而不是当前会话的数据提交在表上插入/更新的数据? 或者他们被认为是同一个?

例如:

INSERT INTO main_database.main_table(value1, value2)

VALUES (1 , 2)

INSERT INTO database.table@database_link(value3, value4)

VALUES (3 , 4)

并仅为数据库链接表提交?

关于我为什么要这样做的背景:主数据库用于(多个)记录,而数据库链接用于(货币)事务(在单独的服务器上处理)。 我想首先更新记录以检查是否有任何约束失败,但是在事务完成之前不提交数据。 如果事务失败,我想回滚记录以省去删除/撤消插入/更新的工作,这可能会变得混乱。

我假设没有,但我希望有办法。 提前致谢。

Is there a way to commit only the data inserted/updated on a table through a database link and not the data of the current session? Or are they considered one and the same?

For example:

INSERT INTO main_database.main_table(value1, value2)

VALUES (1 , 2)

INSERT INTO database.table@database_link(value3, value4)

VALUES (3 , 4)

And do a commit for only the database link table?

Background on why I would want to do this: The main database is for (multiple) records while the database link is for (monetary) transactions (processed on a separate server). I want to update the records first to check to see if any of the constraints fail, but not commit the data until the transaction is complete. If the transaction fails, I want to rollback the records to save me the effort of deleting/undoing inserts/updates which could get messy.

I am assuming there is not but I am hoping that there is a way. Thanks in advance.

原文:https://stackoverflow.com/questions/36560057

更新时间:2019-12-06 06:51

最满意答案

create or replace procedure proc_1 ( i IN number )

as

PRAGMA AUTONOMOUS_TRANSACTION;

BEGIN

INSERT INTO test_table@remote_sid (id, description)

VALUES (i, 'Description for ' || i);

COMMIT;

END;

/

create or replace procedure proc_base ( i IN number )

as

begin

insert into local_tab (id) values (i);

proc_1( i );

rollback;

end;

/

create or replace procedure proc_1 ( i IN number )

as

PRAGMA AUTONOMOUS_TRANSACTION;

BEGIN

INSERT INTO test_table@remote_sid (id, description)

VALUES (i, 'Description for ' || i);

COMMIT;

END;

/

create or replace procedure proc_base ( i IN number )

as

begin

insert into local_tab (id) values (i);

proc_1( i );

rollback;

end;

/

2016-04-11

相关问答

oracle安装客户端工具pl/sql的目的是方便数据库的管理。 mysql也是一样的道理。安装phpMyAdmin或者Navicat,也是方便数据库的管理。

PLSQL developer是编写SQL的工具 ORACLE是数据库软件

1、在Oracle的安装目录下找到tnsnames.ora。 2、在这个文件中填写连接数据库的配置信息。 DEMO = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.11.110)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SID = DEMO) ) )

左外连接用left join,右外连接用right join语句。 比如 Oracle: select * from a, b where a.id=b.id(+) SQL: select * from a left join b on a.id=b.id 反过来a.id(+)=b.id 就是right join

create or replace procedure proc_1 ( i IN number )

as

PRAGMA AUTONOMOUS_TRANSACTION;

BEGIN

INSERT INTO test_table@remote_sid (id, description)

VALUES (i, 'Description for ' || i);

COMMIT;

END;

/

create or replace procedure proc_base ( i I

...

你没错,因为存在XML标题而出错。 解决方法是使用XMLParse(document ...)来解析XML: select xmlparse(document UTL_HTTP.REQUEST(URL => 'http://xkcd.com/rss.xml'))

into v_xml

from dual;

示例SQLFiddle与xkcd.com的结果。 请注意,根据文档, HTTP_UTIL.Request函数仅返回服务器响应的前2000个字节,因此您可以使用此类请求获取不完整的XML。

...

我一直与甲骨文一起工作了20年,从未见过使用令人满意的代码管理系统。 然而,在过去的一年里,我一直致力于Ruby on Rails应用程序,分布式版本控制系统“git”通过gitflow进行了扩展,以帮助形式化代码分支(主,开发,特性,修补程序等)和部署数据库PostgreSQL)使用rake进行迁移。 我真的希望我有机会将它们与Oracle代码一起使用,因为它确实能够剔除我需要的每个框。 I've been working with Oracle for something like 20 ye

...

数据库独立性是使用JDBC的好理由。 假设您的Web应用程序需要为无法支付Oracle费用的客户运行,您需要做多少工作才能移植到开源数据库? Database independence is good reason for using JDBC. Let's say that your web application needs to run for a customer that cannot pay for Oracle, how much work will you need to do t

...

虽然我理解您解决了语法问题,但我认为我可能会提出两种方法来推进最佳实践: 显示加入 在连接查询中的表时使用当前的ANSI语法。 现在,您的SQL使用旧的,不推荐使用的隐式连接( WHERE子句中使用的键)与使用显式连接的当前ANSI标准( INNER JOIN...ON使用的键)。 虽然这在性能方面对查询优化器没有任何影响(参见SO帖子 ),但使用INNER JOIN往往更具可读性和可维护性,特别是如果您有各种WHERE条件需要管理。 下面是尝试使用INNER JOIN子句转换您的查询。 请在使用

...

SQL - 结构化查询语言 - 是查询关系数据库的“标准”语言。 大多数(如果不是全部)RDBMS供应商都支持SQL,或者确切地说是他们自己的SQL 版本 。 即使从80年代开始按ANSI标准化,也很少达到100%的合规性。 许多RDBMS接受特定于供应商的SQL扩展。 换句话说,Oracle的SQL和SQLite的实现并不完全相同。 但核心语言是一样的。 这就是为什么你经常/有时为这两种产品编写相同的查询。 另一方面, PL / SQL是Oracle 专有的程序语言。 它由Oracle Corp

...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值