콘텐츠로 이동

MOVE

MOVE#

구문#

move ::=#

move_image238

where_clause ::=, limit_clause::=

column_commalist ::=#

column_commalist_image239

expression_commalist ::=#

expression_commalist_image240

전제 조건#

테이블의 레코드를 이동(MOVE)하기 위해서는 테이블에서 레코드를 삭제할 수 있는 권한과 테이블에 레코드를 삽입할 수 있는 권한이 있어야 한다. 데이터 이동은 삽입과 삭제로 수행되기 때문이다.

INTO 절에 명시된 테이블에 레코드를 삽입하기 위해서는 SYS 사용자이거나 테이블의 소유자이거나 INSERT ANY TABLE 시스템 권한을 가진 사용자, 또는 그 테이블에 대한 INSERT 객체 권한을 가진 사용자이어야 한다.

FROM 절에 명시된 테이블에서 레코드를 삭제하기 위해서는 SYS 사용자이거나 테이블의 소유자이거나 DELETE ANY TABLE 시스템 권한을 가진 사용자, 또는 그 테이블에 대한 DELETE 객체 권한을 가진 사용자이어야 한다.

설명#

한 테이블에서 조건을 만족하는 레코드를 찾아 다른 테이블로 이동하는 구문이다. 또한 특정 파티션에 있는 데이터도 이동이 가능하다.

hints#

FROM절에 대한 힌트를 제공한다. 이는 SELECT구문에서 사용하는 힌트와 동일하다.

source_tbl_name, target_tbl_name#

데이터 이동에 관련된 테이블(원본 테이블과 대상 테이블)을 명시한다. 여기에는 뷰나 메타 테이블이 올 수 없다.

column_commalist#

대상 테이블에 속하는 실제 칼럼들의 리스트이다.

expression_commalist#

쉼표로 구분된 표현식들의 리스트이다. 각 표현식은 FROM 테이블에 속한 칼럼, 상수, 또는 표현식일 수 있다.

where_clause#

SELECT 구문의 WHERE 절과 구조가 동일하다.

limit_clause#

SELECT 구문의 LIMIT 절과 구조가 동일하다.

주의 사항#

  • 동일한 테이블간의 데이터 이동은 불가능하다.
  • 파티션을 지정할 경우 해당 파티션에 맞지 않는 값은 입력될 수 없다.
  • CHECK 제약조건으로 인해 MOVE가 실패할 수 있다.

예제#

<질의> t2테이블의 i1, i2 칼럼으로부터 t2.i2=4조건을 만족하는 모든 레코드를 t1 테이블의 i1, i2 칼럼에 삽입하고 t2 테이블에서 삭제한다.

iSQL> MOVE INTO T1(I1, I2) FROM T2(I1, I2) WHERE T2.I2 = 4;

<질의> t2테이블의 i1, i2, i3 칼럼으로 이루어진 레코드를 t1 테이블에 삽입하고 t2테이블에서 삭제한다. (테이블t1에는 t2의 i1, i2, i3 칼럼에 대응되는 칼럼이 있어야 하며 칼럼 개수가 서로 동일해야 한다.)

iSQL> MOVE INTO T1 FROM T2(I1, I2, I3);