SQL에 대한 delete 고려사항
SQL 컨텍스트에서 delete 문을 사용하는 경우, 이 명령문은 데이터베이스에서 행을 제거합니다. 이전에 get 또는 open 문을 forUpdate 옵션과 함께 사용하여 해당 레코드를 검색했어야 합니다.
EGL은 SQL 레코드 변수에 있는 정보를 사용하여 코드에 현재 행(커서가 가리키는 위치)을 참조하는
SQL DELETE 문을 작성합니다. 다음 SQL은 EGL delete 문과 동등합니다.
DELETE FROM tableName
WHERE CURRENT OF cursor
#sql 지시문을 사용하여
이 명령문을 다시 쓰는 옵션은 없습니다. EGL execute 문을 사용하여 사용자 정의 SQL DELETE 문을 쓰십시오. 단일 EGL delete 문을 사용하여 여러 SQL 테이블에서 행을 제거할 수는 없습니다.
구문

- SQLRecordVariable
- EGL이 단일 데이터베이스 행에서 검색한 정보를 저장한 메모리 영역을 참조합니다.
- SQLDynamicArray
- 이 변수는 SQL 레코드 변수로 구성된 동적 배열의 이름을 지정합니다. EGL delete는 전체 동적 배열을 삭제합니다. delete 문은 with #sql{ExplicitCode}를 사용할 수 없습니다. 커서 위치는 open 또는 get position 문을 사용하여 설정되어야 합니다.
- SQLDynamicArrayElement
- 동적 배열의 요소를 지정할 수 있습니다. EGL delete는 동적 배열에서 지정된 행을 삭제합니다. delete 문은 with #sql{ExplicitCode}를 사용할 수 없습니다. 커서 위치는 open 또는 get position 문을 사용하여 설정되어야 합니다.
- explicitCode
- 자신의 SQL DELETE 문을 임베드하여 EGL이 생성하는 암시적 코드를 대체할 수 있습니다.
- deleteOptions
- EGL이 생성하는 암시적 SQL 코드를 제어하려면 다음 옵션을 사용하십시오.
- cursor
- EGL에게 WHERE CURRENT OF cursorID 절을 작성하도록 알립니다. EGL은 해당 명령이 작성하는 커서에 대한 직접 액세스를 제공하지 않으므로 이전에 get 또는 open을 사용하여 결과 세트를 작성했어야 합니다. EGL은 SQL 레코드 변수 이름을 사용하여 이 cursorID를 찾습니다. 이는 기본 옵션입니다.
- nocursor
- 이 옵션은 표준 WHERE 절을 생성합니다. 또한 keyItems 특성을 포함하는 명시적 SQL 문 또는 레코드를 지정해야 합니다. 유효성 검증은 동일한 명령문에 nocursor와 usingKeys를 지정하도록 허용하지 않습니다.
- usingKeys
- 이 옵션은 SQLRecordVariable의 필드를 지정하여
SQL WHERE 절을 위한 조건을 제공합니다. 이러한 필드는 삭제할 데이터베이스 행의 해당 열에 일치해야 합니다. 참고: 복수 행 조작의 경우 EGL은 usingKeys를 지원하지 않습니다.
- from resultSetID
- 다음 조건이 참인 경우, 이전 EGL get 또는 open 문의 결과 세트 ID를 지정해야 합니다.
- 임베디드 SQL문(#sql 지시문 사용)을 사용하여 결과 세트를 작성했습니다.
- 해당 코드는 업데이트를 위해 EGL이 생성한 암시적 SQL과 다른 열 세트를 검색했습니다.
예제
다음 예제는 SQL을 위한 delete 문을 표시합니다.
try
get dept forUpdate;
dept.description = "Test Engineers";
delete dept;
commit();
onException(sqlEx SQLException)
sqlFailure();
end
다음 예제는 복수 행을 위한 delete 문을 표시합니다.
employees Employee[0]{rowsetsize=10};
Open resultset1 forUpdate with #sql{
select eID, uName, PASSWORD, fName, lName, office, sex, EMail
from EMPLOYEETEST
} for employees;
Get Next employees;
Delete employees[2]; //this deletes the second row in the row set using
//“WHERE CURRENT OF CS1”
i int = 2;
Delete employees[i]; //the index could be a variable
Delete employees; //this deletes the whole row set from current cursor
호환성
| 플랫폼 | 문제 |
|---|---|
| COBOL 생성 | COBOL에서 최고의 성능을 위해 delete 문에 항상 from resultSet 절을 포함시키십시오. |
| SQL Server | 복수 행 delete last와 get last는 함께 사용될 수 없습니다. 두 명령문이 한 번에 실행되는 경우 결과 세트가 닫힙니다. |
| i5/OS™용 DB2® | 저널링이 사용되거나 연결 문자열에 transation isolation=none을 추가해야 합니다. |