ejecutar archivos con dbaccess y excepciones

Hola

Es posible ejecutar un comando

dbaccess -a base_de_datos script

y que el script contenga algo como

ON EXCEPTION IN (-268)
-- clave duplicada
end exception with resume;

INSERT INTO sga_coleg_sec VALUES ( 200001, 'ESCUELA EVANGELICA WILLIAM C.MORRIS', 'OLAVARRIA', '677', NULL, NULL, NULL, '', 1, '1162', '4301-1606/2922', 'RSGWMORRIS@INFOVIA.COM.AR', 'P', 'S', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'U', 1, 'S', 200001);

Gracias

Emilio

Hola Emilio

El ON Exception es algo exclusivo del lenguaje SPL de stored procedures de Informix, con lo cual en un script SQL no es posible.

Sin embargo quizas te sirva lo siguiente: si estas en linux (en windows quizas tambien, pero con mucho mas esfuerzo) es posible hacer un shell script, que ejecute SQL (via dbaccess), deje el resultado en un archivo intermedio o lo pase por pipe a otro comando, y ahi tenes toda la potencia del shell script de linux para procesar. En lugar de ON exception para detectar una clave duplicada, se podria mediante un SQL verificar si ese registro ya existe y actuar.

En el shell script pones

dbaccess tu_base < file_intermedio
codigo SQL para detectar la clave duplicada
EOF

aqui sigue el shell script y tenes acceso al file_intermedio con todo el output del codigo SQL

if alguna condicion
dbaccess tu_base < file_intermedio
codigo SQL
EOF
fi

sirve, o es un divague ?

saludos
Ignacio

Emilio, porque no insertas el colegio a traves del stored procedure que existe para ello?

EXECUTE PROCEDURE sui_colegios_sec2 (…);

Este contiene ese control de si el colegio existe, actualiza sus datos y no da error.

O este era solo un ejemplo y lo necesitas para insertar datos en otras tablas?

Hola

Gracias por las respuestas.

Ignacio: me parece que es mas facil poner un
create procedure algo()
– el archivo
end procedure;
execute procedure algo();
drop procedure algo();

y con eso puedo poner el on exception

Alejandro: Hay lineas del catalogo que todavia tienen los insert. Y estaba tratando que los catalogos en las bases queden similares.

Muchas gracias

Emilio