Record Employee type sqlRecord
{
tableNames = [["employee"]],
keyItems = ["empnum"],
defaultSelectCondition =
#sqlCondition{ // #sqlCondition と
// 中括弧の間に
// スペースを入れない
aTableColumn = 4 -- 各 SQL コメントは
-- 二重ハイフンで開始する
}
}
empnum decimal(6,0) {isReadonly=yes};
empname char(40);
end
emp Employee;
SQL レコードおよび暗黙的な文の詳細については、『SQL サポート』を参照してください。
empnum decimal(6,0); empname char(40);
empnum = 1; empname = "John";
try
execute
#sql{
insert into employee (empnum, empname)
values (:empnum, :empname)
};
onException
myErrorHandler(8);
end
empnum = 1;
open selectEmp
with #sql{
select empnum, empname
from employee
where empnum >= :empnum
for update of empname
}
into empnum, empname;
get next from selectEmp;
get next from selectEmp
into empnum, empname;
結果セットから最後のレコードが読み取られると、カーソルが自動的にクローズされます。
VGVar.handleHardIOErrors = 1;
try
open selectEmp
with #sql{
select empnum, empname
from employee
where empnum >= :empnum
for update of empname
}
into empnum, empname;
onException
myErrorHandler(6); // プログラムを終了する
end
try
get next from selectEmp;
onException
if (sqlcode != 100)
myErrorHandler(8); // プログラムを終了する
end
end
while (sqlcode != 100)
empname = empname + " " + "III";
try
execute
#sql{
update employee
set empname = :empname
where current of selectEmp
};
onException
myErrorHandler(10); // プログラムを終了する
end
try
get next from selectEmp;
onException
if (sqlcode != 100)
myErrorHandler(8); // プログラムを終了する
end
end
end // end while; 結果セットの最後の行が読み取られると
// カーソルは自動的にクローズされる
sysLib.commit();
VGVar.handleHardIOErrors = 1;
try
open selectEmp
with #sql{
select empnum, empname
from employee
where empnum >= :empnum
for update of empname
}
into empnum, empname;
onException
myErrorHandler(6); // プログラムを終了する
end
try
forEach (from selectEmp)
empname = empname + " " + "III";
try
execute
#sql{
update employee
set empname = :empname
where current of selectEmp
};
onException
myErrorHandler(10); // プログラムを終了する
end
end // end forEach 結果セットの最後の行が読み取られると
// カーソルは自動的にクローズされる
onException
// 条件が "sqlcode = 100" の場合、forEach に関連した例外ブロックは実行されないので
// "if (sqlcode != 100)" のテストは避ける。
myErrorHandler(8); // プログラムを終了する
end
sysLib.commit();
Record Employee type sqlRecord
{
tableNames = [["employee"]],
keyItems = ["empnum"],
defaultSelectCondition =
#sqlCondition{
aTableColumn = 4 -- 各 SQL コメントは
-- 二重ハイフンで開始する
}
}
empnum decimal(6,0) {isReadonly=yes};
empname char(40);
end
emp Employee;
emp.empnum = 1; emp.empname = "John";
try
add emp;
onException
myErrorHandler(8);
end
emp.empnum = 1;
try
get emp;
onException
myErrorHandler(8);
end
try
get emp singleRow;
onException
myErrorHandler(8);
end
VGVar.handleHardIOErrors = 1;
try
open selectEmp forUpdate for emp;
onException
myErrorHandler(6); // プログラムを終了する
end
try
get next emp;
onException
if (emp not noRecordFound)
myErrorHandler(8); // プログラムを終了する
end
end
while (emp not noRecordFound)
myRecord.empname = myRecord.empname + " " + "III";
try
replace emp;
onException
myErrorHandler(10); // プログラムを終了する
end
try
get next emp;
onException
if (emp not noRecordFound)
myErrorHandler(8); // プログラムを終了する
end
end
end // end while; 結果セットの最後の行が読み取られると
// カーソルは自動的にクローズされる
sysLib.commit();
VGVar.handleHardIOErrors = 1;
try
open selectEmp forUpdate for emp;
onException
myErrorHandler(6); // プログラムを終了する
end
try
forEach (from selectEmp)
myRecord.empname = myRecord.empname + " " + "III";
try
replace emp;
onException
myErrorHandler(10); // プログラムを終了する
end
end // end forEach 結果セットの最後の行が読み取られると
// カーソルは自動的にクローズされる
onException
// 条件が "sqlcode = 100" の場合、forEach に関連した例外ブロックは実行されないので
// "if (not noRecordFound)" のテストは避ける
myErrorHandler(8); // プログラムを終了する
end
sysLib.commit();
Record Employee type sqlRecord
{
tableNameVariables = [["empTable"]],
// テーブル名変数を使用すると
// テーブルが実行時に指定されることを
// 意味する
keyItems = ["empnum"]
}
empnum decimal(6,0) { isReadonly = yes };
empname char(40);
// 計算された列のプロパティーを指定する
aValue decimal(6,0)
{ isReadonly = yes,
column = "(empnum + 1) as NEWNUM" };
end
emp Employee; empTable char(40);
emp.empnum = 1; emp.empname = "John"; empTable = "Employee";
// テーブル名変数の前にコロンは付かない
try
add emp
with #sql{
insert into empTable (empnum, empname)
values (:empnum, :empname || ' ' || 'Smith')
}
onException
myErrorHandler(8);
end
emp.empnum = 1;
try
get emp into empname // into clause 文節はオプション。(SELECT
// 文には指定できない。)
with #sql{
select empname
from empTable
where empum = :empnum + 1
}
onException
myErrorHandler(8);
end
try
get emp singleRow // into 文節は
// SQL レコードから派生し、
// select 文節内の列に基づく
with #sql{
select empname
from empTable
where empnum = :empnum + 1
}
onException
myErrorHandler(8);
end
try
// into 文節は
// SQL レコードから派生し、
// select 文節内の列に基づく
open selectEmp forUpdate
with #sql{
select empnum, empname
from empTable
where empnum >= :empnum
order by NEWNUM -- uses the calculated value
for update of empname
} for emp;
onException
myErrorHandler(8); // プログラムを終了する
end
try
get next emp;
onException
myErrorHandler(9); // プログラムを終了する
end
while (emp not noRecordFound)
try
replace emp
with #sql{
update :empTable
set empname = :empname || ' ' || 'III'
} from selectEmp;
onException
myErrorHandler(10); // プログラムを終了する
end
try
get next emp;
onException
myErrorHandler(9); // プログラムを終了する
end
end // end while
// "close emp" は不要。emp は
// 結果セットから最後のレコードが読み取られたとき、
// または (例外の場合は) プログラム終了時に
// 自動的にクローズされるため。
sysLib.commit();
try
// into 文節は
// SQL レコードから派生し、
// select 文節内の列に基づく
open selectEmp forUpdate
with #sql{
select empnum, empname
from empTable
where empnum >= :empnum
order by NEWNUM -- uses the calculated value
for update of empname
} for emp;
onException
myErrorHandler(8); // プログラムを終了する
end
try
forEach (from selectEmp)
try
replace emp
with #sql{
update :empTable
set empname = :empname || ' ' || 'III'
} from selectEmp;
onException
myErrorHandler(9); // プログラムを終了する
end
end // forEach 文を終了する。
// "close emp" は不要。emp は
// 結果セットから最後のレコードが読み取られたとき、
// または (例外の場合は) プログラム終了時に
// 自動的にクローズされるため。
onException
// 条件が "sqlcode = 100" の場合、forEach に関連した例外ブロックは実行されないので
// "if (not noRecordFound)" のテストは避ける
myErrorHandler(9); // プログラムを終了する
end
sysLib.commit();
Record Employee type sqlRecord
{
tableNames = [["employee"]],
keyItems = ["empnum"],
defaultSelectCondition =
#sqlCondition{
aTableColumn = 4 -- 各 SQL コメントは
-- 二重ハイフンで開始する
}
}
empnum decimal(6,0) {isReadonly=yes};
empname char(40);
end
emp Employee; empnum02 decimal(6,0); empname02 char(40); myString char(120);
emp.empnum = 1; emp.empname = "John"; empnum02 = 2; empname02 = "Jane";
prepare myPrep
from "insert into employee (empnum, empname) " +
"values (?, ?)" for emp;
// SQL レコードを使用して
// 操作の結果をテストできる
if (emp is error)
myErrorHandler(8);
end
myString = "insert into employee (empnum, empname) " +
"values (?, ?)";
try
prepare addEmployee from myString;
onException
myErrorHandler(8);
end
execute addEmployee using emp.empnum, emp.empname;
execute addEmployee using empnum02, empname02;
empnum02 = 2;
myString = "select empnum, empname from employee " +
"where empnum >= ? for update of empname";
try
prepare selectEmployee from myString for emp;
onException
myErrorHandler(8); // プログラムを終了する
end
try
open selectEmp with selectEmployee
using empnum02
into emp.empnum, emp.empname;
onException
myErrorHandler(9); // プログラムを終了する
end
try
get next from selectEmp;
onException
myErrorHandler(10); // プログラムを終了する
end
while (emp not noRecordFound)
emp.empname = emp.empname + " " + "III";
try
replace emp
with #sql{
update employee
set empname = :empname
}
from selectEmp;
onException
myErrorHandler(11); // プログラムを終了する
end
try
get next from selectEmp;
onException
myErrorHandler(12); // プログラムを終了
end
end // end while; 最後の行が読み取られると close が自動的に実行される
sysLib.commit();
myString = "select empnum, empname from employee " +
"where empnum >= ? for update of empname";
try
prepare selectEmployee from myString for emp;
onException
myErrorHandler(8); // プログラムを終了する
end
try
open selectEmp with selectEmployee
using empnum02
into emp.empnum, emp.empname;
onException
myErrorHandler(9); // プログラムを終了する
end
try
forEach (from selectEmp)
emp.empname = emp.empname + " " + "III";
try
replace emp
with #sql{
update employee
set empname = :empname
}
from selectEmp;
onException
myErrorHandler(11); // プログラムを終了する
end
end // forEach を終了する。最後の行が読み取られると close が自動的に実行される
onException
// 条件が "sqlcode = 100" の場合、forEach に関連した例外ブロックは実行されないので
// "if (not noRecordFound)" のテストは避ける
myErrorHandler(12); // プログラムを終了
end
sysLib.commit();