Record Employee type sqlRecord
{
tableNames = [["employee"]],
keyItems = ["empnum"],
defaultSelectCondition =
#sqlCondition{ // sin espacio
// entre #sqlCondition
// y la llave
aTableColumn = 4 -- iniciar cada componente SQL
-- con un guión doble
}
}
empnum decimal(6,0) {isReadonly=yes};
empname char(40);
end
emp Employee;
Para obtener más detalles acerca de los registros y las sentencias implícitas SQL, consulte el apartado Soporte 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;
El cursor se cierra automáticamente cuando se lee el último registro del conjunto de resultados.
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); // salir del programa
end
try
get next from selectEmp;
onException
if (sqlcode != 100)
myErrorHandler(8); // salir del programa
end
end
while (sqlcode != 100)
empname = empname + " " + "III";
try
execute
#sql{
update employee
set empname = :empname
where current of selectEmp
};
onException
myErrorHandler(10); // salir del programa
end
try
get next from selectEmp;
onException
if (sqlcode != 100)
myErrorHandler(8); // salir del programa
end
end
end // fin de while; el cursor se cierra automáticamente
// cuando se ha leído la última fila del conjunto de resultados
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); // salir del programa
end
try
forEach (from selectEmp)
empname = empname + " " + "III";
try
execute
#sql{
update employee
set empname = :empname
where current of selectEmp
};
onException
myErrorHandler(10); // salir del programa
end
end // fin de forEach; el cursor se cierra automáticamente
// cuando se ha leído la última fila del conjunto de resultados
onException
// el bloque de excepción relacionado con forEach no se ejecuta si la condición
// es "sqlcode = 100", así que evite la prueba "if (sqlcode != 100)"
myErrorHandler(8); // salir del programa
end
sysLib.commit();
Record Employee type sqlRecord
{
tableNames = [["employee"]],
keyItems = ["empnum"],
defaultSelectCondition =
#sqlCondition{
aTableColumn = 4 -- iniciar cada componente SQL
-- con un guión doble
}
}
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); // salir del programa
end
try
get next emp;
onException
if (emp not noRecordFound)
myErrorHandler(8); // salir del programa
end
end
while (emp not noRecordFound)
myRecord.empname = myRecord.empname + " " + "III";
try
replace emp;
onException
myErrorHandler(10); // salir del programa
end
try
get next emp;
onException
if (emp not noRecordFound)
myErrorHandler(8); // salir del programa
end
end
end // fin de while; el cursor se cierra automáticamente
// cuando se ha leído la última fila del conjunto de resultados
sysLib.commit();
VGVar.handleHardIOErrors = 1;
try
open selectEmp forUpdate for emp;
onException
myErrorHandler(6); // salir del programa
end
try
forEach (from selectEmp)
myRecord.empname = myRecord.empname + " " + "III";
try
replace emp;
onException
myErrorHandler(10); // salir del programa
end
end // fin de forEach; el cursor se cierra automáticamente
// cuando se ha leído la última fila del conjunto de resultados
onException
// el bloque de excepción relacionado con forEach no se ejecuta si la condición
// es noRecordFound, así que evite la prueba "if (not noRecordFound)"
myErrorHandler(8); // salir del programa
end
sysLib.commit();
Record Employee type sqlRecord
{
tableNameVariables = [["empTable"]],
// la utilización de una variable de nombre de tabla
// significa que la tabla se especifica
// durante la ejecución
keyItems = ["empnum"]
}
empnum decimal(6,0) { isReadonly = yes };
empname char(40);
// especificar propiedades de una columna calculada
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";
// la variable de nombre de tabla no va precedida de un signo de dos puntos
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 // La cláusula into es opcional. (No
// no estar en la sentencia SELECT).
with #sql{
select empname
from empTable
where empum = :empnum + 1
}
onException
myErrorHandler(8);
end
try
get emp singleRow // La cláusula into se deriva
// del registro SQL y se basa en
// las columnas de la cláusula select
with #sql{
select empname
from empTable
where empnum = :empnum + 1
}
onException
myErrorHandler(8);
end
try
// La cláusula into se deriva
// del registro SQL y se basa en
// las columnas de la cláusula select
open selectEmp forUpdate
with #sql{
select empnum, empname
from empTable
where empnum >= :empnum
order by NEWNUM -- utiliza el valor calculado
for update of empname
} for emp;
onException
myErrorHandler(8); // salir del programa
end
try
get next emp;
onException
myErrorHandler(9); // salir del programa
end
while (emp not noRecordFound)
try
replace emp
with #sql{
update :empTable
set empname = :empname || ' ' || 'III'
} from selectEmp;
onException
myErrorHandler(10); // salir del programa
end
try
get next emp;
onException
myErrorHandler(9); // salir del programa
end
end // fin de while
// no es necesario indicar "close emp;", ya que emp
// se cierra automáticamente cuando se ha leído
// el último registro del conjunto de resultados o
// (en caso de una excepción) cuando el programa finaliza
sysLib.commit();
try
// La cláusula into se deriva
// del registro SQL y se basa en
// las columnas de la cláusula select
open selectEmp forUpdate
with #sql{
select empnum, empname
from empTable
where empnum >= :empnum
order by NEWNUM -- utiliza el valor calculado
for update of empname
} for emp;
onException
myErrorHandler(8); // salir del programa
end
try
forEach (from selectEmp)
try
replace emp
with #sql{
update :empTable
set empname = :empname || ' ' || 'III'
} from selectEmp;
onException
myErrorHandler(9); // salir del programa
end
end // fin de sentencia forEach, y
// no es necesario indicar "close emp;", ya que emp
// se cierra automáticamente cuando se ha leído
// el último registro del conjunto de resultados o
// (en caso de una excepción) cuando el programa finaliza
onException
// el bloque de excepción relacionado con forEach no se ejecuta si la condición
// es noRecordFound, así que evite la prueba "if (not noRecordFound)"
myErrorHandler(9); // salir del programa
end
sysLib.commit();
Record Employee type sqlRecord
{
tableNames = [["employee"]],
keyItems = ["empnum"],
defaultSelectCondition =
#sqlCondition{
aTableColumn = 4 -- iniciar cada componente SQL
-- con un guión doble
}
}
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;
// puede utilizar el registro SQL
// para comprobar el resultado de la operación
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); // salir del programa
end
try
open selectEmp with selectEmployee
using empnum02
into emp.empnum, emp.empname;
onException
myErrorHandler(9); // salir del programa
end
try
get next from selectEmp;
onException
myErrorHandler(10); // salir del programa
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); // salir del programa
end
try
get next from selectEmp;
onException
myErrorHandler(12); // salir del programa
end
end // fin de while; el cierre es automático cuando se ha leído la última fila
sysLib.commit();
myString = "select empnum, empname from employee " +
"where empnum >= ? for update of empname";
try
prepare selectEmployee from myString for emp;
onException
myErrorHandler(8); // salir del programa
end
try
open selectEmp with selectEmployee
using empnum02
into emp.empnum, emp.empname;
onException
myErrorHandler(9); // salir del programa
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); // salir del programa
end
end // end // fin de forEach; el cierre es automático cuando se ha leído la última fila
onException
// el bloque de excepción relacionado con forEach no se ejecuta si la condición
// es noRecordFound, así que evite la prueba "if (not noRecordFound)"
myErrorHandler(12); // salir del programa
end
sysLib.commit();