데이터 Perspective에서 도구를 사용하여 새 CREATE 문을
실행할 수 있지만 EGL 응용프로그램에서 사용자 정의 SQL 코드를 실행해야
하는 경우도 있습니다. EGL 응용프로그램에 사용자 정의된 SQL 코드를
삽입할 때마다 예상한대로 작업을 수행하는지 철저히
테스트해야 합니다.
EGL
execute 문을 사용하여 SQLRecord 변수를
처리하지 않고 SQL 코드를 실행할 수 있습니다.
execute를
사용하여 다양한 SQL 문(CREATE, ALTER, and DROP TABLE, INSERT, DELETE 및 UPDATE)을
실행할 수 있습니다. 예를 들어, 다음과 같이 데이터베이스에서
테이블을 제거할 수 있습니다.
execute #sql{
DROP TABLE OLD_TABLE;
}
execute 문은
일부 SQL 문(특히, SELECT 및 OPEN)을 지원하지 않습니다. execute와
작동하거나 작동하지 않는 SQL 문 목록은 SQL의
execute 고려사항을 참조하십시오.
다음과 같이
execute를 사용하여
스토어드 프로시저를 호출할 수도 있습니다.
execute #sql{
call aStoredProcedure( :parameterVar)
};
Derby는 대부분의 데이터베이스 관리 시스템과 같은 방식으로
스토어드 프로시저를 지원하지 않으므로 이 학습서는 스토어드 프로시저를 다루지 않습니다.
대신, 이 절에서는
execute를 사용하여
데이터베이스에 테이블을 작성한 다음 SQLRecord 파트를 사용하지 않고
이 테이블을 데이터로 채웁니다.
- EGL Perspective로 되돌아가십시오.
- libraries 패키지에서 CustomerTableOperations.egl이라는
파일의 새 라이브러리 파트를 작성하십시오.
- execCreateTable, execInsertIntoTable
및 execDropTable이라는 새 함수를 라이브러리에 삽입하십시오.
각 함수는 매개변수로 StatusRec 레코드 변수를 받습니다.
function execCreateTable(status StatusRec inOut)
end
function execInsertIntoTable(status StatusRec inOut)
end
function execDropTable(status StatusRec inOut)
end
StatusRec 레코드 변수는 데이터베이스 오퍼레이션의
성공 또는 실패에 대한 정보를 기록합니다.
- 컨텐츠 지원을 사용하여 매개변수를 추가하지 않은 경우
다음 import 문을 파일의 맨 위
package 문 바로 아래 추가하십시오.
import eglderbyr7.StatusRec;
- execCreateTable 함수에서 execute 문을 사용하여
이전 절에서 작성한 CREATE TABLE 문을 실행하십시오.
function execCreateTable(status StatusRec inOut)
try
execute
#sql{
CREATE TABLE EGL.CUSTOMERTEMP (
CUSTOMER_ID INTEGER NOT NULL,
FIRST_NAME VARCHAR(30),
LAST_NAME VARCHAR(30),
PASSWORD CHAR(8),
PHONE VARCHAR(14),
EMAIL_ADDRESS VARCHAR(50),
STREET VARCHAR(30),
APARTMENT VARCHAR(10),
CITY VARCHAR(30),
STATE CHAR(2),
POSTALCODE VARCHAR(10),
DIRECTIONS VARCHAR(255)
)
};
onException (exception SQLException)
ConditionHandlingLib.HandleException(status, exception);
end
end
이 함수가 테이블을 작성한 다음
데이터베이스에서 데이터 파트 및 논리 파트와 함께 작성된 HandleSuccess 함수를
사용하여 모든 오류를 처리합니다.
- 컨텐츠 지원을 사용하여 이 코드를 추가하지 않은 경우 다음 import 문을
파일의 맨 위에 추가하십시오.
import eglderbyr7.ConditionHandlingLib;
- execDropTable 함수에서, 데이터베이스에서 테이블을 제거하는 execute 문을
추가하십시오.
function execDropTable(status StatusRec inOut)
try
execute #sql{
DROP TABLE EGL.CUSTOMERTEMP
} ;
onException (exception SQLException)
ConditionHandlingLib.HandleException(status, exception);
end
end
- execInsertIntoTable 함수에서, CUSTOMER 테이블에서 CUSTOMERTEMP 테이블로
레코드를 이동하는 execute 문을 추가하십시오.
function execInsertIntoTable(status StatusRec inOut)
try
execute #sql{
INSERT INTO EGL.CUSTOMERTEMP
SELECT * FROM EGL.CUSTOMER
} ;
onException (exception SQLException)
ConditionHandlingLib.HandleException(status, exception);
end
end
이 코드는 CUSTOMER에서 CUSTOMERTEMP로 각 레코드를 복사하기만 합니다.
원하는 경우 복사하려는 특정 레코드만 선택하도록 WHERE절을
추가할 수 있습니다.
- 라이브러리를 저장하고 생성하십시오.
- programs 패키지에서 duplicateTable.egl이라는
파일에 새 프로그램 파트를 작성하십시오.
- 새 프로그램에서 새 테이블을 작성한 다음 레코드를 삽입하는
함수를 호출하십시오.
package programs;
import eglderbyr7.StatusRec;
import libraries.CustomerTableOperations;
program duplicateTable type BasicProgram {}
status StatusRec;
function main()
CustomerTableOperations.execCreateTable(status);
CustomerTableOperations.execInsertIntoTable(status);
end
end
- 프로그램을 생성하고 실행하십시오.
- 데이터 Perspective로 돌아온 다음 데이터베이스 탐색기 보기에서
데이터베이스에 다시 연결하십시오.
- 이전 절에서와 같이 새 테이블의 데이터 미리보기를 수행하여
새 테이블과 해당 데이터를 확인하십시오.
- 을 펼치십시오.
- CUSTOMERTEMP 테이블을 마우스 오른쪽 단추로 클릭한 다음 를 클릭하십시오.
이제, 새 테이블의 데이터를 확인할 수 있습니다.
이제,
새 테이블과 작동할 기타 명령문을 작성하거나 execDropTable 함수를 호출하여
데이터베이스에서 제거할 수 있습니다. 예를 들어,
CREATE TABLE 문과 함께 작성된 ALTER TABLE 및 CREATE INDEX 문을 실행할 수도
있습니다. 하지만, 이 경우 Derby가 1차 키 제한조건의 중복된 이름을 허용하지
않으므로 제한조건 및 색인의 이름을 바꾸어야 합니다. 데이터베이스에 액세스하는
EGL 코드를 실행하기 전에 데이터베이스 탐색기 보기에서 데이터베이스에 대한 연결을 끊도록 하십시오.
이 학습에서 사용하는 두 파일의 전체 코드를 살펴보십시오. 파일에 빨간색 X 기호로
표시된 오류가 나타나면 사용자의 코드가 학습 6에서 완성된 CustomerTableOperations.egl 및 duplicateTable.egl 파일의 코드와 일치하는지 확인하십시오.