>  기사  >  데이터 베이스  >  Oracle 저장 프로시저에서 임시 테이블을 만드는 방법

Oracle 저장 프로시저에서 임시 테이블을 만드는 방법

PHPz
PHPz원래의
2023-04-04 09:16:557597검색

Oracle 저장 프로시저는 사용자가 코드를 작성하고 이를 데이터베이스에 저장하여 필요할 때 반복적으로 사용할 수 있도록 하는 Oracle 데이터베이스의 프로그래밍 방법입니다. 저장 프로시저는 일련의 SQL 문이나 기타 프로그램 코드를 실행할 수 있으며 입력 매개 변수를 받아들이고 출력 결과를 반환할 수 있습니다.

Oracle 저장 프로시저에서 임시 테이블은 후속 처리를 위해 임시 데이터 컬렉션을 저장하는 데 사용할 수 있는 매우 실용적인 기능입니다. 이 문서에서는 Oracle 저장 프로시저의 임시 테이블 구현에 대해 자세히 설명합니다.

1. Oracle 저장 프로시저의 임시 테이블 소개

Oracle에서 임시 테이블은 일반 테이블과 유사한 개체이지만 현재 세션에만 존재하며 세션이 끝나면 자동으로 삭제됩니다. 임시 테이블은 Oracle 데이터베이스에서 제공하는 임시 저장 구조로, 후속 처리를 위해 일시적으로 생성된 일부 데이터를 편리하게 저장할 수 있습니다. 일반 테이블과 달리 임시 테이블의 데이터는 디스크에 유지되지 않습니다.

Oracle은 전역 임시 테이블과 로컬 임시 테이블이라는 두 가지 유형의 임시 테이블을 지원합니다. 전역 임시 테이블은 여러 세션에서 공유할 수 있는 임시 테이블인 반면, 로컬 임시 테이블은 이를 생성한 세션에서만 액세스할 수 있습니다. 전역 임시 테이블이 데이터베이스에 존재하므로 일부 시나리오에서는 로컬 임시 테이블보다 더 실용적입니다.

저장 프로세스에서 임시 테이블을 사용하여 중간 결과 세트를 저장하면 데이터 읽기 및 쓰기 횟수를 줄이고 처리 속도를 높일 수 있습니다. 복잡한 저장 프로시저에서는 중간 결과 집합을 여러 번 처리해야 할 수 있으므로 데이터베이스에 자주 액세스하지 않으려면 중간 결과 집합을 임시 테이블에 저장하는 것이 좋습니다.

2. Oracle 저장 프로시저에서 임시 테이블을 생성하는 방법

Oracle 저장 프로시저에서 임시 테이블을 생성하는 방법은 일반 테이블을 생성하는 것과 유사합니다. 테이블 이름 앞에 접두사로 "##"을 추가하면 됩니다. 그 중 "##"은 전역 임시 테이블 생성을 의미하고, "#"은 로컬 임시 테이블 생성을 의미한다.

예를 들어 다음 코드는 전역 임시 테이블을 생성하는 방법을 보여줍니다.

CREATE GLOBAL TEMPORARY TABLE ##TEMP_TABLE
(
    ID NUMBER(10),
    NAME VARCHAR2(100)
) ON COMMIT PRESERVE ROWS;

위 코드에서 "ON COMMIT PRESERVE ROWS"는 트랜잭션이 커밋될 때 테이블의 모든 행 데이터를 지우는 것이 아니라 테이블의 모든 행 데이터를 유지한다는 의미입니다. 테이블의 데이터.

다음은 로컬 임시 테이블을 생성하는 예입니다.

CREATE GLOBAL TEMPORARY TABLE #TEMP_TABLE
(
    ID NUMBER(10),
    NAME VARCHAR2(100)
) ON COMMIT PRESERVE ROWS;

물론 실제 필요에 따라 테이블 정의에 인덱스, 제약 조건 등을 추가할 수도 있습니다.

3. Oracle 저장 프로시저에서 임시 테이블 사용

Oracle 저장 프로시저에서 임시 테이블을 사용할 때는 다음 사항에 주의해야 합니다.

  1. 저장 프로시저에서 임시 테이블을 사용하기 전에 먼저 테이블을 생성해야 합니다. . 프로세스 시작 시 수행된 내용을 저장할 수 있습니다.
  2. 저장 프로시저 실행이 완료된 후 임시 테이블의 데이터를 지워야 하며, 이는 DELETE 문을 사용하여 수행할 수 있습니다.
  3. 저장 프로시저가 종료되면 전역 임시 테이블은 자동으로 삭제되며, 로컬 임시 테이블은 DROP TABLE 문을 통해 삭제해야 합니다.

다음 예에서는 Oracle 저장 프로시저에서 임시 테이블을 사용하는 방법을 보여줍니다.

CREATE OR REPLACE PROCEDURE PROCESS_DATA AS
BEGIN
    -- 创建全局临时表
    CREATE GLOBAL TEMPORARY TABLE ##TEMP_TABLE
    (
        ID NUMBER(10),
        NAME VARCHAR2(100)
    ) ON COMMIT PRESERVE ROWS;
    
    -- 插入数据到临时表中
    INSERT INTO ##TEMP_TABLE(ID, NAME) VALUES (1, '张三');
    INSERT INTO ##TEMP_TABLE(ID, NAME) VALUES (2, '李四');
    INSERT INTO ##TEMP_TABLE(ID, NAME) VALUES (3, '王五');
    
    -- 处理临时表中的数据
    FOR item IN (SELECT * FROM ##TEMP_TABLE)
    LOOP
        DBMS_OUTPUT.PUT_LINE(item.ID || ' ' || item.NAME);
    END LOOP;
    
    -- 清除临时表中的数据
    DELETE FROM ##TEMP_TABLE;

    -- 删除全局临时表
    DROP TABLE ##TEMP_TABLE;
END;

위 예에서는 전역 임시 테이블 ##TEMP_TABLE이 먼저 생성되고 일부 데이터가 삽입됩니다. 그런 다음 임시 테이블의 데이터가 처리되고 임시 테이블의 내용이 지워지며 마지막으로 임시 테이블이 삭제됩니다.

요약:

Oracle 저장 프로시저에서 임시 테이블은 데이터를 처리하는 편리하고 효율적인 방법입니다. 임시 테이블을 사용하면 데이터베이스에 자주 액세스하는 것을 방지하고 저장 프로시저의 실행 속도를 향상시킬 수 있습니다. 임시 테이블을 사용할 때는 테이블의 데이터를 지우는 데 주의를 기울여야 하며, 예상치 못한 예외가 발생하지 않도록 필요한 경우 테이블을 수동으로 삭제해야 합니다.

위 내용은 Oracle 저장 프로시저에서 임시 테이블을 만드는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.