Standard SQL has the following uses of SET as a top-level statement:

SET SCHEMA …
SET ROLE …
SET TIME ZONE ...
SET CATALOG …
SET SESSION COLLATION ...
SET SESSION CHARACTERISTICS …
SET SESSION AUTHORIZATION …
SET NAMES …
SET PATH …

I don’t think it’s wise to allow SET <variable> = <value>. It would clash with 
these official SET statements.

Instead I think you should have

ALTER [ SYSTEM | SESSION ] SET <variable> = <value>.

A few databases have this kind of syntax. Make the option name is syntactically 
an identifier, and the option value a literal.

As an identifier, if your option name contains spaces, you must enclose it in 
double-quotes. 

As a literal, valid option values include TRUE (a boolean), NULL, ‘foo bar’ (a 
character literal), 10.5 (a decimal), INTERVAL ’10:30’ HOURS (an interval 
literal).

At a stretch, allow ON, OFF (synonyms for TRUE and FALSE) and suffixes k, m, g 
(e.g. 10k means 10480).

Julian

Reply via email to