준비된 명령문 실행

prepare 키워드는 문자열로부터 SQL문을 생성합니다. 그 후에는 다른 데이터 액세스 명령문을 사용하여 준비된 명령문을 실행할 수 있습니다.

명시 SQL 코드 대신 준비된 명령문을 사용하면 반복해서 사용하는 데이터 액세스 조작의 성능을 향상시킬 수 있습니다. 준비된 명령문을 작성하면 데이터베이스는 해당 명령문에 필요한 대부분의 처리를 미리 수행합니다. 데이터베이스는 이를 통해 준비된 명령문을 실행할 때 수행해야 되는 처리의 양을 줄입니다. 사용자가 준비된 명령문을 사용할지, 또는 명시 SQL을 사용할지는 데이터 액세스 조작을 사용하는 횟수에 따라 달라집니다.

근본적으로 준비된 명령문을 실행하는 것은 명시 SQL 코드를 실행하는 것과 다르지 않습니다. 다음 두 함수는 동격입니다.
function executeExplicitSQL()
    myCustomers myCustomers[0];
    get myCustomers with #sql{
        SELECT CUSTOMER_ID, LAST_NAME
        FROM MYSCHEMA.MYTABLE
    };
end
function executePreparedStatement()
    myCustomers myCustomers[0];
    prepare myStatement from 
        "SELECT CUSTOMER_ID, LAST_NAME FROM MYSCHEMA.MYTABLE";
    get myCustomers with myStatement;
end

앞서 제시된 예제에서는 준비된 명령문을 실행하는 데 get 문을 사용했으나 execute 또는 open을 사용할 수도 있습니다. 각각의 경우 준비된 명령문은 데이터 액세스 명령문에 대해 적합해야 합니다. 즉, 문자열을 명시 SQL로 실행할 수 있는 경우에는 문자열을 준비된 명령문으로 준비하여 실행할 수도 있습니다. prepareSELECT와 같은 표준 SQL문, 변수를 포함하는 동적 SQL문 및 스토어드 프로시저에 대한 호출에 사용할 수 있습니다.

참고: EGL prepare문은 Java™ PreparedStatement 오브젝트와 동일하지 않지만 두 가지는 모두 성능을 향상시킬 수 있습니다. Java PreparedStatement 오브젝트에 대한 정보는 prepareAllSQLStatements의 내용을 참조하십시오.

명령문 준비 및 실행

명령문을 준비하려면 먼저 명령문을 저장할 문자열 변수를 작성하십시오. 다른 모든 문자열과 마찬가지로, 변수에 직접 값을 지정하거나 이 값을 여러 문자열 또는 변수로부터 조합할 수 있습니다.
myString string = "SELECT ";
myString += "CUSTOMER_ID, LAST_NAME ";
myString += "FROM MYSCHEMA.MYTABLE";

그 후 prepare를 사용하여 이 변수로부터 준비된 명령문을 작성하고 명령문을 새 ID에 지정하십시오.

prepare myStatement from myString;
또한 for 절을 추가하여 준비된 명령문과 함께 사용할 SQLRecord를 지정할 수도 있습니다.
myCustomer myCustomers;
prepare myStatement2 from myString for myCustomer;
마지막으로 명령문을 실행하고 결과를 변수에 저장하십시오.
myCustomerArray myCustomers[];
get myCustomerArray with myStatement2;

준비된 명령문에 변수 사용

준비된 명령문은 변수를 삽입할 경우 더욱 유용합니다. 사용자는 준비된 명령문의 변수를 사용함으로써 단순히 EGL 변수 값을 삽입하는 것 뿐만 아니라, 동적 명령문이 사용하는 변수를 변경할 수 있으므로 준비된 명령문의 변수는 일반 명시 SQL 코드의 호스트 변수보다 더 큰 영향력을 갖습니다.

준비된 명령문을 작성할 때는 변수를 표시하는 데 물음표(?)를 사용합니다. 이 물음표는 나중에 using 절을 사용하여 값을 삽입할 수 있는 플레이스홀더 역할을 수행합니다.
myCustomerID int = 5;
myCustomerArray myCustomers[];
myHostVarString string = "SELECT CUSTOMER_ID, LAST_NAME";
myHostVarString += " FROM MYSCHEMA.MYTABLE";
myHostVarString += " WHERE CUSTOMER_ID = ?";
prepare myStatement from myHostVarString;
get myCustomerArray with myHostVarString using myCustomerID;
이 경우에는 using myCustomerID 절을 변경하여 다른 상황에 다른 변수를 사용할 수 있습니다.

자세한 준비된 명령문 작성

EGL은 prepare 문 및 관련 execute, get 또는 open 문을 작성하는 도구 또한 제공합니다.

  1. 로직 파트에 있는 함수 내에서 빈 행을 마우스 오른쪽 단추로 클릭한 후 SQL Prepare 문 추가를 클릭하십시오. SQL Prepare 문 추가 창이 열립니다.
  2. 준비된 명령문 ID 필드에서 EGL prepare 문을 식별하는 이름을 입력하십시오. 규칙에 대해서는 EGL 언어 참조의 "이름 지정 규칙"을 참조하십시오.
  3. SQL 레코드 변수 이름 필드에서는 목록에서 레코드 변수를 선택하거나, 새 변수의 이름을 입력한 후 찾아보기 단추를 사용하여 SQL 레코드 파트를 선택하십시오. 최종적으로는 EGL 소스 코드에 해당 이름을 사용하여 SQL 레코드 변수를 정의해야 합니다.
  4. 실행 명령문 유형 필드에서 execute,get 또는 open을 선택하십시오.
  5. 실행 명령문 유형 필드에서 open을 선택한 경우에는 결과 세트 ID 필드에 결과 세트의 ID를 입력하십시오.
  6. 확인을 클릭하십시오. EGL이 prepare 문 및 관련 데이터 액세스 명령문을 작성합니다.