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();