[SQL] 합니까 오라클 롤 오류에 트랜잭션을?
SQL합니까 오라클 롤 오류에 트랜잭션을?
바보 같은 질문 같은이 Feel로는,하지만 난 트랜잭션 관리의 Oracle 개념 가이드에서 다음을 참조하십시오
오전 나는 오류가있는 쿼리를 실행하면, 트랜잭션이 롤백 얻을 것이라는 점을 의미하는 마지막 점을 해석하는?
해결법
-
==============================
1.이러한 맥락에서 "사용자 프로세스는"오라클의 연결을 생성하는 클라이언트 시스템에서 실행중인 프로세스를 참조한다. 오라클에 연결하는 응용 프로그램 A (SQL * 플러스, 두꺼비 등)을 사용하는 경우 즉, 사용자 프로세스 등 SQL * 플러스, 두꺼비, 경우 해당 사용자 프로세스 다이 당신은 중간에있는 동안 트랜잭션은 그 트랜잭션이 롤백됩니다. 이것은 클라이언트가 오라클은 단지에서 명령을 실행되지 않도록 사용자 프로세스에서 사용자 프로세스의 실패를 구별하는 것이 항상 사소한 아니다으로 .. 조금 걸릴 수 사망했다고 PMON의 발견하여 즉시 일어날 것입니다 순간.
이러한 맥락에서 "사용자 프로세스는"오라클의 연결을 생성하는 클라이언트 시스템에서 실행중인 프로세스를 참조한다. 오라클에 연결하는 응용 프로그램 A (SQL * 플러스, 두꺼비 등)을 사용하는 경우 즉, 사용자 프로세스 등 SQL * 플러스, 두꺼비, 경우 해당 사용자 프로세스 다이 당신은 중간에있는 동안 트랜잭션은 그 트랜잭션이 롤백됩니다. 이것은 클라이언트가 오라클은 단지에서 명령을 실행되지 않도록 사용자 프로세스에서 사용자 프로세스의 실패를 구별하는 것이 항상 사소한 아니다으로 .. 조금 걸릴 수 사망했다고 PMON의 발견하여 즉시 일어날 것입니다 순간.
-
==============================
2.이 흥미로운 질문입니다!
이 흥미로운 질문입니다!
오라클 오류가 발생하면 현재 명령문이 아닌 트랜잭션을 롤백합니다. 성명은 어떤 최상위 명령, 그것은 SQL 문 (INSERT, UPDATE ...) 또는 PL / SQL 블록이 될 수 있습니다.
성명 (예를 들어 자바에서 호출 PL / SQL 프로 시저) 오류를 반환 할 때, 오라클은 호출 이전과 동일한 논리 상태로 거래를 넣어 것이 의미합니다. 이것은 대단히 도움이 될 것입니다, 당신은 반 실행 절차 (**)에 대해 걱정할 필요가 없습니다.
AskTom에이 스레드는 동일한 주제를 다루고 있습니다 :
begin savepoint foo; <<your statement>> exception when others then rollback to foo; RAISE; end;
이 기능은, 내 의견으로는, 그것은 쓰기 데이터베이스 코드에 훨씬 쉽게 이유 (*)에서 PL / SQL 다른 언어보다.
물론 오라클 DB와 상호 작용, 나는 다른 DBMS의 기본 절차 언어를 가정하는 것이 (*) 코드와 유사한 기능을 가지고 있습니다.
DDL은 오라클의 트랜잭션하지 않기 때문에 (**)에만 DML은에 관한 것이다. 또한 데이터 사전 (예 : DBMS_STATS 등), 그들은 종종 변화와 문제 커밋 DDL-좋아해요 업데이트하는 것이 어떤 DBMS 패키지에주의하십시오. 의심의 경우 설명서를 참조하십시오.
업데이트 :이 동작은 PL / SQL에서 가장 중요한 개념 중 하나입니다, 나는 PL / SQL 문장의 자성을 보여주기 위해 작은 예제를 제공합니다 :
SQL> CREATE TABLE T (a NUMBER); Table created SQL> CREATE OR REPLACE PROCEDURE p1 AS 2 BEGIN 3 -- this statement is successful 4 INSERT INTO t VALUES (2); 5 -- this statement will raise an error 6 raise_application_error(-20001, 'foo'); 7 END p1; 8 / Procedure created SQL> INSERT INTO t VALUES (1); 1 row inserted SQL> EXEC p1; begin p1; end; ORA-20001: foo ORA-06512: at "VNZ.P1", line 5 ORA-06512: at line 2 SQL> SELECT * FROM t; A ---------- 1
오라클은 (P1)를 호출하기 전에 지점으로 트랜잭션을 롤백하고있다. 수행에는 반 일이 없다. 이 프로 시저 (P1)가 호출되지 않았던 것처럼입니다.
-
==============================
3.나는 저스틴과 그의 통찰력이 올바른지 동의합니다. 추가 정보를 추가 : 오류가 발생하는 경우 응용 프로그램 개발자, 사용자가 명시 적으로 롤백 명령을 호출해야합니다. 이 방법은 또한 적절한 트랜잭션 블록으로 그룹화 문을 고려해야한다. 트랜잭션 블록과 롤백이 다른 기술에 의해 다르게 처리됩니다, 일부 연구는 당신이 잘 이해할 수 있도록하는 가치입니다.
나는 저스틴과 그의 통찰력이 올바른지 동의합니다. 추가 정보를 추가 : 오류가 발생하는 경우 응용 프로그램 개발자, 사용자가 명시 적으로 롤백 명령을 호출해야합니다. 이 방법은 또한 적절한 트랜잭션 블록으로 그룹화 문을 고려해야한다. 트랜잭션 블록과 롤백이 다른 기술에 의해 다르게 처리됩니다, 일부 연구는 당신이 잘 이해할 수 있도록하는 가치입니다.
from https://stackoverflow.com/questions/1468116/does-oracle-roll-back-the-transaction-on-an-error by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL Server 2008의 쉼표로 분할 문자열 (0) | 2020.07.08 |
---|---|
[SQL] 두 날짜 사이의 금요일의 수 (0) | 2020.07.08 |
[SQL] 어떻게 PHP :: PDO를 사용하여 변수 MySQL의 스크립트를 실행하려면? (0) | 2020.07.08 |
[SQL] PostgreSQL의 여러 배열의 교차로 (0) | 2020.07.08 |
[SQL] 데이터베이스의 각 테이블의 처음 3 개 행을 선택 (0) | 2020.07.08 |