FireBird blokkokban kizárólag lineáris végrehajtásra van lehetőségünk. A nyelv nem biztosít lehetőséget ugrásokra (GOTO). Maga az utasítássorozat -absztrakt szinten- a következőképpen néz ki:
Az angol kifejezések önmagukért beszélnek. A FireBird fordító a blokkot tekinti egységnek. Egy blokk sohasem lehet teljesen üres, valamilyen utasításnak mindenképpen szerepelni kell benne. Ez a megkötés könnyen kijátszható a NULL utasítással, ami bár utasítás, de nem csinál semmit.
Egy FireBird blokk több másik FireBird blokkot is magában foglalhat, s a blokkok többszörös mélységben is egymásba ágyazhatók. A beágyazás gyakorlatilag tetszőleges mélységig folytatható. A hagyományos alprogramokhoz, eljárásokhoz szokott programozóknak feltűnhet, hogy a blokkok deklarálásánál hiányzik egy blokk azonosító. A FireBird rendszerben valóban nincs felhasználó által adott egyedi neve a blokkoknak. Ebből következően a blokkok önmagukban nem hívhatók meg más blokkokból. A FireBird blokkok igazából ritkán használatosak önmagukban, mindig valamilyen környezetben, más típusú objektumok (pl. tárolt eljárások, triggerek) részeként jelennek meg, melyeknek már van egyedi azonosító nevük, így a befoglaló objektumokon keresztül tudunk a tárolt blokkokra hivatkozni. A beágyazott blokk a külső blokk részeként kezelendő, így például a külső blokkban deklarált változók a beágyazott blokkban is láthatók lesznek. Függetlenségük megnyilvánulásának egyik példája, hogy bármelyik blokkban szerepelhet kivételkezelő rész, és ezek csakis arra a blokkra vannak hatással.
Példa:
Feltételes végrehajtást a következő szintaktikával tudunk elérni:
Itt "condition" alatt természetesen a logikai kifejezést értjük, a "compound_statement" feljebb definiált. Amennyiben a feltétel hamis, úgy az esetlegesen megírt "ELSE" ágra ugrik a futás, ellenkező esetben egyszerűen csak nem hajtódik végre a "THEN" utáni utasítás(sorozat). Amennyiben egymásba ágyazott elágazásokra van szükségünk, úgy ezt a "compound_statement"-ként megadott újabb elágazás utasítással tudjuk elérni, külön utasítást erre nem ajánl fel a nyelv.
A feltétel részben a hagyományos operátorok, relációk mellett alkalmazhatók az SQL-ben megismert speciális operátorok is, mint az
Példa:
Ciklust két szemléletmód szerint hozhatunk létre Fireird-ben: adatbázis alapú ciklus (FOR SELECT ...) és logikai alapú ciklus (WHILE ... DO). Az első eset a -más adatbáziskezelőkben már megszokott- kurzorokhoz hasonlít. A második már elhatárolódik az adatbázistól, klasszikus elöltesztelős ciklusként foghatjuk fel. A FireBird nem biztosít nyelvi eszközt hátultesztelős ciklus írására, ezt kénytelenek vagyunk kézzel megoldani. (Például a ciklus magját megírjuk egy külön eljárásban, és az elöltesztelős ciklus indítása előtt egyszer lefuttatjuk az eljárást, valamint magába a ciklusmagba is csak az eljárásunkat hívjuk meg.) Létrehozhatunk végtenel ciklust is -értelemszerűen csak logikai alapú ciklusnál lehetséges-, ebből az EXIT kulcsszóval tudunk kilépni. Figyeljünk azonban arra, hogy az EXIT nem a blokk utolsó END utasítására lép, hanem az egész eljárást lezáró END utasításra!
Példa: