sourcecode

Oracle SQL을 사용한 트랜잭션은 어떻게 사용합니까?

copyscript 2023. 8. 17. 21:45
반응형

Oracle SQL을 사용한 트랜잭션은 어떻게 사용합니까?

Oracle DB가 있는 SQL-Console에서 트랜잭션 블록을 사용하려고 합니다.저는 Postgre에서 트랜스액션 블록을 사용하는 데 익숙합니다.SQL과 같은

BEGIN;
<simple sql statement>
END;

하지만 오라클에서는 이것이 가능하지 않은 것 같습니다.항상 "ORA-00900" 오류가 발생하는데 어떻게 해결해야 할지 모르겠습니다.다음과 같은 SQL 문을 사용하면

<simple sql statement>
COMMIT;

그건 효과가 있다.하지만 거래의 시작을 정의하는 태그가 있지 않습니까?나는 노력했다.

START TRANSACTION;
<simple sql statement>
COMMIT;

하지만 여전히 ORA-00900을 발사합니다.제 운영체제는 윈도우이며, IntelliJ IDEA와 Oracle 11g DB를 사용하고 있습니다.

에서와 같이 SQL 문 하나를 실행하여 암묵적인 트랜잭션 블록을 가질 수 있습니다.

<simple sql statement>
Commit;

익명 블록 또는 PL/SQL 프로시저/함수/패키지의 경우 Postgres에서 볼 수 있는 추가 옵션을 사용할 수 있습니다.

모든 것이 성공하거나 모두 성공해야 하는 문장이 여러 개 있는 경우(원자성 트랜잭션인 경우) 설명서에서 다음을 수행할 수 있습니다.

DECLARE
   <variable declaration>
BEGIN
   <simple sql statement>
   <simple sql statement>
   <simple sql statement>
   SAVEPOINT do_insert;
   <sql insert statement>
EXCEPTION
   WHEN DUP_VAL_ON_INDEX THEN
      ROLLBACK TO do_insert;
      DBMS_OUTPUT.PUT_LINE('Insert has been rolled back');
END;
--and commit outside the transaction

일반적인 읽기 전용 트랜잭션은 첫 번째 수정된 행에서 자동으로 시작됩니다.

트랜잭션을 명시적으로 설정하려면 다음을 사용합니다.

SET TRANSACTION ISOLATION LEVEL READ COMMITTED그러나 트랜잭션은 이 문이 실행될 때가 아니라 첫 번째 행이 수정될 때 실제로 생성됩니다.

또는

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE이 경우 읽기 일관성은 이 명령을 실행할 때 사용됩니다.READ ONLY트랜잭션의 읽기 일관성 효과는 동일합니다.

언급URL : https://stackoverflow.com/questions/35178808/how-do-i-use-transaction-with-oracle-sql

반응형