커서는 책갈피와 같이 동작하는 SQL 구성으로서, 행을 가리키고 사용자가 한 번에 하나씩 일련의 검색 결과(즉, 테이블 행)를 단계적으로 이동할 수 있도록 합니다. EGL이 커서를 관리할 수 있지만 커서를 이용하도록 open 및 forEach 문도 제공합니다.
이전 학습에서 delete 문이 키워드 noCursor를 포함하고 있다는 것을 인지했을 것입니다. get 문이 전체 테이블에서 하나 이상의 행을 선택하는 반면, delete문은 일반적으로 이전 명령문에서 작성한 커서가 표시하는 행에 대해서만 작동합니다. noCursor 키워드는 해당 커서가 존재하지 않으며 명령문이 기본 get 문과 같은 방식으로 WHERE절을 사용하여 행을 식별해야 한다는 것을 나타냅니다.
EGL open 문은 커서를 작성하고 커서가 이동할 수 있는 하나 이상의 행 세트 또는 결과 세트를 표시합니다. 커서에 직접 액세스하지 않고 다른 EGL 문을 사용하여 커서가 표시하는 대로 결과 세트에서 다음 행을 검색하거나 커서를 사용하여 한 번에 한 행을 단계적으로 이동하여 전체 결과 세트에서 조작을 수행합니다.
tempItem Item; open allExpensiveItems for tempItem;이 예제에서 tempItem은 데이터베이스의 ITEMS 테이블을 표시하는 SQLRecord 파트의 단일 레코드 변수입니다. for tempItem 코드는 EGL이 커서를 사용하여 한 번에 하나씩 이 레코드에 행을 이동하도록 지정합니다. open allExpensiveItems 코드는 결과 세트에 이름을 부여합니다. allExpensiveItems는 엄격히 말해서 변수가 아니라 ID입니다.
tempItem Item;
open expensiveItems for tempItem with
#sql{
select
EGL.ITEM.ITEM_ID, EGL.ITEM.NAME, EGL.ITEM.IMAGE,
EGL.ITEM.PRICE, EGL.ITEM.DESCRIPTION
from EGL.ITEM
where
EGL.ITEM.ITEM_ID >= :tempItem.ItemId
order by
EGL.ITEM.ITEM_ID asc
};
이 기본 WHERE절은 각 항목의 ITEM_ID 값이
이전 값보다 커야함을 지정합니다(EGL은 SQL DECLARE
CURSOR 및 OPEN CURSOR 문을 관리하며 명시적 SQL에 표시하지 않음). tempItem Item;
maxCost Price = 500;
open expensiveItems for tempItem with
#sql{
select
EGL.ITEM.ITEM_ID, EGL.ITEM.NAME, EGL.ITEM.IMAGE,
EGL.ITEM.PRICE, EGL.ITEM.DESCRIPTION
from EGL.ITEM
where
EGL.ITEM.PRICE >= :maxCost
order by
EGL.ITEM.ITEM_ID asc
};
이제, expensiveItems 결과 세트에는 500으로 설정된
maxCost 변수 이상인 PRICE 열이 있는 데이터베이스의 모든 행이
포함됩니다. tempItem Item;
maxCost Price = 500;
open expensiveItems for tempItem with
#sql{
select
EGL.ITEM.ITEM_ID, EGL.ITEM.NAME, EGL.ITEM.IMAGE,
EGL.ITEM.PRICE, EGL.ITEM.DESCRIPTION
from EGL.ITEM
where
EGL.ITEM.PRICE >= :maxCost
order by
EGL.ITEM.ITEM_ID asc
};
foreach (tempItem)
SysLib.writeStdout(tempItem.Name :: " " ::
tempItem.Description :: " $" :: tempItem.Price);
end
tempItem Item;
maxCost Price = 500;
open expensiveItems for tempItem with
#sql{
select
EGL.ITEM.ITEM_ID, EGL.ITEM.NAME, EGL.ITEM.IMAGE,
EGL.ITEM.PRICE, EGL.ITEM.DESCRIPTION
from EGL.ITEM
where
EGL.ITEM.PRICE >= :maxCost
order by
EGL.ITEM.ITEM_ID asc
};
// Retrieve the first row.
get next tempItem;
// As long as there are more rows,
// move the next row into the temporary variable
// and print its values.
while (sysvar.sqlData.sqlcode == 0)
SysLib.writeStdout(tempItem.Name :: " " ::
tempItem.Description :: " $" :: tempItem.Price);
get next tempItem;
end
get 문에는
열기 커서 및 결과 세트와 함께 사용할 수 있는 기타 다양한 조작이 있습니다. open expensiveItems scroll for tempItem;
close expensiveItems;커서 및 결과 세트를 닫고 나면 커서에 의존하는 get next 및 기타 명령문은 더 이상 작동하지 않습니다.
이 학습에서는 forEach 문을 사용하여 결과 세트를 단계적으로 이동하여 데이터베이스에서 특정 가격 이상의 항목을 검색할 것입니다.
Laptop PC Great little machine. Take it anywhere with you. $1111.11 Combination Safe Keep your valuables safe and secure. Put 'em in here. $222.22 Desktop PC Lots'a power, at the right price. Includes monitor. $888.55
selectItems.egl 파일의 전체 코드가 생성되었습니다. 파일에 빨간색 X 기호로 표시된 오류가 나타나면 코드가 학습 3에서 완성된 selectItems.egl 파일의 코드와 일치하는지 확인하십시오.