Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 参考 » 使用 SQL » SQL 语句 » SQL 语句 (P-Z)

 

SET 语句

此语句用于向 SQL 变量赋值。

语法
SET identifier = expression
注释

SET 语句为变量赋新值。必须是以前用 CREATE VARIABLE 语句或 DECLARE 语句所创建的变量,或者必须是过程的 OUTPUT 参数。变量名称可以使用以下 Transact-SQL 约定:在名称前使用 @ 符号。例如:

SET @localvar = 42

在 SQL 语句中,只要是允许使用列名的位置,就可以使用变量。如果列名和变量名相同,则使用变量值。

变量是当前连接的本地对象,当您与数据库断开连接或使用 DROP VARIABLE 语句时消失。它们不受 COMMIT 或 ROLLBACK 语句的影响。

从嵌入式 SQL 程序中为 INSERT 或 UPDATE 语句创建大文本或二进制对象时需要使用变量,因为嵌入式 SQL 主机变量仅限于 32,767 个字节。

权限

无。

副作用

无。

另请参见
标准和兼容性
  • SQL/2003   持久存储模块特性。

示例

此简单示例显示了名为 'birthday' 的变量的创建,并使用 SET 来将日期设置为 CURRENT DATE。

CREATE VARIABLE @birthday DATE;
    SET @birthday = CURRENT DATE;

下面这段代码向数据库中插入一个大文本值。

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;

下面这段代码向数据库中插入一个大二进制值。

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;