ASA SQL Reference
SQL Statements
Use this statement to assign a value to a SQL variable.
SET identifier = expression
The SET statement assigns a new value to a variable. The variable must have been previously created using a CREATE VARIABLE statement or DECLARE statement, or it must be an OUPUT parameter for a procedure. The variable name can optionally use the Transact-SQL convention of an @ sign preceding the name. For example,
SET @localvar = 42
A variable can be used in a SQL statement anywhere a column name is allowed. If a column name exists with the same name as the variable, the variable value is used.
Variables are local to the current connection, and disappear when you disconnect from the database or use the DROP VARIABLE statement. They are not affected by COMMIT or ROLLBACK statements.
Variables are necessary for creating large text or binary objects for INSERT or UPDATE statements from embedded SQL programs because embedded SQL host variables are limited to 32,767 bytes.
None.
None.
SQL/92 Persistent stored module feature.
SQL/99 Persistent Stored Module feature.
Sybase Not supported. In Adaptive Server Enterprise, variables are assigned using the SELECT statement with no table, a Transact-SQL syntax that is also supported by Adaptive Server Anywhere. The SET statement is used to set database options in Adaptive Server Enterprise.
The following code fragment inserts a large text value into the database.
EXEC SQL BEGIN DECLARE SECTION; DECL_VARCHAR( 500 ) buffer; /* Note: maximum DECL_VARCHAR size is 32765 */ EXEC SQL END DECLARE SECTION; EXEC SQL CREATE VARIABLE hold_blob LONG VARCHAR; EXEC SQL SET hold_blob = ''; for(;;) { /* read some data into buffer ... */ size = fread( buffer, 1, 5000, fp ); if( size <= 0 ) break; /* Does not work if data contains null chars */ EXEC SQL SET hold_blob = hold_blob || :buffer; } EXEC SQL INSERT INTO some_table VALUES( 1, hold_blob ); EXEC SQL DROP VARIABLE hold_blob;
The following code fragment inserts a large binary value into the database.
EXEC SQL BEGIN DECLARE SECTION; DECL_BINARY( 5000 ) buffer; EXEC SQL END DECLARE SECTION; EXEC SQL CREATE VARIABLE hold_blob LONG BINARY; EXEC SQL SET hold_blob = ''; for(;;) { /* read some data into buffer ... */ size = fread( &(buffer.array), 1, 5000, fp ); if( size <= 0 ) break; buffer.len = size; /* add data to blob using concatenation */ EXEC SQL SET hold_blob = hold_blob || :buffer; } EXEC SQL INSERT INTO some_table VALUES ( 1, hold_blob ); EXEC SQL DROP VARIABLE hold_blob;