EGL get 语句检索单个文件记录或数据库行,并提供了一个选项以允许稍后在代码中替换或删除所存储的数据。另外,此语句允许检索一组数据库行并将每个后续行放到动态数组中的下一个 SQL 记录中。
get 语句有时被标识为 get by key value,它与以 get 开头的其它语句是不同的。
如果资源是可恢复的(如对于 VSAM 文件或 SQL 数据库的情况),则 forUpdate 选项锁定记录,以使它在提交发生之前不能被其它程序更改。有关提交处理的详细信息,请参阅逻辑工作单元。
在与此子句类似的子句中(该子句位于 #sql{ } 块外部),不要在主变量名称之前包括分号。
如果未指定 usingKeys 子句,则隐式语句的键值部分基于 get 语句所引用的 SQL 记录部件,或者基于作为 get 语句所引用的动态数组基础的 SQL 记录部件。
对于动态数组,usingKeys 子句中的项(或者是 SQL 记录中的主变量)一定不能位于作为动态数组基础的 SQL 记录中。
如果指定显式 SQL 语句,则将忽略 usingKeys 信息。
emp.empnum = 1; // sets the key in record emp try get emp forUpdate; onException myErrorHandler(8); // exits the program end emp.empname = emp.empname + " Smith"; try replace emp; onException myErrorHandler(12); end
try get emp singleRow into empname with #sql{ select empname from Employee where empnum = :empnum }; onException myErrorHandler(8); end
try get emp forUpdate into empname with #sql{ select empname from Employee where empnum = :empnum }; onException myErrorHandler(8); // exits the program end emp.empname = emp.empname + " Smith"; try replace emp; onException myErrorHandler(12); end
有关 get 语句的详细信息取决于记录类型。有关 SQL 处理的详细信息,请参阅 SQL 记录。
当对带索引记录发出 get 语句时,记录中的键值确定从文件中检索哪个记录。
如果文件是 VSAM 文件,则 EGL get 语句(带有 forUpdate 选项)将防止记录被其它程序更改。
EGL get 语句导致生成的代码包含 SQL SELECT 语句。如果指定 singleRow 选项,则 SQL SELECT 语句是独立语句。另外,SQL SELECT 语句是游标中的子句,如 SQL 支持中所述。
当指定 SQL 记录来作为 get 语句的 I/O 对象,但未指定显式 SQL 语句时,隐式 SQL SELECT 具有下列特征:
SELECT column01, column02, ... columnNN FROM tableName WHERE keyColumn01 = :keyItem01 FOR UPDATE OF column01, column02, ... columnNN
INTO :recordItem01, :recordItem02, ... :recordItemNN
当未指定 INTO 子句时,如果将 SQL 记录与显式 SQL SELECT 语句配合使用,则 EGL 派生 SQL INTO 子句。派生的 INTO 子句中的项就是与 SQL 语句的 SELECT 子句中列示的列相关联的那些项。(项与列的关联位于 SQL 记录部件中,如 SQL 项属性中所述。)如果列未与项相关联,则 EGL INTO 子句是必需的。
keyColumn01 >= :keyItem01 & keyColumn02 >= :keyItem02 & . . . keyColumnN >= :keyItemN
相关概念
逻辑工作单元
记录类型和属性
对部件的引用
resultSetID
SQL 支持
相关任务
语法图