Resolvi el problema del IF; declare una variable :exists como output y antes del if hice:
Código SQL
[-]select count(*) from TABLANUEVA where CODIGO = :codigo INTO :exists;
(entonces si hay algun registro de codigo con el valor asignado a :codigo, el count me va a devolver un valor mas grande que cero)
y entonces el if lo empiezo asi: IF (:exists > 0) then uptade blabalbla else insert into.
Y funcionó. Y lo de que no comiteaba a la base tenias razon, era el IBTransactrion, lo tenia en saNone, lo cambie y despues del procedure commitea perfecto.
Asi que los dos problemas restantes estan solucionados, creo que ahora puedo ponerme a desarrollar! Te agradezco Axel por tu ayuda que fue invaluable y a los demas tambien. Aunque presiento que vas a ver muchas mas preguntas mias por el foro dando vueltas, soy asi de pesado para todo! jaja.