Procedury dovolují vkládat do hlavního programového bloku další bloky, které neumožňují vracet hodnoty. Každá deklarace procedury má záhlaví, za nímž následuje blok. Procedura se volá příkazem Call a jménem procedury.
Příklad:
V rámci procedury lze používat lokální proměnné dimenzované podobně jako v záhlaví makra. Tělo procedury se ukončuje klíčovým slovem EndProc. Uvnitř těla procedury ji lze předčasně ukončit příkazem Return .
V bloku procedury lze psát další procedury a funkce.
Záhlaví procedury ji dává jméno a určuje případné formální parametry.
Příklad:
Při volání procedury je jí možno předávat parametry.
Příklad:
Formální parametr předávaný hodnotou má postavení lokální proměnné příslušné procedury, ovšem s tím rozdílem, že má od začátku bloku definovanou hodnotu. Tuto hodnotu získal při volání procedury zkopírováním hodnoty skutečného parametru. Změna hodnoty formálního parametru přeadávaného hodnotou se nijak neprojeví na hodnotě parametru skutečného. Typ skutečného parametru musí být typově kompatibilní vzhledem k přiřazení s typem formálního parametru. Parametr předávaný hodnotou nesmí být pole.
Tyto parametry se používají zejména v případech, kdy je nazbytné předat z procedury určitou hodnotu do místa volání skutečnému parametru. Odpovídající skutečný parametr musí být vždy proměnná. Formální parametr v tomto případě představuje v celém bloku procedury skutečnou proměnnou a jakékoli změny jeho hodnoty se okamžitě promítají do hodnoty této proměnné, předané jako skutečný parametr. Uvnitř procedury představuje tedy jakýkoli odkaz na formální dim parametr přístup k proměnné. Parametr předávaný odkazem může být pole.
Příklad:
Parametr předávaný odkazem nesmí být položkou z věty interní databáze.
Příklad:
Parametr předávaný odkazem nemůže být jeden prvek pole, protože procedura bude tento formální parametr chápat jako první prvek pole.
Příklad:
Příklad:
Příklad:
Procedury NEJSOU reentrantní. To znamená, že volání procedury ze sebe sama použije stejné parametry a lokální proměnné.
Narazí-li makro při svém chodu na deklaraci procedury, skočí až za její EndProc.
Podívejte se na: Příkazy