DECLAREvariable_identifier
type
DEFAULTdefault_value
[UPDATE FROM '('stream_query
')'];
variable_identifier
-
A unique identifier (name) for the variable.
type
-
One of the supported StreamBase data types as described in StreamBase Data Types.
default_value
-
The value assigned to the variable at initialization.
stream_query
-
A SELECT statement, which returns a value that is assigned to the variable.
Use the DECLARE statement to define dynamic variables. The scope of a dynamic variable in a StreamSQL application is the module
(that is, the ssql
file that contains the StreamSQL application). This differs from dynamic variables in EventFlow applications, where scope
is limited to an operator. The stream referenced in the stream_query
field can be an input, output, or a named stream. By contrast, in EventFlow applications, values assigned to dynamic variables
can only come from input or output streams.
A StreamSQL variable identifier can be used in other StreamSQL statements anywhere a tuple field identifier could be used. For example, as a SELECT target list entry, in the predicate of a WHERE clause, or as a function argument.
In the following example, the dynamic variable intVar
changes value each time a tuple is submitted to the input stream dynIn
. In the SELECT clause that populates the output stream, the dynamic variable is used as an entry in the target list as well
as in the WHERE clause predicate.
CREATE INPUT STREAM dynIn (value int); DECLARE intVar int DEFAULT 15 UPDATE FROM (SELECT value from dynIn); CREATE INPUT STREAM student (name string, address string, age int); CREATE OUTPUT STREAM selected_students AS SELECT *, intVar AS minimum_age FROM student WHERE age>=intVar;
You can add sequence numbers to an incoming stream in StreamSQL, much like EventFlow's Sequence operator. In StreamSQL, this
feature is implemented using dynamic variables. To support this feature, you do not need to specify the initial setter stream
for a dynamic variable, and you can specify one or more setter streams in later statements. The following example shows the
dynamic variable addcountfield
used to add the incremented field counter
to the incoming stream:
CREATE INPUT STREAM Greeting ( hello string ); CREATE OUTPUT STREAM CountedGreetings ; DECLARE addcountfield long DEFAULT 0L; CREATE STREAM seqIdSetterStream ( counter long ); UPDATE addcountfield FROM (SELECT * FROM seqIdSetterStream); SELECT *, addcountfield AS counter FROM Greeting INTO CountedGreetings; SELECT addcountfield + 1 AS counter FROM Greeting INTO seqIdSetterStream;