如何使Oracle 11g对包含的SQL文件中的任何错误回滚整个事务?
文件内容如下:
set autocommit off
whenever SQLERROR EXIT ROLLBACK
insert into a values (1);
insert into a values (2);
drop index PK_NOT_EXIST;
commit;
使用“@”将该文件包含到sqlplus会话中:
@error.sql
正如预期的那样,sqlplus会话终止,输出为
SQL> @error.sql
1 row created.
1 row created.
drop inde
我有一个.sql文件,其中包含以下语句:
SET LINESIZE 2000
WHENEVER SQLERROR EXIT 1 ROLLBACK
WHENEVER OSERROR EXIT 1 ROLLBACK
SET PAGESIZE 0
SET HEADING ON
SET FEEDBACK OFF
SET VERIFY OFF
INSERT INTO TABLE_A
--get some value from TABLE B that will be added in Table A....
COMMIT;
EXIT;
当我在我的SQL编辑器(TOAD/SQL Navigator等
我习惯于使用或 for Oracle之类的工具,我在查询窗口上运行的每个SQL语句都会在事务作用域下自动运行。因此,如果我的SQL语句不正确,或者即使我遗漏了SQL脚本中的某些内容,我也只能通过单击UI上的按钮来进行回滚。如果一切正常,我可以单击另一个按钮来提交当前事务。在我提到的那些工具上,我不需要为开始、提交或回滚事务编写SQL语句。每个SQL语句都有一个与关联的隐式事务。
有没有办法在SQL Server Management Studio 2008上实现同样的功能?
当我创建连接时,我就设置了con.setAutoCommit(false);,这样在DB中就不会出现未提交的情况。但是,不管您的setAutoCommit()状态如何,如果您关闭连接,那么所有事务都将被提交。
Class.forName("oracle.jdbc.driver.OracleDriver");
con = DriverManager.getConnection("jdbc:oracle:thin:@192.168.7.5:xxxx:xxx", "xxx", "xxx");
c
我来自甲骨文背景,对Server有点困惑。
我希望停止Server自动提交我的插入命令。所以我正在使用begin transaction。在下面的演示中,我将在测试表中插入100行,并在事务结束时回滚。我期望的结果是90行(提交应该在30、60和90行),rest 10记录应该回滚。
CREATE TABLE test (TEST_ID INT);
GO
DECLARE @cnt INT=0;
BEGIN TRANSACTION t1;
WHILE @cnt < 100
BEGIN
INSERT INTO test values (@cnt);
SET @cnt += 1;
我在Sqlplus中更新语句,并且没有提交代码。我正在使用出口进入终点站。
这只是一个简单的update语句,但我并没有提交代码。
示例:我使用用户名和密码连接到SQL Plus。
UPDATE USER SET Name='Daniel' WHERE Name='Francis';
exit
您可以指导我如何在另一个会话中提交,或者您是否可以更新可能的建议。
谢谢
我有一个应用程序,用户点击UI上的一个按钮,触发一个oracle函数。我希望避免该函数在DB中多次并行运行(一次应该只有一个正在进行的运行)。我可以使用下面的自定义锁定机制来实现这一点而不必担心死锁吗?
我的方法-
如果多个会话同时触发该函数,则标志最初将被设置为空,因为只有一个会话能够更新标记函数,在处理完成之后,将更新标志为NULL。
DDL
create table test_oracle_lock (id int, flag varchar(1), primary key (id));
自定义锁定代码以避免并行运行
update test_oracle_lock set flag =
我正在尝试使用JPA的@Version注释测试乐观锁定,该注释已添加到我的实体对象中:
@Version
@Setter(AccessLevel.NONE)
@Column(name = "VERSION")
private long version;
当我同时运行两台服务器时,我收到一个StaleObjectStateException:
Exception message is : Object of class [com.myPackage.WorkQueue] with identifier [9074]: optimistic locking failed;
我需要修改表中的所有内容。因此,我将修改封装在事务中,以确保所有操作都成功,或者没有操作成功。我用DELETE语句开始修改,然后插入。我发现,即使插入失败,删除仍在进行,数据库不会回滚到事务前状态。
我创建了一个例子来演示这个问题。将以下命令放入名为EXAMPLE.SQL的脚本中
CREATE TABLE A(id INT PRIMARY KEY, val TEXT);
INSERT INTO A VALUES(1, “hello”);
BEGIN;
DELETE FROM A;
INSERT INTO A VALUES(1, “goodbye”);
IN
我想测试一下我的包是否会改变数据。每个测试都应该保持数据的完整性。我最近在SQL Developer中发现了Unit Test Module,并尝试在启动时保存点,在teardown时回滚,但没有成功。有什么好方法可以做到这一点吗?
我的环境: Oracle 10g DB with SQL Developer 4.2
代码:启动是PL/SQL脚本BEGIN Savepoint sp; END;,拆除是PS/SQL脚本BEGIN ROLLBACK to sp; END;
我试图从Korn脚本中调用一个SQL*Plus (10g)脚本。
我不允许修改SQL*Plus脚本,其中包含一个SQL*Plus ACCEPT命令。
我正试图通过Korn脚本将这个ACCEPT-命令变量(下面是7788)的特定参数传递给SQL*Plus脚本。
下面是SQL*Plus脚本oracle_code.sql的精简版本
SET VERIFY OFF
ACCEPT abc PROMPT "Enter an empno:"
SELECT e.ename
FROM emp e
WHERE TO_CHAR(e.empno) = '&abc'
使用PowerShell,如何将输入重定向到sqlplus (非交互式stdin模式),这样一旦重定向输入完成,sqlplus就在交互式stdin模式下打开,而不退出SQL*Plus?
似乎重定向的输入正在发出一个隐式exit,而SQL*Plus正在处理该exit。
使用Oracle19c企业版,Oracle InstantClient 19c 64位,PowerShell桌面5.1.19041.1320,MicrosoftWindows10.0构建19042。
提前谢谢你。
dev.sql
set echo on
set serveroutput on
exec dbms_output.pu
我正在为PostgreSQL编写一个脚本,因为我希望它被原子地执行,所以我将它封装在一个事务中。
我希望脚本看起来像这样:
BEGIN
-- 1) Execute some valid actions;
-- 2) Execute some action that causes an error.
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END; -- A.k.a. COMMIT;
但是,在本例中,pgAdmin警告我在初始BEGIN之后出现语法错误。如果我在那里通过添加分号(如:BEGIN; )来终止命令,它反而会告诉我EXCEPTI
关于在SQL*PLUS中执行pl/sql脚本,我有一个简单的问题:
create or replace trigger CICD.S_ACCNT_POSTN_DELETE
after delete on CICD.S_ACCNT_POSTN
FOR EACH ROW
BEGIN
INSERT INTO CICD.CX_PROCCHLDDEL (ROW_ID, OBJECT_TYPE, PARENT_ID,
CHILD_ID,STATUS,CREATED,CREATED_BY,LAST_UPD,LAST_UPD_BY)
VALUES (: