Структура модуля SQL в стандарте SQL/89 определяется следующими синтаксическими правилами:
<module> ::= <module name clause> <language clause> <module autorization clause> [<declare cursor>...] < procedure > ... <module name clause> ::= MODULE [<module name>] <language clause> ::= LANGUAGE { COBOL | FORTRAN | PASCAL | PLI } <module autorization clause> ::= AUTHORIZATION <module autorization identifier> <module autorization identifier> ::= <autorization identifier>
Существенно, что каждый модуль SQL ориентирован на использование в программах, написанных на конкретном языке программирования. Если в модуле присутствуют процедуры работы с курсорами, то все курсоры должны быть специфицированы в начале модуля. Заметим, что объявление курсора не погружается в какую-либо процедуру, поскольку это описательный, а не выполняемый оператор SQL.
Процедуры в модуле SQL определяются следующими синтаксическими конструкциями:
<procedure> ::= PROCEDURE <procedure name> <parameter declaration>...; <SQL statment>; <parameter declaration>::= <parameter name> <data type> | <SQLCODE parameter> <SQLCODE parameter> ::= SQLCODE <SQL statement> ::= <close statement> | <commit statement> | <delete statement positioned> | <delete statement searched> | <fetch statement> | <insert statement> | <open statement> | <rollback statement> | <select statement> | <update statement positioned> | <update statement searched>
Имена всех процедур в одном модуле должны быть различны. Любое имя параметра, содержащегося в операторе SQL процедуры, должно быть специфицировано в разделе объявления параметров. Число фактических параметров при вызове процедуры должно совпадать с числом формальных параметров, указанных при ее объявлении. Список формальных параметров каждой процедуры должен содержать ровно один параметр SQLCODE (код ответа процедуры; возможные значения кодов ответа стандартизованы, но некоторые из них определяются в реализации).