>

PLSQL 내에 2 개의 테이블을 만들어야하는 요구 사항이 있습니다.  블록. 현재 우리는 EXECUTE IMMEDIATE 를 사용하고 있습니다 . 이제 문제는 2 개의 테이블을 만들어야하지만 EXECUTE IMMEDIATE 를 사용할 수 있다는 것입니다  한 번만.

PLSQL 내에서 테이블을 생성하는 방법이 있습니까  어느 쪽이든 1) EXECUTE IMMEDIATE 를 사용하지 않고 또는 2) 단일 사용 EXECUTE IMMEDIATE 내에 2 개의 테이블을 작성하십시오.

아래처럼 시도했습니다. 일부 트레일 및 오류 조합. 그러나 도움이되지 않았습니다. 다음과 같이 예상됩니다.

EXECUTE IMMEDIATE 
'BEGIN
  CREATE TABLE NEW_TABLE1 AS
  SELECT T1.*,
    ''Y'' PROCESS_FLAG
  FROM TABLE1 T1
  WHERE T1.PRIMAR_ID IN ( 300000005137174 ,300000005142005);
  CREATE TABLE NEW_TABLE2 AS
  SELECT T2.*,
    ''Y'' PROCESS_FLAG
  FROM TABLE2 T2
  WHERE T2.CODE       IS NULL
  AND T2.SECONDARY_ID IN
    (SELECT DISTINCT(T_TEMP.PRIMAR_ID)
    FROM NEW_TABLE1 T_TEMP
    WHERE T_TEMP.PROCESS_FLAG = ''Y''
    );
END' ;


  • 답변 # 1

    그다지 좋지는 않지만 여러 개의 execute immediate 를 실행할 수 있음을 인정합니다.   plsql 내부   execute immediate 에서 차단 :

    begin
        execute immediate '
            begin
                execute immediate ''create table a(c number)'';
                execute immediate ''create table b(c number)'';
            end;
        ';
    end;
    
    
    수정 :

    의견에 따라 다음을 실행할 수 있습니다.

    begin
        execute immediate '
            BEGIN 
                execute immediate ''
                    CREATE TABLE NEW_TABLE1 AS 
                    SELECT T1.*, ''''Y'''' PROCESS_FLAG
                    FROM TABLE1 T1 
                    WHERE T1.PRIMAR_ID IN ( 300000005137174 ,300000005142005)
                '';
                execute immediate ''
                    CREATE TABLE NEW_TABLE2 AS 
                    SELECT T2.*, ''''Y'''' PROCESS_FLAG
                    FROM TABLE2 T2
                    WHERE T2.CODE IS NULL 
                    AND T2.SECONDARY_ID IN (
                        SELECT distinct(T_TEMP.PRIMAR_ID)
                        FROM NEW_TABLE1 T_TEMP
                        WHERE T_TEMP.PROCESS_FLAG = ''''Y''''
                    )
                ''; 
            END;
        ';
    end;
    
    

    또한 문제를 다시 생각해야 할 수도 있습니다. 테이블을만들기해야합니까? 미리 테이블을 만들 수 없으며 간단한 삽입 만 할 수 있습니다. 동적 SQL을 피할 수 있습니다.

관련 자료

  • 이전 sql server - SSRS 업데이트 데이터 소스는 항상"비밀번호가 유효하지 않습니다 비밀번호를 다시 입력하십시오"
  • 다음 python - python3 open"x"모드는 무엇을합니까?