it-source

Oracle SQL: 테이블 이름 대신 사용되는 변수

criticalcode 2023. 8. 14. 22:56
반응형

Oracle SQL: 테이블 이름 대신 사용되는 변수

MSSQL 스크립트를 Oracle로 변환하는 중인데 테이블 이름이나 열 대신 변수를 사용하는 구문을 파악하지 못했습니다.

다음은 구문을 더 잘 이해할 수 있도록 Oracle SQL Developer에서 작동하도록 시도한 간단한 예입니다.

 set serveroutput on format wrapped;
declare 
  VR_TABLE VARCHAR2(256);
  VR_UPDATE VARCHAR2(256);
begin
  VR_TABLE :='SYSTEM_STATUS';
  EXECUTE IMMEDIATE 'select UPDATE_VERSION INTO VR_UPDATE from ' || VR_TABLE || 'where rownum < 2 ;'
end;

여기서 VR_TABLE은 루프가 반복될 때마다 변경되는 변수 테이블 이름입니다.누가 제가 무엇을 잘못하고 있는지 지적하거나 제가 읽기에 유용한 사이트에 연결해 줄 수 있습니까?저는 이것에 대한 몇 가지 튜토리얼을 읽었지만, 지금까지 운이 없었습니다.

  1. 테이블 이름과 후속 테이블 이름 사이에 공백이 있어야 합니다.WHERE
  2. INTO의 일부가 되어야 합니다.EXECUTE IMMEDIATE동적 SQL 문의 일부가 아닙니다.
  3. 동적 SQL 문에는 뒤에 세미콜론이 없어야 합니다.
  4. EXECUTE IMMEDIATE문은 세미콜론으로 끝나야 합니다.

그것들을 종합하면, 이런 것이 작동할 것입니다.

declare 
  VR_TABLE VARCHAR2(256);
  VR_UPDATE VARCHAR2(256);
begin
  VR_TABLE :='SYSTEM_STATUS';
  EXECUTE IMMEDIATE 'select UPDATE_VERSION from ' || VR_TABLE || ' where rownum < 2'
               INTO VR_UPDATE;
end;

물론, 당신은 아무것도 하지 않을 것이기 때문에.VR_UPDATE이 익명 블록이 실행되면 아무것도 표시되지 않습니다.

쿼리의 INTO 부분을 쿼리 문자열에 직접 포함해서는 안 됩니다.

구문

EXECUTE IMMEDIATE(<SQL>)
[INTO<variable>]
[USING <bind_variable_value>]

위 구문에는 EXECUTE Immediate 명령이 표시됩니다.

절 INTO는 선택 사항이며 동적 SQL에 값을 가져오는 select 문이 포함된 경우에만 사용됩니다.변수 유형은 select 문의 변수 유형과 일치해야 합니다.

USING 절은 선택 사항이며 동적 SQL에 바인딩 변수가 포함된 경우에만 사용됩니다.

https://www.guru99.com/dynamic-sql-pl-sql.html#2

Dynamic SQL에 대한 더 나은 이해를 위해 이 사이트를 방문할 수 있습니다.

언급URL : https://stackoverflow.com/questions/11622233/oracle-sql-variables-used-in-place-of-table-names

반응형