FirebirdSQL logo

Rules for Regular Identifiers

  • Length cannot exceed 63 characters

  • The name must start with an unaccented, 7-bit ASCII alphabetic character.It may be followed by other 7-bit ASCII letters, digits, underscores or dollar signs.No other characters, including spaces, are valid.The name is case-insensitive, meaning it can be declared and used in either upper or lower case.Thus, from the system’s point of view, the following names are the same:

    fullname
    FULLNAME
    FuLlNaMe
    FullName
  • Regular identifiers are stored in uppercase

Regular name syntax
<name> ::=
  <letter> | <name><letter> | <name><digit> | <name>_ | <name>$

<letter> ::= <upper letter> | <lower letter>

<upper letter> ::= A | B | C | D | E | F | G | H | I | J | K | L | M |
                   N | O | P | Q | R | S | T | U | V | W | X | Y | Z

<lower letter> ::= a | b | c | d | e | f | g | h | i | j | k | l | m |
                   n | o | p | q | r | s | t | u | v | w | x | y | z

<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Rules for Delimited Identifiers

  • Length cannot exceed 63 characters in character set UTF8 (252 bytes).Identifiers are stored in character set UTF8, which means characters outside the ASCII range are stored using 2 to 4 bytes.

  • The entire string must be enclosed in double-quotes, e.g. "anIdentifier"

  • A double-quote in an identifier can be escaped by doubling it, e.g. "with""doublequote";we recommend avoiding double-quotes in delimited identifiers.

  • It may contain any character from the UTF8 character set, including accented characters, spaces and special characters

  • An identifier can be a reserved word

  • Delimited identifiers are stored as-is and are case-sensitive in all contexts

  • Trailing spaces in delimited identifiers are removed, as with any string constant

  • Delimited identifiers are available in Dialect 3 only.For more details on dialects, see [fblangref50-structure-dialects]

Delimited identifier syntax
<delimited identifier> ::= "<permitted character>[<permitted character> ...]"
Note

A delimited identifier such as "FULLNAME" is the same as the regular identifiers FULLNAME, fullname, FullName, and so on.The reason is that Firebird stores regular identifiers in upper case, regardless of how they were defined or declared.Delimited identifiers are always stored according to the exact case of their definition or declaration.Thus, "FullName" (quoted, or delimited) is different from FullName (unquoted, or regular) which is stored as FULLNAME in the metadata.

docnext count = 3

Literals

Literals are used to directly represent values in a statement.Examples of standard types of literals are:

integer        - 0, -34, 45, 0X080000000;
fixed-point    - 0.0, -3.14
floating-point - 3.23e-23;
string         - 'text', 'don''t!', Q'{don't!}';
binary string  - x'48656C6C6F20776F726C64'
date           - DATE '2018-01-19';
time           - TIME '15:12:56';
timestamp      - TIMESTAMP '2018-01-19 13:32:02';
boolean        - true, false, unknown
null state     - null

Details about literals for each data type are discussed in section Literals (Constants) of chapter Common Language Elements.

Operators and Special Characters

A set of special characters is reserved for use as operators or separators.

<special char> ::=
  any of <space> or "%&'()*+,-./:;<=>?|^{}

Some of these characters, alone or in combination, may be used as operators (arithmetical, string, logical), as SQL command separators, to quote identifiers, or to mark the limits of string literals or comments.

Operator Syntax
<operator> ::=
    <string concatenation operator>
  | <arithmetic operator>
  | <comparison operator>
  | <logical operator>

<string concatentation operator> ::= '||'

<arithmetic operator> ::= * | / | + | -

<comparison operator> ::=
    =  | <> | != | ~= | ^= | > | < | >= | <=
  | !> | ~> | ^> | !< | ~< | ^<

<logical operator> ::= NOT | AND | OR

For more details on operators, see Expressions.

Comments

Comments may be present in SQL scripts, SQL statements and PSQL modules.A comment can be any text, usually used to document how particular parts of the code work.The parser ignores the text of comments.

Firebird supports two types of comments: block (or bracketed) and in-line (or simple).

Syntax
<comment> ::= <block comment> | <single-line comment>

<block comment> ::=
  /* <character>[<character> ...] */

<single-line comment> ::=
  -- <character>[<character> ...]<end line>

Block comments start with the /* character pair and end with the */ character pair.Text in block comments may be of any length and can occupy multiple lines.

In-line comments start with a pair of hyphen characters, -- and continue until the first linebreak (end of line).

Example
CREATE PROCEDURE P(APARAM INT)
  RETURNS (B INT)
AS
BEGIN
  /* This text will be ignored during the execution of the statement
     since it is a comment
  */
  B = A + 1; -- In-line comment
  SUSPEND;
END