Структура модуля 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 (код ответа процедуры; возможные значения кодов ответа стандартизованы, но некоторые из них определяются в реализации).