SAP Hana sql语法


1       约束
1.1        注释
1.2        标识符
1.3        单引号
1.4        双引号
1.5        SQL 保留字
2       数据类型
2.1        日期时间类型
2.1.1        DATE(日期)
2.1.2        TIME(时间)
2.1.3        SECONDDATE(日期+时间)
2.1.4        TIMESTAMP(时戳)
2.2        数字类型
2.2.1        TINYINT
2.2.2        SMALLINT
2.2.3        INTEGER
2.2.4        BIGINT
2.2.5        DECIMAL(精度,小数位数)或 DEC( p, s)
2.2.6        SMALLDECIMAL
2.2.7        REAL
2.2.8        DOUBLE
2.2.9        FLOAT( n )
2.3        字符类型
2.3.1        VARCHAR
2.3.2        NVARCHAR
2.3.3        ALPHANUM
2.3.4        SHORTTEXT
2.4        二进制类型

2.4.1        VARBINARY
2.5        大对象( LOB)类型
2.5.1        BLOB
2.5.2        CLOB
2.5.3        NCLOB
2.5.4        TEXT
2.6        SQL 数据类型和列存储数据类型之间的映射

2.7        数据类型转换
2.7.1        显式类型转换
2.7.2        隐式类型转换
2.7.3        转换规则表
2.7.4        类型转换优先级
2.8        类型常量
2.8.1        字符串常量
2.8.2        数字常量
2.8.3        十六进制数字常量
2.8.4        二进制字符串常量
2.8.5        日期、时间、时间戳常量
3       谓词
3.1        比较谓词
3.2        BETWEEN谓词
3.3        In 谓词
3.4        Exists 谓词
3.5        Like 谓词
3.6        NULL 谓词
3.7        CONTAINS 谓词
4       操作符
4.1        一元和二元操作符
4.2        操作符优先级
4.3        算术操作符
4.4        字符串操作符
4.5        比较操作符
4.6        逻辑操作符
4.7        合并操作符
5       表达式
5.1        Case 表达式
5.2        Function 表达式
5.3        Aggregate 表达式
5.4        表达式中的子查询
6       SQL 函数
6.1        数据类型转换函数
6.1.1        CAST
6.1.2        TO_ALPHANUM
6.1.3        TO_BIGINT
6.1.4        TO_BINARY
6.1.5        TO_BLOB
6.1.6        TO_CHAR
6.1.7        TO_CLOB
6.1.8        TO_DATE
6.1.9        TO_DATS
6.1.10      TO_DECIMAL
6.1.11      TO_DOUBLE
6.1.12      TO_INT
6.1.13      TO_INTEGER
6.1.14      TO_NCHAR
6.1.15      TO_NCLOB
6.1.16      TO_NVARCHAR
6.1.17      TO_REAL
6.1.18      TO_SECONDDATE
6.1.19      TO_SMALLDECIMAL
6.1.20      TO_SMALLINT
6.1.21      TO_TIME
6.1.22      TO_TIMESTAMP
6.1.23      TO_TINYINT
6.1.24      TO_VARCHAR
6.2        日期时间函数
6.2.1        ADD_DAYS
6.2.2        ADD_MONTHS
6.2.3        ADD_SECONDS
6.2.4        ADD_YEARS
6.2.5        CURRENT_DATE
6.2.6        CURRENT_TIME
6.2.7        CURRENT_TIMESTAMP
6.2.8        CURRECT_UTCDATE
6.2.9        CURRENT_UTCTIME
6.2.10      CURRENT_UTCTIMESTAMP
6.2.11      DAYNAME
6.2.12      DAYOFMONTH
6.2.13      DAYOFYEAR
6.2.14      DAYS_BETWEEN
6.2.15      EXTRACT
6.2.16      HOUR
6.2.17      ISOWEEK
6.2.18      LAST_DAY
6.2.19      LOCALTOUTC
6.2.20      MINUTE
6.2.21      MONTH
6.2.22      MONTHNAME
6.2.23      NEXT_DAY
6.2.24      NOW
6.2.25      QUARTER
6.2.26      SECOND
6.2.27      SECONDS_BETWEEN
6.2.28      UTCTOLOCAL
6.2.29      WEEK
6.2.30      WEEKDAY
6.2.31      YEAR
6.3        数字函数
6.3.1        ABS
6.3.2        ACOS
6.3.3        ASIN
6.3.4        ATAN
6.3.5        ATAN2
6.3.6        BINTOHEX
6.3.7        BITAND
6.3.8        CEIL
6.3.9        COS
6.3.10      COSH
6.3.11      COT
6.3.12      EXP
6.3.13      FLOOR
6.3.14      GREATEST
6.3.15      HEXTOBIN
6.3.16      LEAST
6.3.17      LN
6.3.18      LOG
6.3.19      MOD
6.3.20      POWER
6.3.21      ROUND
6.3.22      SIGN
6.3.23      SIN
6.3.24      SINH
6.3.25      SQRT
6.3.26      TAN
6.3.27      TANH
6.3.28      UMINUS
6.4        字符串函数
6.4.1        ASCII
6.4.2        CHAR
6.4.3        CONCAT
6.4.4        LCASE
6.4.5        LEFT
6.4.6        LENGTH
6.4.7        LOCATE
6.4.8        LOWER
6.4.9        LPAD
6.4.10      LTRIM
6.4.11      NCHAR
6.4.12      REPLACE
6.4.13      RIGHT
6.4.14      RPAD
6.4.15      RTRIM
6.4.16      SUBSTR_AFTER
6.4.17      SUBSTR_BEFORE
6.4.18      SUBSTRING
6.4.19      TRIM
6.4.20      UCASE
6.4.21      UNICODE
6.4.22      UPPER
6.5        杂项函数
6.5.1        COALESCE
6.5.2        CURRENT_CONNECTION
6.5.3        CURRENCT_SCHEMA
6.5.4        CURRENT_USER
6.5.5        GROUPING_ID
6.5.6        IFNULL
6.5.7        MAP
6.5.8        NULLIF
6.5.9        SESSION_CONTEXT
6.5.10      SESSION_USER
6.5.11      SYSUUID
7       SQL 语句
7.1        数据定义语句
7.1.1        ALTER AUDIT POLICY
7.1.2        ALTER FULLTEXT INDEX
7.1.3        ALTER INDEX
7.1.4        ALTER SEQUENCE
7.1.5        ALTER TABLE
7.1.6        CREATE AUDIT POLICY
7.1.7        CREATE FULLTEXT INDEX
7.1.8        CREATE INDEX
7.1.9        CREATE SCHEMA
7.1.10      CREATE SEQUENCE
7.1.11      CREATE SYNONYM
7.1.12      CREATE TABLE
7.1.13      CREATE TRIGGER
7.1.14      CREATE VIEW
7.1.15      DROP AUDIT POLICY
7.1.16      DROP FULLTEXT INDEX
7.1.17      DROP INDEX
7.1.18      DROP SCHEMA
7.1.19      DROP SEQUENCE
7.1.20      DROP SYNONYM
7.1.21      DROP TABLE
7.1.22      DROP TRIGGER
7.1.23      DROP VIEW
7.1.24      RENAME COLUMN
7.1.25      RENAME INDEX
7.1.26      RENAME TABLE
7.1.27      ALTER TABLE ALTER TYPE
7.1.28      TRUNCATE TABLE
7.2        数据操纵语句
7.2.1        DELETE
7.2.2        EXPLAIN PLAN
7.2.3        INSERT
7.2.4        LOAD
7.2.5        MERGE DELTA
7.2.6        REPLACE | UPSERT
7.2.7        SELECT
7.2.8        UNLOAD
7.2.9        UPDATE
7.3        系统管理语句
7.3.1        SET SYSTEM LICENSE
7.3.2        ALTER SYSTEM ALTER CONFIGURATION
7.3.3        ALTER SYSTEM ALTER SESSION SET
7.3.4        ALTER SYSTEM ALTER SESSION UNSET
7.3.5        ALTER SYSTEM CANCEL [WORK IN] SESSION
7.3.6        ALTER SYSTEM CLEAR SQL PLAN CACHE
7.3.7        ALTER SYSTEM CLEAR TRACES
7.3.8        ALTER SYSTEM DISCONNECT SESSION
7.3.9        ALTER SYSTEM LOGGING
7.3.10      ALTER SYSTEM RECLAIM DATAVOLUME
7.3.11      ALTER SYSTEM RECLAIM LOG
7.3.12      ALTER SYSTEM RECLAIM VERSION SPACE
7.3.13      ALTER SYSTEM RECONFIGURE SERVICE
7.3.14      ALTER SYSTEM REMOVE TRACES
7.3.15      ALTER SYSTEM RESET MONITORING VIEW
7.3.16      ALTER SYSTEM SAVE PERFTRACE
7.3.17      ALTER SYSTEM SAVEPOINT
7.3.18      ALTER SYSTEM START PERFTRACE
7.3.19      ALTER SYSTEM STOP PERFTRACE
7.3.20      ALTER SYSTEM STOP SERVICE
7.3.21      UNSET SYSTEM LICENSE ALL
7.4        会话管理语句
7.4.1        CONNECT
7.4.2        SET HISTORY SESSION
7.4.3        SET SCHEMA
7.4.4        SET [SESSION]
7.4.5        UNSET [SESSION]
7.5        事务管理语句
7.5.1        COMMIT
7.5.2        LOCK TABLE
7.5.3        ROLLBACK
7.5.4        SET TRANSACTION
7.6        访问控制语句
7.6.1        ALTER SAML PROVIDER
7.6.2        ALTER USER
7.6.3        CREATE ROLE
7.6.4        CREATE SAML PROVIDER
7.6.5        CREATE USER
7.6.6        DROP ROLE
7.6.7        DROP SAML PROVIDER
7.6.8        DROP USER
7.6.9        GRANT
7.6.10      REVOKE
7.7        数据导入导出语句
7.7.1        EXPORT
7.7.2        IMPORT
7.7.3        IMPORT FROM


1约束
1.1注释
你可以给你的 SQL 语句添加注释来增加可读性和可维护性。 SQL 语句中注释的分隔如下:

l  双连字符“--”。所有在双连字符之后直到行尾的内容都被 SQL 解析器认为是注释。

l  “/*”和“*/”。这种类型的注释用来注释多行内容。所有在引号符“/*”和关闭符“*/”之间 的文字都会被 SQL 解析器忽略。

1.2标识符
标识符用来表示 SQL 语句中的名字,包括表名、视图名、同义字、列名、索引名、函数名、存储过程名、用户名、角色名等等。有两种类型的标识符:未分隔标识符和分隔标识符(指用空间分开字符串)。

l  未分隔的表名和列名必须以字母开头,不能包含除数字或者下划线以外的符号。

l  分隔标识符用分隔符、双引号关闭,然后标识符可以包含任何字符包括特殊字符。例如,"AB$%CD" 是一个有效的标识符。

l  限制:

o "_SYS_"专门为数据库引擎保留,因此不允许出现在集合对象的名字开头。

o 角色名和用户名必须以未分隔符指定。

o 标识符最大长度为 127 字母。

1.3单引号
单引号是用来分隔字符串,使用两个单引号就可以代表单引号本身。

1.4双引号
用双引号分隔标识符,使用两个双引号可以代表双引号本身。

1.5SQL 保留字
保留字对于 SAP HANA 数据库的 SQL 解析器有着特殊含义,不能成为用户自定义的名字。保留字不能在 SQL 语句中使用为集合对象名。如果有必要,你可以使用双引号限定表或列名绕过这个限制。

下表列出了所有现在和未来 SAP HANA 数据库的保留字:

2                            数据类型


2.1日期时间类型
2.1.1     DATE(日期)
DATE 数据类型由年、月、日信息组成,表示一个日期值。 DATA 类型的默认格式为‘YYYY-MM-DD’。 YYYY 表示年, MM 表示月而 DD 表示日。时间值的范围从 0001-01-01 至 9999-12-31。

select to_date('365','DDD') from dummy;

select to_date('2015/365','YYYY/ddd') from dummy;

select to_date('2015-january','YYYY-month') from dummy;

select to_date('2015-February/28','yyyy-moNth/dd') from dummy;

select to_date('2015-Jan/31','yyyy-mon/dd') from dummy;

select to_date('2015/2-1','yyyy/mM-dd') from dummy;

select to_date('2015/02-01','yyyy/mM-dd') from dummy;

select to_date('2015+02=01','yyyy+mM=dd') from dummy;

select to_date('20150201','yyyymmdd') from dummy;

2.1.2     TIME(时间)
TIME 数据类型由小时、分钟、秒信息组成,表示一个时间值。 TIME 类型的默认格式为‘HH24:MI:SS’。 HH24 表示从 0 至 24 的小时数, MI 代表 0 至 59 的分钟值而 SS 表示 0 至 59的秒。

select to_time('1:1:1 PM','HH:MI:SS PM') from dummy;

select to_time('1:1:1','HH:MI:SS') from dummy;

select to_time('1:1:1','HH24:MI:SS') from dummy;

2.1.3      SECONDDATE(日期+时间)
SECONDDATE 数据类型由年、月、日、小时、分钟和秒来表示一个日期和时间值。

SECONDDATE 类型的默认格式为‘YYYY-MM-DD HH24:MI:SS’。 YYYY 代表年, MM 代表月份,DD 代表日, HH24 表示小时, MI 表示分钟, SS 表示秒。日期值的范围从 0001-01-01 00:00:01 至 9999-12-31 24:00:00。

2.1.4      TIMESTAMP(时戳)
TIMESTAMP 数据类型由日期和时间信息组成时戳。默认格式为‘YYYY-MM-DD HH24:MI:SS.FF7’。 FFn 代表含有小数的秒,其中 n 表示小数部分的数字位数。时间戳的范围从 0001-01-01 00:00:00.0000000 至 9999-12-31 23:59:59.9999999。

select to_timestamp('2015/1/2 1:1:1','YYYY/MM/DD HH:MI:SS') from dummy;

select to_timestamp('2015/1/2 1:1:1.999','YYYY/MM/DD HH:MI:SS.FF3') from dummy;

select to_timestamp('2015/1/2 1:1:1.9999999','YYYY/MM/DD HH:MI:SS.FF7') from dummy;

selectcurrent_timestampfrom dummy;--2015-6-12 16:50:26.349

select to_char(current_timestamp,'D') from dummy;--5    注:这个应该是星期几

select to_char(current_timestamp,'DD') from dummy;--12

select to_char(current_timestamp,'DDD') from dummy;--163

select to_char(current_timestamp,'Day') from dummy;--Friday

select to_char(current_timestamp,'Dy') from dummy;--Fri

select to_char(current_timestamp,'mon') from dummy;--jun

select to_char(current_timestamp,'month') from dummy;--june

select to_char(current_timestamp,'rm') from dummy;--vi

select to_char(current_timestamp,'q') from dummy;--2

select to_char(current_timestamp,'w') from dummy;--2

select to_char(current_timestamp,'ww') from dummy;--24

select to_char(current_timestamp,'FF7') from dummy;--1260000

select to_char(current_timestamp,'YY') from dummy;--15

2.2数字类型
2.2.1     TINYINT
TINYINT 数据类型存储一个 8 位(1个字节)无符号整数。 TINYINT 的最小值是 0,最大值是 255。

2.2.2     SMALLINT
SMALLINT 数据类型存储一个 16 (2个字节)位无符号整数。 SMALLINT 的最小值为-32,768 ,最大值为32, 767。

2.2.3     INTEGER
INTEGER 数据类型存储一个 32 (4个字节)位有符号整数。 INTEGER 的最小值为-2,147,483,648 ,最大值为 2,147,483,647。

2.2.4     BIGINT
BIGINT 数据类型存储一个 64 (8个字节)位有符号整数。 INTEGER 的最小值为-9,223,372,036,854,775,808,最大值为 9, 223,372,036,854,775,807。

2.2.5     DECIMAL(精度,小数位数)或 DEC( p, s)
DECIMAL (p, s) 数据类型指定了一个精度为 p 小数位数为 s 的定点小数。精度是有效位数的总数,范围从 1 至 34。

小数位数是从小数点到最小有效数字的数字个数,范围从-6,111 到 6,176,这表示位数指定了十进制小数的指数范围从 10-6111 至 106176。如果没有指定小数位数,则默认值为 0。

当数字的有效数字在小数点的右侧(后面)时,小数位数为正;有效数字在小数点左侧(前面)时,小数位数为负。

例子:

 0.0000001234 (1234 x 10-10) 精度为 4,小数位数 10。

1.0000001234(10000001234 x 10-10) 精度为 11,小数位数为 10。

1234000000 (1234x106) 精度为 4,小数位数为-6。

当未指定精度和小数位数, DECIMAL 成为浮点小数。这种情况下,精度和小数位数可以在上文描述的范围内不同,根据存储的数值, 1-34 的精度和 6111-6176 的小数位数。

2.2.6     SMALLDECIMAL
SMALLDECIMAL 是一个浮点十进制数。精度和小数位数可以在范围有所不同,根据存储的数值, 1-16 的精度以及-369-368的小数位数。 SMALLDECIMAL 只支持列式存储。

DECIMAL 和 SMALLDECIMAL 都是浮点十进制数。举例来说,一个十进制列可以存储 3.14,3.1415, 3.141592 同时保持它们的精度。

DECIMAL(p, s) 是 SQL 对于定点十进制数的标准标记。例如, 3.14, 3.1415,3.141592 存储在 decimal(5, 4)列中为 3.1400, 3.1415, 3.1416,各自保持其精度( 5)和小数位数( 4)。

2.2.7     REAL
REAL 数据类型定义一个 32 位(4个字节)单精度浮点数。

2.2.8     DOUBLE
DOUBLE 数据类型定义一个 64 位(8个字节)的双精度浮点数,最小值为-1.79769 x 10308,最大值为

1.79769x10308, DOUBLE 最小的正数为 2.2207x10-308,最大的负数为-2.2207x10-308。

2.2.9     FLOAT( n )
FLOAT 数据类型定义一个 32 位或 64 位的实数, n 指定有效数字的个数,范围可以从 1 至53。

当你使用 FLOAT( n )数据类型时,如果 n 比 25 小,其会变成 32 位的实数类型;如果 n 大于等于 25,则会成为 64 的 DOUBLE 数据类型。如果 n 没有声明,默认变成 64 位的double 数据类型。

2.3字符类型
字符类型用来存储包含字符串的值。 VARCHAR类型包含 ASCII字符串,而 NVARCHAR用来存储 Unicode字符串。

2.3.1     VARCHAR
VARCHAR (n) 数据类型定义了一个可变长度的 ASCII 字符串, n 表示最大长度,是一个 1 至5000的整数值。

2.3.2     NVARCHAR
NVARCHAR (n) 数据类型定义了一个可变长度的 Unicode 字符串, n 表示最大长度,是一个1 至 5000的整数值。

2.3.3     ALPHANUM
ALPHANUM (n) 数据类型定义了一个可变长度的包含字母数字的字符串, n 表示最大长度,是一个 1 至 127的整数值。

2.3.4     SHORTTEXT
SHORTTEXT (n) 数据类型定义了一个可变长度的字符串,支持文本搜索和字符搜索功能。

这不是一个标准的 SQL 类型。选择一列 SHORTTEXT (n) 列会生成一个 NVARCHAR (n)类型的列。

2.4二进制类型


二进制类型用来存储二进制数据的字节。

2.4.1      VARBINARY
VARBINARY 数据类型用来存储指定最大长度的二进制数据,以字节为单位, n 代表最大长度,是一个 1 至 5000的整数。

2.5大对象( LOB)类型


LOB(大对象)数据类型, CLOB, NCLOB 和 BLOB,用来存储大量的数据例如文本文件和图像。 一个 LOB 的最大大小为 2GB。

2.5.1      BLOB
BLOB 数据类型用来存储大二进制数据。

2.5.2      CLOB
CLOB 数据类型用来存储大 ASCII 字符数据。

2.5.3      NCLOB
NCLOB 数据类型用来存储大 Unicode 字符对象。

2.5.4      TEXT
TEXT 数据类型指定支持文本搜索功能,这不是一个独立的 SQL 类型。 选择一列 TEXT 列会

生成一个 NCLOB 类型的列。

 

LOB 类型用于存储和检索大量的数据。 LOB 类型支持以下操作:

lLength(n)以字节形式返回 LOB 的长度。

lLIKE 可以用来搜索 LOB 列。

LOB 类型有如下限制:

lLOB 列不能出现在 ORDER BY 或 GROUP BY 子句中。

lLOB 列不能出现在 FROM 子句作为联接谓词。

l不能作为谓词出现在 WHERE 子句中,除了 LIKE, CONTAINS, =或<>。

lLOB 列不能出现在 SELECT 子句作为一个聚合函数的参数。

lLOB 列不能出现在 SELECT DISTINCT 语句中。

lLOB 列不能用于集合操作,除了 EXCEPT, UNION ALL 是个例外。

lLOB 列不能作为主键。

lLOB 列不能使用 CREATE INDEX 语句。

lLOB 列不能使用统计信息更新语句。

2.6SQL 数据类型和列存储数据类型之间的映射


2.7数据类型转换


本节描述 SAP HANA 数据库中允许的类型转换。

2.7.1      显式类型转换
表达式结果的类型,例如一个字段索引,一个字段函数或者文字可以使用如下函数进行转换: CAST, TO_ALPHANUM, TO_BIGINT, TO_VARBINARY,TO_BLOB, TO_CLOB, TO_DATE, TO_DATS, TO_DECIMAL, TO_DOUBLE, TO_INTEGER, TO_INT,TO_NCLOB, TO_NVARCHAR, TO_REAL, TO_SECONDDATE, TO_SMALLINT, TO_TINYINT, TO_TIME,TO_TIMESTAMP, TO_VARCHAR。

2.7.2      隐式类型转换
当给定的一系列运算符/参数类型不符合其所期望的类型, SAP HANA 数据库就会执行类型转换。这种转换仅仅发生在相关的转换可供使用,并且使得运算符/参数类型可执行。

举例来说, BIGINT 和 VARCHAR 之间的比较是通过把 VARCHAR 隐式转换成 BIGINT 进行的。

显式转换可以全部用于隐式转换,除了 TIME 和 TIMESTAMP 数据类型。 TIME 和TIMESTAMP 可以使用 TO_TIME(TIMESTAMP)以及 TO_TIMESTAMP(TIME)相互转换。

例子

2.7.3      转换规则表
在下表中:

 方框中“OK”表示允许的数据类型转换,没有任何检查。

 方框中”CHK”表示数据类型转换只有在数据是有效的目标类型时才执行。

 方框中”-”表示不允许该数据类型转换。

如下显示的规则同时适用于隐式和显示转换,除了 TIME 至 TIMESTAMP 的转换。 TIME 类型只能通过显示转换 TO_TIMESTAMP 或者 CAST 函数执行。

2.7.4      类型转换优先级
本节介绍 SAP HANA 数据库实施的数据类型的优先级。数据类型优先级指定较低优先级的类型转换为较高优先级的类型。

2.8、类型常量
常量是表示一个特定的固定数值的符号。

2.8.1      字符串常量
字符串常量括在单引号中。

o        'Brian'

o        '100'

Unicode 字符串的格式与字符串相似,但前面有一个 N 标识符( N 代表 SQL-92 标准中的国际语言)。 N 字母前缀必须是大写。

o        N'abc'

SELECT'Brian'"character string 1", '100'"character string 2", N'abc'"unicode string"FROM DUMMY;

2.8.2       数字常量
数字常量用没有括在单引号中的数字字符串表示。数字可能包含小数点或者科学计数。

o        123

o        123.4

o        1.234e2

2.8.3       十六进制数字常量
十六进制数字常量是十六进制数的字符串,含有前缀 0x。

o        0x0abc

SELECT 123 "integer", 123.4 "decimal1", 1.234e2 "decimal2", 0x0abc "hexadecimal"FROM DUMMY;

2.8.4       二进制字符串常量
二进制字符串有前缀 X,是一个括在单引号中的十六进制数字字符串。

o        X'00abcd'

o        x'dcba00'

SELECT X'00abcd'"binary string 1", x'dcba00'"binary string 2"FROM DUMMY;

2.8.5       日期、时间、时间戳常量
日期、时间、时间戳各自有如下前缀:

o        date'2010-01-01'

o        time'11:00:00.001'

o        timestamp'2011-12-31 23:59:59'

SELECT date'2010-01-01' "date", time'11:00:00.001' "time", timestamp'2011-12-31 23:59:59' "timestamp" FROM DUMMY;

SELECTdate'2010-01-01'"date", time'11:00:00.001'"time", timestamp'2011-12-31 23:59:59'"timestamp"FROM DUMMY;

3                            谓词
谓词由组合的一个或多个表达式,或者逻辑运算符指定,并返回以下逻辑 /真值中的一个:

TRUE、 FALSE、或者 UNKNOW。

3.1比较谓词
两个值使用比较谓词进行比较,并返回 TRUE, FALSE 或 UNKNOW。

语法:

<comparison_predicate> ::=<expression> { = | != | <> | > | < | >= | <= } [ ANY | SOME| ALL ] { <expression_list> | <subquery> }

<expression_list> ::= <expression>, ...

表达式可以是简单的表达式如字符、日期或者数字,也可以是标量(只有一条结果)子查询,这种子查询的SELECT从句中只有一个表字段或者是一个统计列

如果子查询的结果只有一条数据时,可以省略[ALL|ANY|SOME]选项

如果子查询返回的是多条,则可需要带上[ALL|ANY|SOME]选项

²   ALL:如果子查询返回的所有行都满足比较条件时,才为真

²   ANY|SOME:如果子查询返回的所有行中只要有一条满足比较条件时,就会为真

²   =等号与ANY|SOME一起使用时,与IN操作符具有一样的效果

3.2BETWEEN谓词
值将在给定范围中进行比较。

语法:

<range_predicate> ::= <expression1> [NOT] BETWEEN <expression2> AND <expression3>

BETWEEN …AND … - 当指定了范围谓词时,如果 expression1 在 expression2 和 expression3 指定的范围内时,结果返回真;如果 expression2 比 expression3 小,则只返回真。

3.3In 谓词
一个值与一组指定的值比较。如果 expression1 的值在 expression_list(或子查询)中,结果返回真。

语法:

<in_predicate> ::= <expression> [NOT] IN { <expression_list> | <subquery> }

... WHERE CITY IN ('BERLIN', 'NEW YORK', 'LONDON').

如果CITY为IN后面列表中的任何一个时返回true

IN后面也可以根子查询:

SELECT SINGLE city latitude longitude
  INTO (city, lati, longi)
  FROM sgeocity
  WHERE city IN ( SELECT cityfrom FROM spfli
                    WHERE carrid = carr_id
                    AND   connid = conn_id ).

3.4Exists 谓词
如果子查询返回非空结果集,结果为真;返回空结果集,结果则为假。

这类子查询没有返回值,也不要求SELECT从句中只有一个选择列,选择列可以任意个数,WHERE or HAVING从句来根据该子查询的是否查询到数据来决定外层主查询语句来选择相应数据

DATA: name_tab TYPE TABLE OF scarr-carrname,
      name LIKE LINE OF name_tab.
SELECT carrname INTO TABLE name_tab FROM scarr
  WHERE EXISTS ( SELECT * FROM spfli
                    WHERE carrid = scarr~carrid
                    AND cityfrom = 'NEW YORK' ).
LOOP AT name_tab INTO name.
  WRITE: / name.
ENDLOOP.

此子查询又为相关子查询:

如果某个子查的WHERE条件中引用了外层查询语句的列,则称此子查询为相关子查询。相关子查询对外层查询结果集中的每条记录都会执行一次,所以尽量少用相关子查询

3.5Like 谓词
Like 用来比较字符串, Expression1 与包含在 expression2 中的模式比较。通配符( %)和( _)可以用在比较字符串 expression2 中。

“_”用于替代单个字符,“%”用于替代任意字符串,包括空字符串。

可以使用ESCAPE选项指定一个忽略符号h,如果通配符“_”、“%”前面有符号<h>,那么通配符失去了它在模式中的功能,而指字符本身了:

... WHERE FUNCNAME LIKE'EDIT#_%'ESCAPE'#';

以“EDIT_”开头的字符串

3.6NULL 谓词
当指定了谓词 IS NULL,值可以与 NULL 比较。如果表达式值为 NULL, 则 IS NULL 返回值为真;如果指定了谓词 IS NOT NULL,值不为 NULL 时返回值为真。

语法:

null_predicate> ::= <expression> IS [NOT] NULL

3.7CONTAINS 谓词
CONTAINS 谓词用来搜索子查询中文本匹配的字符串。

语法:

<contains_function> ::= CONTAINS '(' <contains_columns> ',' <search_string>')'| CONTAINS '(' <contains_columns> ',' <search_string> ',' <search_specifier> ')'

<contains_columns> ::= '*' | <column_name> | '(' <columnlist> ')'

<search_string> ::= <string_const>

<search_specifier> ::= <search_type> <opt_search_specifier2_list>| <search_specifier2_list>

<opt_search_specifier2_list> ::= empty| <search_specifier2_list>

<search_type> ::= <exact_search> | <fuzzy_search> | <linguistic_search>

<search_specifier2_list> ::= <search_specifier2>| <search_specifier2_list> ',' <search_specifier2>

<search_specifier2> := <weights> | <language>

<exact_search> ::= EXACT

<fuzzy_search> ::= FUZZY| FUZZY '(' <float_const> ')' | FUZZY '(' <float_const> ',' <additional_params> ')'

<linguistic_search> ::= LINGUISTIC

<weights> ::= WEIGHT '(' <float_const_list> ')'

<language> :: LANGUAGE '(' <string_const> ')'

<additional_params> ::= <string_const>

 

search_string:使用自由式字符串搜索格式(例如, Peter "Palo Alto"或 Berlin -"SAP LABS")。

search_specifier:如果没有指定 search_specifier, EXACT 为默认值。

EXACT:对于那些在 search_attributes 中精确匹配 searchterms 的记录, EXACT 返回真。

FUZZY:对于那些在 search_attributes 相似匹配 searchterms 的记录, FUZZY 返回真(例如,以某种程度忽略拼写错误)。

Float_const:如果省略 float_const,则默认值为 0.8。可以通过定义列式存储联接视图支持的参数FUZZINESSTHRESHOLD 来覆盖默认值。

WEIGHT:如果定义了 weights 列表,则必须与<contains_columns>中的列数量一样。

LANGUAGE:LANGUAGE 在搜索字符串的预处理中使用,并且作为搜索前的过滤。只返回匹配搜索字符串的文档和定义的语言。

LINGUISTIC:对于那些在 searchattribute 中出现的 searchterms 字符变量, LINGUISTIC 返回真。

 

限制:如果在 where 条件中定义了多个 CONTAINS,那么只有其中的一个由<contains_columns>列表中的不止一列组成。

CONTAINS 只对列式存储表适用(简单表和联接视图)。

 

例子:

精确搜索:

select * from T where contains(column1, 'dog OR cat') -- EXACT is implicit

select * from T where contains(column1, 'dog OR cat', EXACT)

select * from T where contains(column1, '"cats and dogs"') -- phrase search

模糊搜索:

select * from T where contains(column1, 'catz', FUZZY(0.8))

语言搜索:

select * from T where contains(column1, 'catz', LINGUISTIC)

自由式搜索:自由式搜索是对于多列的搜索。

select * from T where CONTAINS( (column1,column2,column3), 'cats OR dogz', FUZZY(0.7))

select * from T where CONTAINS( (column1,column2,column3), 'cats OR dogz', FUZZY(0.7))

4                            操作符
你可以在表达式中使用操作符进行算术运算。操作符可以用来计算、比较值或者赋值。

4.1一元和二元操作符


4.2操作符优先级
一个表达式可以使用多个操作符。如果操作符大于一个,则 SAP HANA 数据库会根据操作符优先级评估它们。你可以通过使用括号改变顺序,因为在括号内的表达式会第一个评估。

如果没有使用括号,则操作符优先级将根据下表。请注意, SAP HANA 数据库对于优先级相同的操作符将从左至右评估操作符。

4.3算术操作符
你可以使用算术操作符来执行数学运算,如加法、减法、乘法和除法,以及负数。

4.4字符串操作符


对于 VARCHAR 或者 NVARCHAR 类型字符串,前导或者后置空格将保留。如果其中一字符串类型为 NVARCHAR,则结果也为 NVARCHAR 并且限制在 5000 个字母, VARCHAR 联接的最大长度也限制在 5000 个字母。

4.5比较操作符
语法:

<comparison_operation> ::= <expression1> <comparison_operator> <expression2>

4.6逻辑操作符
搜索条件可以使用 AND 或者 OR 操作符结合,你也可以使用 NOT 操作符否定条件。

4.7合并操作符
对两个或更多个查询的结果执行合并操作

UNION:并集,去重

UNION ALL:并集,包括重复

INTERSECT:交集

EXCEPT:差集

5                            表达式
表达式是可以用来计算并返回值的子句。

语法:

<expression> ::=<case_expression>
| <function_expression>
| <aggregate_expression>
| (<expression> )
| ( <subquery> )
| - <expression>
| <expression> <operator> <expression>
| <variable_name>
| <constant>
| [<correlation_name>.]<column_name>

5.1Case 表达式
Case 表达式允许用户使用 IF ... THEN ... ELSE逻辑,而不用在 SQL 语句中调用存储过程。

语法:

<case_expression> ::=

CASE <expression>

WHEN <expression> THEN <expression>, ...

[ ELSE <expression>]

{ END | END CASE }

如果位于 CASE 语句后面的表达式和 WHEN 后面的表达式相等,则 THEN 之后的表达式将作为返回值;否则返回 ELSE 语句之后的表达式,如果存在的话。

CASE后面还可以省略,省略后如下:

BEGIN

 OUTTAB = SELECT CARRID, CONNID, FLDATE, BOOKID, CUSTOMID

         FROM "SFLIGHT"."SBOOK"

         WHERE (CASE WHEN CARRID = :IV_CARRID THEN '1'

         ELSE '2' END) = '2';

 END;

由于CASE WHEN性能不好,所以可以改写成下面这样:

SELECT CARRID, CONNID, FLDATE, BOOKID, CUSTOMID

         FROM "SFLIGHT"."SBOOK"

         WHERE CARRID  <> :IV_CARRID or carrid is null

5.2Function 表达式
SQL 内置的函数可以作为表达式使用。

语法:

<function_expression> ::= <function_name> ( <expression>, ... )

5.3Aggregate 表达式
Aggregate 表达式利用 aggregate 函数计算同一列中多行值。

语法:

<aggregate_expression> ::= COUNT(*) | <agg_name> ( [ ALL | DISTINCT ] <expression>)

<agg_name> ::= COUNT | MIN | MAX | SUM | AVG | STDDEV | VAR

5.4表达式中的子查询
子查询是在括号中的 SELECT 语句。 SELECT 语句可以包含一个,有且仅有一个选择项。当作为表达式使用时,标量(只有一条结果)子查询允许返回零个或一个值。

语法:

<scalar_subquery_expression> ::= (<subquery>)

在最高级别的 SELECT 中的 SELECT 列表,或者 UPDATE 语句中的 SET 条件中,你可以在任何能使用列名的地方使用标量子查询。不过, scalar_subquery 不可以在 GROUP BY 条件中使用。

例子:

以下语句返回每个部门中的员工数,根据部门名字分组:

SELECT DepartmentName, COUNT(*), 'out of',(SELECTCOUNT(*) FROM Employees)

FROM Departments AS D, Employees AS E WHERE D.DepartmentID = E.DepartmentID

GROUPBY DepartmentName;

6                            SQL 函数
6.1数据类型转换函数
数据类型转换函数用来把参数从一个数据类型转换为另一个数据类型,或者测试转换是否可行。

6.1.1     CAST
语法:

CAST (expression AS data_type)

语法元素:

Expression – 被转换的表达式。

Data type – 目标数据类型。 TINYINT | SMALLINT |INTEGER | BIGINT | DECIMAL | SMALLDECIMAL | REAL | DOUBLE | ALPHANUM | VARCHAR |NVARCHAR | DAYDATE | DATE | TIME | SECONDDATE | TIMESTAMP。

例子:

SELECTCAST (7 ASVARCHAR) "cast"FROM DUMMY;--7

6.1.2     TO_ALPHANUM
语法:

TO_ALPHANUM (value)

描述:

将给定的 value 转换为 ALPHANUM 数据类型。

例子:

SELECT TO_ALPHANUM ('10') "to alphanum"FROM DUMMY;--10

6.1.3     TO_BIGINT
语法:

TO_BIGINT (value)

描述:

将 value 转换为 BIGINT 类型。

例子:

SELECT TO_BIGINT ('10') "to bigint"FROM DUMMY;--10

6.1.4     TO_BINARY
语法:

TO_BINARY (value)

描述:

将 value 转换为 BINARY 类型。

例子:

SELECT TO_BINARY ('abc') "to binary"FROM DUMMY;--616263  显示时却是以十六进制显示,而不是二进制?

6.1.5     TO_BLOB
语法:

TO_BLOB (value)

描述:

将 value 转换为 BLOB 类型。参数值必须是二进制字符串。

例子:

SELECT TO_BLOB (TO_BINARY('abcde')) "to blob"FROM DUMMY;--abcde

6.1.6     TO_CHAR
语法:

TO_CHAR (value [, format])

描述:

将 value 转换为 CHAR 类型。如果省略 format 关键字,转换将会使用 Date Formats 中说明的日期格式模型。

例子:

SELECT TO_CHAR (TO_DATE('2009-12-31'), 'YYYY/MM/DD') "to char"FROM DUMMY;--2009/12/31

SELECT TO_CHAR (TO_DATE('2009-12-31')) "to char"FROM DUMMY;--2009-12-31

6.1.7     TO_CLOB
语法:

TO_CLOB (value)

描述:

将 value 转换为 CLOB 类型。

例子:

SELECT TO_CLOB ('TO_CLOB converts the value to a CLOB data type') "to clob"FROM DUMMY;--TO_CLOB converts the value to a CLOB data type

6.1.8     TO_DATE
语法:

TO_DATE (d [, format])

描述:

将日期字符串 d 转换为 DATE 数据类型。如果省略 format 关键字,转换将会使用 Date Formats 中说明的日期格式模型。

例子:

SELECT TO_DATE('2010-01-12', 'YYYY-MM-DD') "to date"FROM DUMMY;--2010-1-12

6.1.9     TO_DATS
语法:

TO_DATS (d)

描述:

将字符串 d 转换为 ABAP 日期字符串,格式为”YYYYMMDD”。

例子:

SELECT TO_DATS ('2010-01-12') "abap date"FROM DUMMY;--20100112

6.1.10   TO_DECIMAL
语法:

TO_DECIMAL (value [, precision, scale])

描述:

将 value 转换为 DECIMAL 类型。

精度是有效数字的总数,范围为 1 至 34。小数位数是从小数点到最小有效数字的数字个数,范围从-6,111 到 6,176,这表示位数指定了十进制小数的指数范围从 10-6111 至 106176。如果没有指定小数位数,则默认值为 0。

当数字的有效数字在小数点的右侧时,小数位数为正;有效数字在小数点左侧时,小数位数为负。

当未指定精度和小数位数, DECIMAL 成为浮点小数。这种情况下,精度和小数位数可以在上文描述的范围内不同,根据存储的数值,精度为 1-34 以及小数位数为 6111-6176。

例子:

SELECTTO_DECIMAL(7654321.888888, 10, 3) "to decimal"FROM DUMMY--7,654,321.888

6.1.11   TO_DOUBLE
语法:

TO_DOUBLE (value)

描述:

将 value 转换为 DOUBLE(双精度)数据类型。

例子:

SELECT 3*TO_DOUBLE ('15.12') "to double"FROM DUMMY;--45.36

6.1.12   TO_INT
语法:

TO_INT (value)

描述:

将 value 转换为 INTEGER 类型。

例子:

SELECT TO_INT('10') "to int"FROM DUMMY;--10

6.1.13   TO_INTEGER
语法:

TO_INTEGER (value)

描述:

将 value 转换为 INTEGER 类型。

例子:

SELECT TO_INTEGER ('10') "to int"FROM DUMMY;--10

6.1.14   TO_NCHAR
语法:

TO_NCHAR (value [, format])

描述:

将 value 转换为 NCHAR Unicode 字符类型。如果省略 format 关键字,转换将会使用 Date Formats中说明的日期格式模型。

例子:

SELECT TO_NCHAR (TO_DATE('2009-12-31'), 'YYYY/MM/DD') "to nchar"FROM DUMMY;--2009/12/31

6.1.15   TO_NCLOB
语法:

TO_NCLOB (value)

描述:

将 value 转换为 NCLOB 数据类型。

例子:

SELECT TO_NCLOB ('TO_NCLOB converts the value to a NCLOB data type') "to nclob"FROM DUMMY;--TO_NCLOB converts the value to a NCLOB data type

6.1.16   TO_NVARCHAR
语法:

TO_NVARCHAR (value [,format])

描述:

将 value 转换为 NVARCHAR Unicode 字符类型。如果省略 format 关键字,转换将会使用 DateFormats 中说明的日期格式模型。

例子:

SELECT TO_NVARCHAR(TO_DATE('2009/12/31'), 'YY-MM-DD') "to nchar"FROM DUMMY;--09-12-31

6.1.17   TO_REAL
语法:

TO_REAL (value)

描述:

将 value 转换为实数(单精度)数据类型。

例子:

SELECT 3*TO_REAL ('15.12') "to real"FROM DUMMY;--45.36000061035156

6.1.18   TO_SECONDDATE
语法:

TO_SECONDDATE (d [, format])

描述:

将 value 转换为 SECONDDATE 类型。如果省略 format 关键字,转换将会使用 Date Formats 中说明的日期格式模型。

例子:

SELECT TO_SECONDDATE ('2010-01-11 13:30:00', 'YYYY-MM-DD HH24:MI:SS') "to seconddate"FROM DUMMY;--2010-1-11 13:30:00.0

6.1.19   TO_SMALLDECIMAL
语法:

TO_SMALLDECIMAL (value)

描述:

将 value 转换为 SMALLDECIMAL 类型。

例子:

SELECT TO_SMALLDECIMAL(7654321.89) "to smalldecimal"FROM DUMMY;--7,654,321.89

6.1.20   TO_SMALLINT
语法:

TO_SMALLINT (value)

描述:

将 value 转换为 SMALLINT 类型。

例子:

SELECT TO_SMALLINT ('10') "to smallint"FROM DUMMY;--10

6.1.21   TO_TIME
语法:

TO_TIME (t [, format])

描述:

将时间字符串 t 转换为 TIME 类型。如果省略 format 关键字,转换将会使用 Date Formats 中说明的日期格式模型。

例子:

SELECT TO_TIME ('08:30 AM', 'HH:MI AM') "to time"FROM DUMMY;--8:30:00

6.1.22   TO_TIMESTAMP
语法:

TO_TIMESTAMP (d [, format])

描述:

将时间字符串 t 转换为 TIMESTAMP 类型。如果省略 format 关键字,转换将会使用 Date Formats中说明的日期格式模型。

例子:

SELECT TO_TIMESTAMP ('2010-01-11 13:30:00', 'YYYY-MM-DD HH24:MI:SS') "to timestamp"FROM DUMMY;--2010-1-11 13:30:00.0

6.1.23   TO_TINYINT
语法:

TO_TINYINT (value)

描述:

将 value 转换为 TINYINT 类型。

例子:

SELECT TO_TINYINT ('10') "to tinyint"FROM DUMMY;--10

6.1.24   TO_VARCHAR
语法:

TO_VARCHAR (value [, format])

描述:

将给定 value 转换为 VARCHAR 字符串类型。如果省略 format 关键字,转换将会使用 Date Formats中说明的日期格式模型。

例子:

SELECT TO_VARCHAR (TO_DATE('2009-12-31'), 'YYYY/MM/DD') "to char"FROM DUMMY;--2009/12/31

6.2日期时间函数
6.2.1     ADD_DAYS
语法:

ADD_DAYS (d, n)

描述:

计算日期 d 后 n 天的值。

例子:

SELECT ADD_DAYS (TO_DATE ('2009-12-05', 'YYYY-MM-DD'), 30) "add days"FROM DUMMY;--2010-1-4

6.2.2     ADD_MONTHS
语法:

ADD_MONTHS (d, n)

描述:

计算日期 d 后 n 月的值。

例子:

SELECT ADD_MONTHS (TO_DATE ('2009-12-05', 'YYYY-MM-DD'), 1) "add months"FROM DUMMY--2010-1-5

6.2.3     ADD_SECONDS
语法:

ADD_SECONDS (t, n)

描述:

计算时间 t 后 n 秒的值。

例子:

SELECT ADD_SECONDS (TO_TIMESTAMP ('2012-01-01 23:30:45'), 15) "add seconds"FROM DUMMY;--2012-1-1 23:31:00.0

6.2.4     ADD_YEARS
语法:

ADD_YEARS (d, n)

描述:

计算日期 d 后 n 年的值。

例子:

SELECT ADD_YEARS (TO_DATE ('2009-12-05', 'YYYY-MM-DD'), 1) "add years"FROM DUMMY;--2010-12-5

6.2.5     CURRENT_DATE
语法:

CURRENT_DATE

描述:

返回当前本地系统日期。

例子:

selectcurrent_date from dummy;--2015-6-12

6.2.6     CURRENT_TIME
语法:

CURRENT_TIME

描述:

返回当前本地系统时间。

例子:

select current_time  from dummy;--16:58:11

6.2.7     CURRENT_TIMESTAMP
语法:

CURRENT_TIMESTAMP

描述:

返回当前本地系统的时间戳信息。

例子:

selectcurrent_timestamp  from dummy;--2015-6-12 16:58:11.471

6.2.8     CURRECT_UTCDATE
语法:

CURRENT_UTCDATE

描述:

返回当前 UTC 日期。 UTC 代表协调世界时,也被称为格林尼治标准时间( GMT)。

例子:

SELECT CURRENT_UTCDATE "Coordinated Universal Date"FROM DUMMY;--2015-6-12

6.2.9     CURRENT_UTCTIME
语法:

CURRENT_UTCTIME

描述:

返回当前 UTC 时间。

例子:

SELECTCURRENT_TIMESTAMP,CURRENT_UTCTIME "Coordinated Universal Time"FROM DUMMY;--2015-6-12 23:25:49.721;15:25:49

6.2.10   CURRENT_UTCTIMESTAMP
语法:

CURRENT_UTCTIMESTAMP

描述:

返回当前 UTC 时间戳。

例子:

SELECTCURRENT_TIMESTAMP,CURRENT_UTCTIMESTAMP "Coordinated Universal Timestamp"FROM DUMMY;-2015-6-12 23:28:07.62;2015-6-12 15:28:07.62

6.2.11   DAYNAME
语法:

DAYNAME (d)

描述:

返回一周中日期 d 的英文名。

例子:

SELECTDAYNAME ('2011-05-30') "dayname"FROM DUMMY;--MONDAY

6.2.12   DAYOFMONTH
语法:

DAYOFMONTH (d)

描述:

返回一个月中日期 d 的整数数字(即一个月中的几号)。

例子:

SELECT DAYOFMONTH ('2011-05-30') "dayofmonth"FROM DUMMY;--30

6.2.13   DAYOFYEAR
语法:

DAYOFYEAR (d)

描述:

返回一年中代表日期 d 的整数数字(即一年中的第几天)。

例子:

SELECTDAYOFYEAR ('2011-02-01') "dayofyear"FROM DUMMY;--32

6.2.14   DAYS_BETWEEN
语法:

DAYS_BETWEEN (d1, d2)

描述:

计算 d1 和 d2 之间的天数(只包括一端:[d1,d2)或者(d1,d2])。

例子:

SELECTDAYS_BETWEEN (TO_DATE ('2015-01-01', 'YYYY-MM-DD'), TO_DATE('2015-02-02', 'YYYY-MM-DD')) "days between"FROM DUMMY;--32

SELECTDAYS_BETWEEN ('2015-01-01','2015-02-02') "days between"FROM DUMMY;--32 类型隐式转换(字符转日期)

SELECTDAYS_BETWEEN ('2015-02-01','2015-03-01') "days between"FROM DUMMY;--28

6.2.15   EXTRACT
语法:

EXTRACT ({YEAR | MONTH | DAY | HOUR | MINUTE | SECOND} FROM d)

描述:

返回日期 d 中指定的时间日期字段的值(年、月、日、时、分、秒)。

例子:

SELECTEXTRACT(YEARFROM TO_DATE('2010-01-04', 'YYYY-MM-DD')) "年",EXTRACT(MONTHFROM'2010-01-04') "月" ,EXTRACT(DAYFROM'2010-01-04') "日" ,EXTRACT(HOURFROM'2010-01-04 05') "时",EXTRACT(MINUTEFROM'2010-01-04 05') "分",EXTRACT(SECONDFROM'2010-01-04 05:06:07') "秒"FROM DUMMY;

6.2.16   HOUR
语法:

HOUR (t)

描述:

返回时间 t 中表示小时的整数。

例子:

SELECTHOUR ('12:34:56') "hour"FROM DUMMY;--12

6.2.17   ISOWEEK
语法:

ISOWEEK (d)

描述:

返回日期 d 的 ISO 年份和星期数。星期数前缀为字母 W。另请阅 WEEK。

例子:

SELECT ISOWEEK (TO_DATE('2011-05-30', 'YYYY-MM-DD')) "isoweek"FROM DUMMY;--2011-W22

6.2.18   LAST_DAY
语法:

LAST_DAY (d)

描述:

返回包含日期 d 的月的最后一天日期。

例子:

SELECT LAST_DAY (TO_DATE('2010-01-04', 'YYYY-MM-DD')) "last day"FROM DUMMY;--2010-1-31

6.2.19   LOCALTOUTC
语法:

LOCALTOUTC (t, timezone)

描述:

将 timezone 下的本地时间 t 转换为 UTC 时间(UTC:通用协调时, Universal Time Coordinated。北京时区是东八区,领先UTC 8个小时,UTC + 时区差=本地时间)。

例子:

SELECT LOCALTOUTC (TO_TIMESTAMP('2012-01-01 01:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'EST') "localtoutc"FROM DUMMY;--2012-1-1 6:00:00.0

6.2.20   MINUTE
语法:

MINUTE(t)

描述:

返回时间 t 中表示分钟的数字。

例子:

SELECTMINUTE ('12:34:56') "minute"FROM DUMMY;--34

6.2.21   MONTH
语法:

MONTH(d)

描述:

返回日期 d 所在月份的数字。

例子:

SELECTMONTH ('2011-05-30') "month"FROM DUMMY;--5

6.2.22   MONTHNAME
语法:

MONTHNAME(d)

描述:

返回日期 d 所在月份的英文名。

例子:

SELECTMONTHNAME ('2011-05-30') "monthname"FROM DUMMY;--MAY

6.2.23   NEXT_DAY
语法:

NEXT_DAY (d)

描述:

返回日期 d 的第二天。

例子:

SELECT NEXT_DAY (TO_DATE ('2009-12-31', 'YYYY-MM-DD')) "next day"FROM DUMMY;--2010-1-1

6.2.24   NOW
语法:

NOW ()

描述:

返回当前时间戳。

例子:

SELECT NOW () "now"FROM DUMMY;--2015-6-12 17:23:01.773

6.2.25   QUARTER
语法:

QUARTER (d, [, start_month ])

描述:

返回日期 d 的年份,季度。第一季度由 start_month 定义的月份开始,如果没有定义start_month,第一季度假设为从一月开始。

例子:

SELECTQUARTER (TO_DATE('2012-01-01', 'YYYY-MM-DD'), 2) "quarter"FROM DUMMY;--2011-Q4

6.2.26   SECOND
语法:

SECOND (t)

描述:

返回时间 t 表示的秒数。

例子:

SELECTSECOND ('12:34:56') "second"FROM DUMMY;--56

6.2.27   SECONDS_BETWEEN
语法:

SECONDS_BETWEEN (d1, d2)

描述:

计算日期参数 d1 和 d2 之间的秒数,语义上等同于 d2-d1。

例子:

SELECT SECONDS_BETWEEN ('2015-01-01 01:01:01', '2015-01-01 02:01:01') "seconds between"FROM DUMMY;--3600

SELECT SECONDS_BETWEEN ('2015-01-01 01:01:01', '2015-01-01 01:02:02') "seconds between"FROM DUMMY;--61

SELECT SECONDS_BETWEEN ('2015-01-01 01:01:01', '2015-01-01 01:01:02') "seconds between"FROM DUMMY;--1

6.2.28   UTCTOLOCAL
语法:

UTCTOLOCAL (t, timezone)

描述:

将 UTC 时间值转换为时区 timezone 下的本地时间。

例子:

SELECT UTCTOLOCAL(TO_TIMESTAMP('2012-01-01 01:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'EST') "utctolocal"FROM DUMMY;--2011-12-31 20:00:00.0

6.2.29   WEEK
语法:

WEEK (d)

描述:

返回日期 d 所在星期的整数数字。另请参阅 ISOWEEK。

例子:

SELECTWEEK(TO_DATE('2011-05-30', 'YYYY-MM-DD')) "week"FROM DUMMY;--23

6.2.30   WEEKDAY
语法:

WEEKDAY (d)

描述:

返回代表日期 d 所在星期的日期数字(星期几)。返回值范围为 0 至 6,表示 Monday(0)至 Sunday(6)。

例子:

SELECTWEEKDAY (TO_DATE ('2011-01-02', 'YYYY-MM-DD')) "week day"FROM DUMMY;--6

SELECTWEEKDAY (TO_DATE ('2011-01-03', 'YYYY-MM-DD')) "week day"FROM DUMMY;--0

6.2.31   YEAR
语法:

YEAR (d)

描述:

返回日期 d 所在的年份数。

例子:

SELECTYEAR (TO_DATE ('2011-05-30', 'YYYY-MM-DD')) "year"FROM DUMMY;--2011

6.3数字函数
数字函数接受数字或者带有数字的字符串作为输入,返回数值。 当数字字符的字符串作为输入时,在计算结果前,自动执行字符串到数字的隐式转换。

6.3.1     ABS
语法:

ABS (n)

描述:

返回数字参数 n 的绝对值。

例子:

SELECTABS (-1) "absolute"FROM DUMMY;--1

6.3.2     ACOS
语法:

ACOS (n)

描述:

返回参数 n 的反余弦,以弧度为单位,值为-1 至 1。

例子:

SELECTACOS (0.5) "acos"FROM DUMMY;--1.0471975511965979

6.3.3     ASIN
语法:

ASIN (n)

描述:

返回参数 n 的反正弦值,以弧度为单位,值为-1 至 1。

例子:

SELECTASIN (0.5) "asin"FROM DUMMY;--0.5235987755982989

6.3.4     ATAN
语法:

ATAN (n)

描述:

返回参数 n 的反正切值,以弧度为单位, n 的范围为无限。

例子:

SELECTATAN (0.5) "atan"FROM DUMMY;--0.4636476090008061

6.3.5     ATAN2
语法:

ATAN2 (n, m)

描述:

返回两数 n 和 m 比率的反正切值,以弧度为单位。这和 ATAN(n/m)的结果一致。

例子:

SELECTATAN2 (1.0, 2.0) "atan2"FROM DUMMY;--0.4636476090008061

6.3.6     BINTOHEX
语法:

BINTOHEX (expression)

描述:

将二进制值转换为十六进制。

例子:

SELECT BINTOHEX('AB') "bintohex"FROM DUMMY;--4142 先会将“AB”字符串隐式转换为二进制??

SELECT TO_BINARY ('AB') "to binary"FROM DUMMY;--4142 显示时却是以十六进制显示,而不是二进制?

6.3.7     BITAND
语法:

BITAND (n, m)

描述:

对参数 n 和 m 的位执行 AND 操作(即按位与)。 n 和 m 都必须是非负整数。 BITAND 函数返回 BIGINT 类型的结果。

例子:

SELECT BITAND (255, 123) "bitand"FROM DUMMY;--123

6.3.8     CEIL
语法:

CEIL(n)

描述:

返回大于或者等于 n 的第一个整数(大小它的最小整数)

例子:

SELECT CEIL (14.5) "ceiling"FROM DUMMY;--15

6.3.9     COS
语法:

COS (n)

描述:

返回参数 n 的余弦值,以弧度为单位。

例子:

SELECTCOS (0.0) "cos"FROM DUMMY;--1

6.3.10   COSH
语法:

COSH (n)

描述:

返回参数 n 的双曲余弦值。

例子:

SELECT COSH (0.5) "cosh"FROM DUMMY;--1.1276259652063807

6.3.11   COT
语法:

COT (n)

描述:

计算参数 n 的余切值,其中 n 以弧度表示。

例子:

SELECTCOT (40) "cot"FROM DUMMY;-- -0.8950829176379128

6.3.12   EXP
语法:

EXP (n)

描述:

返回以 e 为底, n 为指数的计算结果。

例子:

SELECTEXP (1.0) "exp"FROM DUMMY;--2.718281828459045

6.3.13   FLOOR
语法:

FLOOR (n)

描述:

返回不大于参数 n 的最大整数。

例子:

SELECTFLOOR (14.5) "floor"FROM DUMMY;--14

6.3.14   GREATEST
语法:

GREATEST (n1 [, n2]...)

描述:

返回参数 n1,n2,…最大数。

例子:

SELECT GREATEST ('aa', 'ab', 'bb', 'ba') "greatest"FROM DUMMY;--bb

6.3.15   HEXTOBIN
语法:

HEXTOBIN (value)

描述:

将十六进制数转换为二进制数。

例子:

SELECTHEXTOBIN ('1a') "hextobin"FROM DUMMY;--1A 还是以十六进制来显示?

6.3.16   LEAST
语法:

LEAST (n1 [, n2]...)

描述:

返回参数 n1,n2,…最小数。

例子:

SELECT LEAST('aa', 'ab', 'ba', 'bb') "least"FROM DUMMY;--aa

6.3.17   LN
语法:

LN (n)

描述:

返回参数 n 的自然对数。

例子:

SELECTLN (9) "ln"FROM DUMMY;--2.1972245773362196

6.3.18   LOG
语法:

LOG (b, n)

描述:

返回以 b 为底, n 的自然对数值。底 b 必须是大于 1 的正数,且 n 必须是正数。

例子:

SELECTLOG (10, 2) "log"FROM DUMMY;--0.30102999566398114

6.3.19   MOD
语法:

MOD (n, d)

描述:

返回 n 整除 b 的余数值。

当 n 为负时,该函数行为不同于标准的模运算。

以下列举了 MOD 函数返回结果的例子

如果 d 为零,返回 n。

如果 n 大于零,且 n 小于 d,则返回 n。

如果 n 小于零,且 n 大于 d,则返回 n。

在上文提到的其他情况中,利用 n 的绝对值除以 d 的绝对值来计算余数。如果 n 小于 0,则 MOD返回的余数为负数;如果 n 大于零, MOD 返回的余数为正数。

例子:

SELECTMOD (15, 4) "modulus"FROM DUMMY;--3

SELECTMOD (-15, 4) "modulus"FROM DUMMY;-- -3

6.3.20   POWER
语法:

POWER (b, e)

描述:

计算以 b 为底, e 为指数的值。

例子:

SELECTPOWER (2, 10) "power"FROM DUMMY;--1024

6.3.21   ROUND
语法:

ROUND (n [, pos])

描述:

返回参数 n 小数点后 pos 位置的值(四舍五入)。

例子:

SELECTROUND (16.16, 1) "round"FROM DUMMY;--16.2

SELECTROUND (16.16, -1) "round"FROM DUMMY;--20

6.3.22   SIGN
语法:

SIGN (n)

描述:

返回 n 的符号(正或负)。如果 n 为正,则返回 1; n 为负,返回-1, n 为 0 返回 0。

例子:

SELECTSIGN (-15) "sign"FROM DUMMY;-- -1

6.3.23   SIN
语法:

SIN (n)

描述:

返回参数 n 的正弦值,以弧度为单位。

例子:

SELECTSIN(3.141592653589793/2) "sine"FROM DUMMY;--1

6.3.24   SINH
语法:

SINH (n)

描述:

返回 n 的双曲正弦值,以弧度为单位。

例子:

SELECT SINH (0.0) "sinh"FROM DUMMY;--0

6.3.25   SQRT
语法:

SQRT (n)

描述:

返回 n 的平方根。

例子:

SELECTSQRT (2) "sqrt"FROM DUMMY;--1.4142135623730951

6.3.26   TAN
语法:

TAN (n)

描述:

返回 n 的正切值,以弧度为单位。

例子:

SELECTTAN (0.0) "tan"FROM DUMMY;--0

6.3.27   TANH
语法:

TANH (n)

描述:

返回 n 的双曲正切值,以弧度为单位。

例子:

SELECT TANH (1.0) "tanh"FROM DUMMY;--0.7615941559557649

6.3.28   UMINUS
语法:

UMINUS (n)

描述:

返回 n 的负值。

例子:

SELECT UMINUS(-765) "uminus"FROM DUMMY;--756

SELECT UMINUS(765) "uminus"FROM DUMMY;-- -756

6.4字符串函数
6.4.1     ASCII
语法:

ASCII(c)

描述:

返回字符串 c 中第一个字节的 ASCII 值。

SELECTASCII('Ant') "ascii"FROM DUMMY;--65

6.4.2     CHAR
语法:

CHAR (n)

描述:

返回 ASCII 值为数字 n 的字符。

例子:

SELECTCHAR (65) || CHAR (110) || CHAR (116) "character"FROM DUMMY;--Ant

6.4.3     CONCAT
语法:

CONCAT (str1, str2)

描述:

返回位于 str1 后的 str2 联合组成的字符串。级联操作符(||)与该函数作用相同。

例子:

SELECTCONCAT ('C', 'at') "concat"FROM DUMMY;--Cat

6.4.4     LCASE
语法:

LCASE(str)

描述:

将字符串 str 中所有字符转换为小写。

注意: LCASE 函数作用与 LOWER 函数相同。

例子:

SELECTLCASE ('TesT') "lcase"FROM DUMMY;--test

6.4.5     LEFT
语法:

LEFT (str, n)

描述:

返回字符串 str 开头 n 个字符/位的字符。

例子:

SELECTLEFT ('Hello', 3) "left"FROM DUMMY;--Hel

6.4.6     LENGTH
语法:

LENGTH(str)

描述:

返回字符串 str 中的字符数。对于大对象(LOB)类型,该函数返回对象的字节长度。

例子:

SELECTLENGTH ('length in char') "length"FROM DUMMY;--14

6.4.7     LOCATE
语法:

LOCATE (haystack, needle)

描述:

返回字符串 haystack 中子字符串 needle 所在的位置。如果未找到,则返回 0。

例子:

SELECTLOCATE ('length in char', 'char') "locate"FROM DUMMY;--11

SELECTLOCATE ('length in char', 'length') "locate"FROM DUMMY;--1

SELECTLOCATE ('length in char', 'zchar') "locate"FROM DUMMY;--0

6.4.8     LOWER
语法:

LOWER (str)

描述:

将字符串 str 中所有字符转换为小写。

注意: LOWER 函数作用与 LCASE 相同。

例子:

SELECTLOWER ('AnT') "lower"FROM DUMMY;--ant

6.4.9     LPAD
语法:

LPAD (str, n [, pattern])

描述:

从左边开始对字符串 str 使用空格进行填充,达到 n 指定的长度。如果指定了 pattern 参数,字符串 str 将按顺序填充直到满足 n 指定的长度。

例子:

SELECT LPAD ('end', 15, '12345') "lpad"FROM DUMMY;--123451234512end

6.4.10   LTRIM
语法:

LTRIM (str [, remove_set])

描述:

返回字符串 str 截取所有前导空格后的值。如果定义了 remove_set, LTRIM 从起始位置移除字符串str 包含该集合中的字符,该过程持续至到达不在 remove_set 中的字符。

注意: remove_set 被视为字符集合,而非搜索字符。

例子:

SELECTLTRIM ('babababAabend','ab') "ltrim"FROM DUMMY;--Aabend

6.4.11   NCHAR
语法:

NCHAR (n)

描述:

返回整数 n 表示的 Unicode 字符。

例子:

SELECT UNICODE ('江') "unicode"FROM DUMMY;--27743

SELECTNCHAR (27743) "nchar"FROM DUMMY;--江

6.4.12   REPLACE
语法:

REPLACE (original_string, search_string, replace_string)

描述:

搜索 original_string 所有出现的 search_string,并用 replace_string 替换。

如果 original_string 为空, 则返回值也为空。

如果 original_string 中两个重叠的子字符串与 search_string 匹配,只有第一个会被替换:

SELECTREPLACE ('abcbcb','bcb', '') "replace"FROM DUMMY;--acb

如果 original_string 未出现 search_string,则返回未修改的 original_string。

如果 original_string, search_string 或者 replace_string 为 NULL,则返回值也为 NULL。

例子:

SELECTREPLACE ('DOWNGRADE DOWNWARD','DOWN', 'UP') "replace"FROM DUMMY;--UPGRADE UPWARD

6.4.13   RIGHT
语法:

RIGHT(str, n)

描述:

返回字符串 str 中最右边的 n 字符/字节。

例子:

SELECTRIGHT('HI0123456789', 3) "right"FROM DUMMY;--789

6.4.14   RPAD
语法:

RPAD (str, n [, pattern])

描述:

从尾部开始对字符串 str 使用空格进行填充,达到 n 指定的长度。如果指定了 pattern 参数,字符串 str 将按顺序填充直到满足 n 指定的长度。

例子:

SELECT RPAD ('end', 15, '12345') "right padded"FROM DUMMY;--end123451234512

6.4.15   RTRIM
语法:

RTRIM (str [,remove_set ])

描述:

返回字符串 str 截取所有后置空格后的值。如果定义了 remove_set, RTRIM 从尾部位置移除字符串 str 包含该集合中的字符,该过程持续至到达不在 remove_set 中的字符。

注意: remove_set 被视为字符集合,而非搜索字符。

例子:

SELECTRTRIM ('endabAabbabab','ab') "rtrim"FROM DUMMY;--endabA

6.4.16   SUBSTR_AFTER
语法:

SUBSTR_AFTER (str, pattern)

描述:

返回 str 中位于 pattern 第一次出现位置后的子字符串。

如果 str 不包含 pattern 子字符串,则返回空字符串。

如果 pattern 为空字符串,则返回 str。

如果 str 或者 pattern 为 NULL,则返回 NULL。

例子:

SELECT SUBSTR_AFTER ('Hello My Friend','My') "substr after"FROM DUMMY;-- ' Friend'

6.4.17   SUBSTR_BEFORE
语法:

SUBSTR_BEFORE (str, pattern)

描述:

返回 str 中位于 pattern 第一次出现位置前的子字符串。

如果 str 不包含 pattern 子字符串,则返回空字符串。

如果 pattern 为空字符串,则返回 str。

如果 str 或者 pattern 为 NULL,则返回 NULL。

例子:

SELECT SUBSTR_BEFORE ('Hello My Friend','My') "substr before"FROM DUMMY;--'Hello '

6.4.18   SUBSTRING
语法:

SUBSTRING (str, start_position [, string_length])

描述:

返回字符串 str 从 start_position 开始的子字符串。 SUBSTRING 可以返回 start_position 起的剩余部分字符或者作为可选,返回由 string_length 参数设置的字符数。

如果 start_position 小于 0,则被视为 1。

如果 string_length 小于 1,则返回空字符串。

例子:

SELECTSUBSTRING ('1234567890',4,2) "substring"FROM DUMMY;--45

6.4.19   TRIM
语法:

TRIM ([[LEADING | TRAILING | BOTH] trim_char FROM] str )

描述:

返回移除前导和后置空格后的字符串 str。截断操作从起始(LEADING)、结尾(TRAILING)或者两端(BOTH)执行。

如果 str 或者 trim_char 为空,则返回 NULL。

如果没有指定可选项, TRIM 移除字符串 str 中两端的子字符串 trim_char。

如果没有指定 trim_char,则使用单个空格(就是去空格)。

例子:

SELECTTRIM ('a'FROM'aaa123456789aa') "trim both"FROM DUMMY;--123456789

SELECTTRIM (LEADING'a'FROM'aaa123456789aa') "trim leading"FROM DUMMY;--123456789aa

6.4.20   UCASE
语法:

UCASE (str)

描述:

将字符串 str 中所有字符转换为大写。

注意: UCASE 函数作用与 UPPER 函数相同。

例子:

SELECTUCASE ('Ant') "ucase"FROM DUMMY;--ANT

6.4.21   UNICODE
语法:

UNICODE(c)

描述:

返回字符串中首字母的 UnIcode 字符码数字;如果首字母不是有效编码,则返回 NULL。

例子:

SELECT UNICODE ('江') "unicode"FROM DUMMY;--27743

SELECTNCHAR (27743) "nchar"FROM DUMMY;--江

6.4.22   UPPER
语法:

UPPER (str)

描述:

将字符串 str 中所有字符转换为大写。

注意: UPPER 函数作用与 UCASE 相同。

例子:

SELECTUPPER ('Ant') "uppercase"FROM DUMMY;--ANT

6.5杂项函数
6.5.1     COALESCE
语法:

COALESCE (expression_list)

描述:

返回 list 中非 NULL 的表达式。 Expression_list 中必须包含至少两个表达式,并且所有表达式都是可比较的。如果所有的参数都为 NULL,则结果也为 NULL。

例子:

CREATETABLE coalesce_example (ID INTPRIMARYKEY, A REAL, B REAL);

INSERTINTO coalesce_example VALUES(1, 100, 80);

INSERTINTO coalesce_example VALUES(2, NULL, 63);

INSERTINTO coalesce_example VALUES(3, NULL, NULL);

SELECT id, a, b, COALESCE (a, b*1.1, 50.0) "coalesce"FROM coalesce_example

6.5.2     CURRENT_CONNECTION
语法:

CURRENT_CONNECTION

描述:

返回当前连接 ID。

例子:

SELECT CURRENT_CONNECTION "current connection"FROM DUMMY;--400,038

6.5.3     CURRENCT_SCHEMA
语法:

CURRENT_SCHEMA

描述:

返回当前Schema名。

例子:

SELECT CURRENT_SCHEMA "current schema"FROM DUMMY;--SYSTEM

6.5.4     CURRENT_USER
语法:

CURRENT_USER

描述:

返回当前语句上下文的用户名,即当前授权堆栈顶部的用户名。

例子:

--使用SYSTEM用户执行基础SQL

SELECT CURRENT_USER "current user"FROM DUMMY;--SYSTEM

 

-- USER_A用户创建存储过程

CREATEPROCEDUREUSER_A.PROC1 LANGUAGE SQLSCRIPT SQL SECURITY DEFINER AS

BEGIN

       SELECT CURRENT_USER "current user"FROM DUMMY;

END;

-- USER_A用户调用

CALL USER_A.PROC1;--USER_A

--授权予USER_B执行USER_A.PROC1的权限后调用

CALL USER_A.PROC1;--USER_A

 

--将Schema  USER_A授权予USER_B用户后,通过USER_B用户创建存储过程

CREATEPROCEDUREUSER_A.PROC2 LANGUAGE SQLSCRIPT SQL SECURITY INVOKER AS

BEGIN

       SELECT CURRENT_USER "current user"FROM DUMMY;

END;

-- USER_A用户调用

CALL USER_A.PROC2;-- USER_A

-- USER_B用户调用

CALL USER_A.PROC2;-- USER_B

6.5.5     GROUPING_ID
语法:

GROUPING_ID(column_name_list)

描述:

GROUPING_ID 函数可以使用 GROUPING SETS 返回单个结果集中的多级聚集。 GROUPING_ID 返回一个整数识别每行所在的组集合。 GROUPING_ID 每一列必须是 GROUPING SETS 中的元素。

通过把生成的位矢量从 GROUPING SETS 转换为十进制数,将位矢量视作二进制数,分配GROUPING_ID。组成位矢量后,0 分配给 GROUPING SETS 指定的每一列,否则根据 GROUPING SETS 出现的顺序分配 1。通过将位矢量作为二进制数处理,该函数返回一个整型值作为输出。

例子:

SELECT customer, year, product, SUM(sales),GROUPING_ID(customer, year, product)

FROM guided_navi_tab

GROUPBYGROUPING SETS ((customer, year, product),(customer, year),(customer, product),(year, product),(customer),(year),(product));

CUSTOMER         YEAR      PRODUCT            SUM(SALES)       GROUPING_ID(CUSTOMER,YEAR,PRODUCT)

1 C1                        2009       P1                           100                         0

2 C1                        2010       P1                           50                           0

3 C2                        2009       P1                           200                         0

4 C2 2010 P1 100 0

5 C1 2009 P2 200 0

6 C1 2010 P2 150 0

7 C2 2009 P2 300 0

8 C2 2010 P2 150 0

9 C1 2009 a 300 1

10 C1 2010 a 200 1

11 C2 2009 a 500 1

12 C2 2010 a 250 1

13 C1 a P1 150 2

14 C2 a P1 300 2

15 C1 a P2 350 2

16 C2 a P2 450 2

17 a 2009 P1 300 4

18 a 2010 P1 150 4

19 a 2009 P2 500 4

20 a 2010 P2 300 4

21 C1 a a 500 3

22 C2 a a 750 3

23 a 2009 a 800 5

24 a 2010 a 450 5

25 a a P1 450 6

26 a a P2 800 6

6.5.6     IFNULL
语法:

IFNULL (expression1, expression2)

描述:

返回输入中第一个不为 NULL 的表达式。

如果 expression1 不为 NULL,则返回 expression1。

如果 expression2 不为 NULL,则返回 expression2。

如果输入表达式都为 NULL,则返回 NULL。

例子:

SELECTIFNULL ('diff', 'same') "ifnull"FROM DUMMY;--diff

SELECTIFNULL (NULL, 'same') "ifnull"FROM DUMMY;--same

SELECTIFNULL (NULL, NULL) "ifnull"FROM DUMMY;--null

6.5.7     MAP
语法:

MAP (expression, search1, result1 [, search2, result2] ... [, default_result])

描述:

在搜索集合中搜索 expression,并返回相应的结果。

如果未找到 expression 值,并且定义了 default_result,则 MAP 返回 default_result。

如果未找到 expression 值,并且未定义 default_result,MAP 返回 NULL。

注意:

搜索值和相应的结果总是以搜索-结果方式提供。

例子:

SELECTMAP(2, 0, 'Zero', 1, 'One', 2, 'Two', 3, 'Three', 'Default') "map"FROM DUMMY;--Two

SELECTMAP(99, 0, 'Zero', 1, 'One', 2, 'Two', 3, 'Three', 'Default') "map"FROM DUMMY;--Default

SELECTMAP(99, 0, 'Zero', 1, 'One', 2, 'Two', 3, 'Three') "map"FROM DUMMY;--null

6.5.8     NULLIF
语法:

NULLIF (expression1, expression2)

描述:

NULLIF 比较两个输入表达式的值,如果第一个表达式等于第二个,NULLIF 返回 NULL。

如果 expression1 不等于 expression2,NULLIF 返回 expression1。

如果 expression2 为 NULL,NULLIF 返回 expression1。

第一个参数不能是NULL

例子:

SELECTNULLIF ('diff', 'same') "nullif"FROM DUMMY;--diff

SELECTNULLIF('same', 'same') "nullif"FROM DUMMY;--null

SELECTNULLIF('same', null) "nullif"FROM DUMMY;--same

6.5.9     SESSION_CONTEXT
语法:

SESSION_CONTEXT(session_variable)

描述:

返回分配给当前用户的 session_variable 值。

访问的 session_variable ,可以是预定义或者用户自定义。预定义的会话变量可以通过客户端设置的有'APPLICATION', 'APPLICATIONUSER'以及'TRACEPROFILE'。

会话变量可以定义或者修改通过使用命令 SET [SESSION] <variable_name> = <value>,使用 UNSET [SESSION] <variable_name>取消设置。

SESSION_CONTEXT 返回最大长度为 512 字符的 NVARCHAR 类型。

例子:

读取会话变量:

SELECT SESSION_CONTEXT('APPLICATION') "session context"FROM DUMMY;--HDBStudio

6.5.10   SESSION_USER
语法:

SESSION_USER

描述:

返回当前会话的用户名。

例子:

-- example showing basic function operation using SYSTEM user

SELECT SESSION_USER "session user"FROM DUMMY;--SYSTEM

SYSUUID

语法:

6.5.11   SYSUUID
描述:

返回 SAP HANA 连接实例的 SYSUUID。

例子:

SELECT SYSUUID FROM DUMMY;--557A323598FE12F4E20036775F49B32D

7                            SQL 语句
本章描述 SAP HANA 数据库支持的 SQL 语句。

 Schema Definition and Manipulation Statements       Schema操纵语句

 Data Manipulation Statements                                            数据操纵语句

 System Management Statements                                     系统管理语句

 Session Management Statements                                     会话管理语句

 Transaction Management Statements                             事务管理语句

 Access Control Statements                                                   访问控制语句

 Data Import Export Statements                                          数据导入导出语句

7.1数据定义语句
7.1.1     ALTER AUDIT POLICY
语法:

ALTER AUDIT POLICY <policy_name> <audit_mode>

语法元素:

<policy_name> ::= <identifier>

被改变的审计策略名:

<audit_mode> ::= ENABLE | DISABLE

Audit_mode 启用或禁用审计策略。

ENABLE:启用审计策略。

DISABLE:禁用审计策略。

描述:

ALTER AUDIT POLICY 语句启用或禁用审计策略。 <policy_name>必须定义一个已存在的审计策略名。

只有拥有系统权限 AUDIT ADMIN 的数据库用户允许改变审计策略。每个拥有该权限的数据库用户可以修改任意的审计策略,无论是否由该用户创建。

新建的审计策略默认为禁用,并且不会发生任何审计。因此,必须启动该审计策略来执行审计。

审计策略可以视需要禁用和启用。

配置参数:

以下审计的配置参数存储在文件 global.ini,在审计配置部分:

global_auditing_state ( 'true' / 'false' )

无论启动的审计策略数量多少,审计只会在配置参数 global_auditing_state 设置为 true 时启用,默认值 false。

default_audit_trail_type ( 'SYSLOGPROTOCOL' / 'CSVTEXTFILE' ) 指定如何存储审计结果。

SYSLOGPROTOCOL:使用系统 syslog。

CSVTEXTFILE:审计信息值以逗号分隔存储在一个文本文件中。

default_audit_trail_path

指定 CSVTEXTFILE 存储的文件路径。

如果用户拥有需要的系统权限,参数可以在监控视图 M_INIFILE_CONTENTS 中选择。这些只有在显示设置的情况下才可见。

系统表和监控视图:

AUDIT_POLICY:显示所有审计策略和状态。

M_INIFILE_CONTENTS:显示数据库系统配置参数。

只有拥有系统权限 CATALOG READ, DATA ADMIN 或 INIFILE ADMIN 的用户可以查看

M_INIFILE_CONTENTS 视图中的内容,对于其他用户则为空。

例子:

该例子中你需要先利用如下语句创建名为 priv_audit 的审计权限:

CREATE AUDIT POLICY priv_audit AUDITING SUCCESSFUL GRANT PRIVILEGE, REVOKE PRIVILEGE, GRANT ROLE, REVOKE ROLE LEVEL CRITICAL;

现在你可以启用审计策略:

ALTER AUDIT POLICY priv_audit ENABLE;

你也可以禁用该审计策略:

ALTER AUDIT POLICY priv_audit DISABLE;

7.1.2     ALTER FULLTEXT INDEX
语法:

ALTER FULLTEXT INDEX <index_name> <alter_fulltext_index_option>

语法元素:

<index_name> ::= <identifier>

被修改的全文索引标识符:

<alter_fulltext_index_option> ::= <fulltext_parameter_list> | <queue_command> QUEUE

定义了全文索引的参数或者全文索引队列的状态是否应该修改。后者只对异步显式全文索引可见。

<fulltext_parameter_list> ::= <fulltext_parameter> [, ...]

修改的全文索引参数列表:

<fulltext_parameter> ::= FUZZY SEARCH INDEX <on_off>

| PHRASE INDEX RATIO <index_ratio>

| <change_tracking_elem>

<on_off> ::= ON | OFF

FUZZY SEARCH INDEX

使用模糊搜索索引。

PHRASE INDEX RATIO

定义短语索引比率。

<index_ratio> ::= <float_literal>

定义短语索引比率的百分比,值必须为 0.0 与 1.0 之间。

SYNC[HRONOUS]

改变全文索引至同步模式。

ASYNC[HRONOUS]

改变全文索引至异步模式。

<flush_queue_elem> ::= EVERY <integer_literal> MINUTES

| AFTER <integer_literal> DOCUMENTS

| EVERY <integer_literal> MINUTES OR AFTER <integer_literal>

DOCUMENTS

当使用异步索引时,你可以利用 flush_queue_elem 定义更新全文索引的时间。

<queue_command> ::= FLUSH | SUSPEND | ACTIVATE

FLUSH

利用正在处理队列的文件更新全文索引。

SUSPEND

暂停全文索引处理队列。

ACTIVATE

激活全文索引处理队列。

描述:

使用该命令,你可以修改全文索引的参数或者索引处理队列的状态。队列是用来激活全文索引以

异步方式工作的机制,例如插入操作被阻塞,直到文件处理完。

ALTER FULLTEXT INDEX <index_name> <fulltext_elem_list>语句修改全文索引的参数。

ALTER FULLTEXT INDEX <index_name> <queue_parameters>语句修改异步全文索引的处理队列状

态。

例子:

ALTER FULLTEXT INDEX i1 PHRASE INDEX RATIO 0.3 FUZZY SEARCH INDEX ON

在上述例子中,对于全文索引’i1’,短文索引比率设为 30,,并且启用了模糊搜索索引。

ALTER FULLTEXT INDEX i2 SUSPEND QUEUE

暂停全文索引’i2’的队列

ALTER FULLTEXT INDEX i2 FLUSH QUEUE

利用队列中已处理的文件更新全文索引’i2’。

7.1.3     ALTER INDEX
ALTER INDEX <index_name> REBUILD

语法元素:

<index_name>::= <identifier>

定义重建的索引名。

描述:

ALTER INDEX 语句重建索引。

例子:

以下例子重建索引 idx。

ALTER INDEX idx REBUILD;

7.1.4     ALTER SEQUENCE
语法:

ALTER SEQUENCE <sequence_name> [<alter_sequence_parameter_list>]

[RESET BY <reset_by_subquery>]

语法元素:

<sequence_name> ::= <identifier>

被修改的序列名。

<alter_sequence_parameter_list> ::= <alter_sequence_parameter>, ...

<alter_sequence_parameter> ::= <sequence_parameter_restart_with>

| <basic_sequence_parameter>

<sequence_parameter_restart_with> ::= RESTART WITH <restart_value>

<basic_sequence_parameter> ::= INCREMENT BY <increment_value>

| MAXVALUE <maximum_value>

| NO MAXVALUE

| MINVALUE <minimum_value>

| NO MINVALUE

| CYCLE

| NO CYCLE

RESTART WITH

序列的起始值。如果你没有指定 RESTART WITH 子句的值,将使用当前序列值。

<restart_value> ::= <integer_literal>

由序列生成器提供的第一个值为 0 至 4611686018427387903 之间的整数。

INCREMENT BY

序列增量值。

<increment_value> ::= <integer_literal>

利用一个整数增加或者减少序列的值。

MAXVALUE

定义序列生成的最大值。

<maximum_value> ::= <integer_literal>

一个正整数定义序列可生成的最大数值,必须为 0 至 4611686018427387903 之间。

NO MAXVALUE

使用 NO MAXVALUE 指令,递增序列的最大值将为 4611686018427387903,递减序列的最大值为-1。

MINVALUE

定义序列生成的最小值。

<minimum_value> ::= <integer_literal>

一个正整数定义序列可生成的最小数值,必须为 0 至 4611686018427387903 之间。

NO MINVALUE

使用 NO MINVALUE 指令,递增序列的最小值将为 1,递减序列的最小值为-

4611686018427387903。

CYCLE

使用 CYCLE 指令,序列在到达最大值或最小值后将会重新开始。

NO CYCLE

使用 NO CYCLE 指令,序列在到达最大值或最小值后将不会重新开始。

<reset_by_subquery> ::= <subquery>

系统重启期间,系统自动执行 RESET BY 语句,并且将用 RESET BY 子查询确定的值重启序列。

关于子查询的详情,请参阅 Subquery。

描述:

ALTER SEQUENCE 语句用来修改序列生成器的参数。

例子:

在下面的例子中,你把序列 seq 的起始序列值改为 2。

ALTER SEQUENCE seq RESTART WITH 2;

在下面的例子中,你把序列 seq 的最大值改为 100,并且没有最小值。

ALTER SEQUENCE seq MAXVALUE 100 NO MINVALUE;

在下面的例子中,你把序列 seq 的增量改为 2,并且限制为"no cycle"。

ALTER SEQUENCE seq INCREMENT BY 2 NO CYCLE;

在下面的例子中,你首先创建表 r,有一列 a。然后你将序列 seq 的 reset-by 子查询修改为列 a 包

含的最大值。

CREATE TABLE r (a INT);

ALTER SEQUENCE seq RESET BY SELECT MAX(a) FROM r;

7.1.5     ALTER TABLE
语法:

ALTER TABLE  [<schema_name>.]<table_name>{

<add_column_clause>

| <drop_column_clause>

| <alter_column_clause>

| <add_primary_key_clause>

| <drop_primary_key_clause>

| <preload_clause>

| <table_conversion_clause>

| <move_clause>

| <add_range_partition_clause>

| <move_partition_clause>

| <drop_range_partition_clause>

| <partition_by_clause>

| <disable_persistent_merge_clause>

| <enable_persistent_merge_clause>

| <enable_delta_log>

| <disable_delta_log>

| <enable_automerge>

| <disable_automerge>

}

 

语法元素:

<add_column_clause> ::= ADD ( <column_definition> [<column_constraint>], ...)

<drop_column_clause> ::= DROP ( <column_name>, ... )

<alter_column_clause> ::= ALTER ( <column_definition> [<column_constraint>], ... )

<column_definition> ::= <column_name> <data_type> [<column_store_data_type>][<ddic_data_type>] [DEFAULT <default_value>] [GENERATED ALWAYS AS <expression>]

<column_constraint> ::= NULL| NOT NULL| UNIQUE [BTREE | CPBTREE]| PRIMARY KEY [BTREE | CPBTREE]

<data_type> ::= DATE | TIME | SECONDDATE | TIMESTAMP | TINYINT | SMALLINT | INTEGER | BIGINT |SMALLDECIMAL | DECIMAL | REAL | DOUBLE| VARCHAR |

                                NVARCHAR | ALPHANUM | SHORTTEXT |VARBINARY | BLOB| CLOB | NCLOB | TEXT

<column_store_data_type> ::= CS_ALPHANUM | CS_INT | CS_FIXED | CS_FLOAT | CS_DOUBLE |CS_DECIMAL_FLOAT | CS_FIXED(p-s, s) | CS_SDFLOAT| CS_STRING |

CS_UNITEDECFLOAT | CS_DATE | CS_TIME| CS_FIXEDSTRING | CS_RAW | CS_DAYDATE | CS_SECONDTIME | CS_LONGDATE | CS_SECONDDATE

<ddic_data_type> ::= DDIC_ACCP | DDIC_ALNM | DDIC_CHAR | DDIC_CDAY | DDIC_CLNT | DDIC_CUKY| DDIC_CURR | DDIC_D16D | DDIC_D34D | DDIC_D16R |

DDIC_D34R | DDIC_D16S | DDIC_D34S| DDIC_DATS | DDIC_DAY | DDIC_DEC | DDIC_FLTP | DDIC_GUID| DDIC_INT1 | DDIC_INT2 | DDIC_INT4 | DDIC_INT8 | DDIC_LANG | DDIC_LCHR | DDIC_MIN|DDIC_MON| DDIC_LRAW | DDIC_NUMC | DDIC_PREC | DDIC_QUAN | DDIC_RAW| DDIC_RSTR | DDIC_SEC | DDIC_SRST | DDIC_SSTR | DDIC_STRG | DDIC_STXT | DDIC_TIMS| DDIC_UNIT| DDIC_UTCM | DDIC_UTCL | DDIC_UTCS | DDIC_TEXT | DDIC_VARC | DDIC_WEEK

<default_value> ::= NULL | <string_literal> | <signed_numeric_literal> | <unsigned_numeric_literal>

 

DEFAULT:DEFAULT 定义了 INSERT 语句没有为列提供值情况下,默认分配的值。

GENERATED ALWAYS AS:指定在运行时生成的列值的表达式。

<column_constraint> ::= NULL| NOT NULL| UNIQUE [BTREE | CPBTREE]| PRIMARY KEY [BTREE | CPBTREE]

NULL | NOT NULL:NOT NULL 禁止列的值为 NULL。如果指定了 NULL,将不被认为是常量,其表示一列可能含有空值,默认为 NULL。

UNIQUE:指定为唯一键的列。一个唯一的复合键指定多个列作为唯一键。有了 unique 约束,多行不能在同一列中具有相同的值。

PRIMARY KEY:主键约束是 NOT NULL 约束和 UNIQUE 约束的组合,其禁止多行在同一列中具有相同的值。

BTREE | CPBTREE:指定索引类型。当列的数据类型为字符串、二进制字符串、十进制数或者约束是一个组合键,或非唯一键,默认的索引类型为 CPBTREE,否则

使用 BTREE。

为了使用 B+-树索引,必须使用 BTREE 关键字;对于 CPB+-树索引,需使用 CPBTREE 关键字。

B+-树是维护排序后的数据进行高效的插入、删除和搜索记录的树。

CPB+-树表示压缩前缀 B+-树,是基于 pkB-tree 树。 CPB+树是一个非常小的索引,因为它使用“部分键”,只是索引节点全部键的一部分。对于更大的键,

CPB+-树展现出比 B+-树更好的性能。

如果省略了索引类型, SAP HANA 数据库将考虑列的数据类型选择合适的索引。

ALTER时,增加一列的长度是可以做到的。当在列式存储中尝试修改列的定义,不会返回错误,因为在数据库中没有做任何的检查。错误可能发生在选择列时,数据不符合新定义的数据类型。 ALTER 仍未遵照数据类型转换规则。

将 NOT NULL 约束添加到已存在的列是可以的,如果表为空或者表有数据时定义了默认值

 

<add_primary_key_clause> ::= ADD [CONSTRAINT <constraint_name>] PRIMARY KEY( <column_name>, ... )

ADD PRIMARY KEY:增加一列主键。

PRIMARY KEY:主键约束是 NOT NULL 约束和 UNIQUE 约束的组合,其禁止多行在同一列中具有相同的值。

CONSTRAINT:指定约束名。

<drop_primary_key_clause> ::= DROP PRIMARY KEY

DROP PRIMARY KEY:删除主键约束。

<preload_clause> ::= PRELOAD ALL | PRELOAD ( <column_name> ) | PRELOAD NONE

PRELOAD:设置/移除给定表或列的预载标记。 PRELOAD ALL 为表中所有列设置预载标记, PRELOAD( <column_name> )为指定的列设置标记, PRELOAD NONE 移除

所有列的标记。其结果是这些表在索引服务器启动后自动加载至内存中。预载标记的当前状态在系统表 TABLES,列 PRELOAD 中可见, 可能值为('FULL', 'PARTIALLY',

'NO');在系统表 TABLE_COLUMNS,列 PRELOAD,可能值为('TRUE','FALSE')。

<table_conversion_clause> ::= [ALTER TYPE] {ROW [THREADS <number_of_threads>] | COLUMN[THREADS <number_of_threads> [BATCH <batch_size>]]}

ALTER TYPE ROW | COLUMN:该命令用于将表存储类型从行转换为列或从列转换为行。

THREADS <number_of_threads>:指定进行表转换的并行线程数。线程数目的最佳值应设置为可用的 CPU 内核的数量。

Default:默认值为 param_sql_table_conversion_parallelism,即在 ndexserver.ini 文件中定义的 CPU内核数。

BATCH <batch_size>:指定批插入的行数,默认值为最佳值 2,000,000。插入表操作在每个<batch_size>记录插入后立即提交,可以减少内存消耗。 BATCH 可选项只

可以在表 从行转换为列时使用。然而,大于 2,000,000的批大小可能导致高内存消耗,因此不建议修改该值。通过复制现有的表中的列和数据,可以从现有的表

创建一个不同存储类型的新表。该命令用来把表从行转换为列或从列转换为行。如果源表是行式存储,则新建的表为列式存储。

<move_clause> ::= MOVE [PARTITION <partition_number>] TO [LOCATION ]<host_port> [PHYSICAL] |MOVE [PARTITION <partition_number>] PHYSICAL

MOVE 将表移动至分布式环境中的另一个位置。 端口号是内部索引服务器的端口号, 3xx03。如果你有一个分区表,你可以通过指定可选的分区号只移动个别部

分,移动分区表时,没有指定分区号会导致错误。

PHYSICAL 关键字只适用列式存储表。行式存储表总是物理移动。如果指定了可选关键字 PHYSICAL,持久存储立即移动至目标主机。否则,此举将创建一个新主机

里面的持久层链接指向旧主机持久层。该链接如果没有 TO<host_port>部分,将在下次合并或者移            动中删除。PHYSICAL 移动操作没有指定 TO <host_port>时,将移

除从上次移动中仍然存在的持久层链接。

LOCATION 仅支持向后兼容

<add_range_partition_clause> ::= ADD  PARTITION <lower_value> <= VALUES < <upper_value>| PARTITION <value_or_values> = <target_value>| PARTITION OTHERS

ADD PARTITION:为一个分区表添加分区,使用 RANGE, HASH RANGE, ROUNDROBIN RANGE 关键字。当添加分区至一张按范围分区的表时,如果需要的话,可以对

其余分区进行重新分区。

<drop_range_partition_clause> ::= DROP  PARTITION <lower_value> <= VALUES < <upper_value>| PARTITION <value_or_values> = <target_value>| PARTITION OTHERS

DROP PARTITION:删除根据 RANGE, HASH RANGE, ROUNDROBIN RANGE 分区的表的分区。

<partition_clause> ::= PARTITION BY <hash_partition> [,<range_partition> | ,<hash_partition>]| PARTITION BY <range_partition>| PARTITION BY <roundrobin_partition>

[,<range_partition>]

<hash_partition> ::=HASH (<partition_expression>[, ...]) PARTITIONS { <num_partitions> |GET_NUM_SERVERS() }

<range_partition> ::= RANGE ( <partition_expression> ) ( <range_spec> )

<roundrobin_partition> ::= ROUNDROBIN PARTITIONS {<num_partitions> |GET_NUM_SERVERS()}

<range_spec> ::= {<from_to_spec> | <single_spec>[,...] } [, PARTITION OTHERS]

<from_to_spec> ::= PARTITION <lower_value> <= VALUES < <upper_value>

<single_spec> ::= PARTITION VALUE <single_value>

<partition_expression> ::= <column_name>| YEAR(<column_name>) | MONTH(<column_name>)

PARTITION BY:使用 RANGE, HASH RANGE, ROUNDROBIN RANGE 对表进行分区。关于表分区自居,请参见 CREATE TABLE。

<merge_partition_clause> ::= MERGE PARTITIONS

MERGE PARTITIONS:合并分区表的所有部分至非分区表。

<disable_persistent_merge_clause> ::= DISABLE PERSISTENT MERGE

DISABLE PERSISTENT MERGE:指导合并管理器对于给定表,使用内存进行合并而非持久合并。

<enable_persistent_merge_clause> ::= ENABLE PERSISTENT MERGE

ENABLE PERSISTENT MERGE:指导合并管理器对于给定表使用持久合并。

<enable_delta_log> ::= ENABLE DELTA LOG

启动表日志记录。启用之后,你必须执行一个保存点以确保所有的数据都保存,并且你必须执行数据备份,否则你不能恢复这些数据。

<enable_delta_log> ::= DISABLE DELTA LOG

DISABLE DELTA LOG:禁用表日志记录。如果禁用,不会记录该表的日志。当完成一个保存点对于该表的修改只会写到数据域,这会导致当索引服务器终止时,提

交的事务丢失。

仅在初次加载中使用该命令!

<enable_delta_log> ::= ENABLE AUTOMERGE

指导合并管理器处理表。

<enable_delta_log> ::= DISABLE AUTOMERGE

DISABLE AUTOMERGE:指导合并管理器忽略该表。

例子:

表 t 已创建,列 b 的默认值设为 10。

CREATETABLE t (a INT, b INT);

ALTERTABLE t ALTER (b INTDEFAULT 10);

列 c 添加至表 t。

ALTERTABLE t ADD (c NVARCHAR(10) DEFAULT'NCHAR');

创建表 t 的主键约束 prim_key。

ALTERTABLE t ADDCONSTRAINT prim_key PRIMARYKEY (a, b);

表 t 类型转换为列式 (COLUMN)。

ALTERTABLE t COLUMN;

设置列 b 和 c 的预载标记

ALTERTABLE t PRELOAD (b, c);

表 t 使用 RANGE 分区,并且添加另一分区。

ALTERTABLE t PARTITIONBY RANGE (a) (PARTITIONVALUE = 1, PARTITION OTHERS);

ALTERTABLE t ADDPARTITION 2 <= VALUES < 10;

表 t 的会话类型改为 HISTORY

ALTERTABLE t CREATEHISTORY;

禁用表 t 的日志记录。

ALTERTABLE t DISABLEDELTALOG;

7.1.6     CREATE AUDIT POLICY
语法:

CREATE AUDIT POLICY <policy_name> AUDITING <audit_status_clause> <audit_action_list> LEVEL <audit_level>

语法元素:

<audit_status_clause> ::= SUCCESSFUL | UNSUCCESSFUL | ALL

<audit_action_list> ::= <audit_action_name>[,<audit_action_name>]...

<audit_action_name> ::=GRANT PRIVILEGE | REVOKE PRIVILEGE| GRANT STRUCTURED PRIVILEGE | REVOKE STRUCTURED PRIVILEGE| GRANT ROLE | REVOKE ROLE| GRANT

ANY | REVOKE ANY| CREATE USER | DROP USER| CREATE ROLE | DROP ROLE| ENABLE AUDIT POLICY | DISABLE AUDIT POLICY| CREATE STRUCTURED PRIVILEGE| DROP STRUCTURED PRIVILEGE| ALTER STRUCTURED PRIVILEGE| CONNECT| SYSTEM CONFIGURATION CHANGE| SET SYSTEM LICENSE| UNSET SYSTEM LICENSE

<audit_level> ::=EMERGENCY| ALERT| CRITICAL| WARNING| INFO

描述:

CREATE AUDIT POLICY 语句创建新的审计策略。该审计策略可以稍后启动,并将导致指定的审计活动发生的审计。

只有拥有系统权限 AUDIT ADMIN 用户才可以新建审计策略。

指定的审计策略名必须和已有的审计策略名不同。

审计策略定义将被审计的审计活动。现有的审计策略需要被激活,从而进行审计。

<audit_status_clause>定义, 成功或不成功或执行指定的审计活动进行审核。

以下的审计活动是可供使用的。它们被分在不同的组里。一组审计活动可以组合成一个审计策略,不同组的审计行动不能组合成审计策略。

GRANT PRIVILEGE                                           1              审计授予用户或角色的权限
REVOKE PRIVILEGE                                          1              审计撤销用户或角色的权限
GRANT STRUCTURED PRIVILEGE               1              审计授予用户的结构/分析权限
REVOKE STRUCTURED PRIVILEGE              1              审计撤销用户的结构/分析权限
GRANT ROLE                                                      1              审计授予用户或角色的角色
REVOKE ROLE                                                    1              审计撤销用户或角色的角色
GRANT ANY                                                        1              审计授予用户或角色的权限、结构/分析权限或角色
REVOKE ANY                                                      1              审计撤销用户或角色的权限、结构/分析权限或角色
CREATE USER                                                     2              审计用户创建
DROP USER                                                         2             审计用户删除
CREATE ROLE                                                     2              审计角色创建
DROP ROLE                                                         2              审计角色删除
CONNECT                                                            3              审计连接到数据库的用户
SYSTEM CONFIGURATION CHANGE         4              审计系统配置的更改(e.g. INIFILE)
ENABLE AUDIT POLICY                                   5              审计审核策略激活
DISABLE AUDIT POLICY                                  5             审计审核策略停用
CREATE STRUCTURED PRIVILEGE               6             审计结构化/分析权限创建
DROP STRUCTURED PRIVILEGE                  6              审计结构化/

ALTER STRUCTURED PRIVILEGE                  6              审计结构化/分析权限更改
SET SYSTEM LICENSE                                       7              审计许可证安装
UNSET SYSTEM LICENSE                                7              审计许可证删除

每一个审计分配分配至审计级别,可能的值按照重要性递减有:EMERGENCY, ALERT, CRITICAL, WARNING, INFO

为了使得审计活动发生,审计策略必须建立并启动, global_auditing_state(见下文)必须设置为true。

配置参数:

目前,审计的配置参数存储在 global.ini,部分审计配置如下:

global_auditing_state ( 'true' / 'false' )激活/关闭所有审计,无论有多少审计策略可用和启动。默认为 false,代表没有审计会发生。

default_audit_trail_type ( 'SYSLOGPROTOCOL' / 'CSVTEXTFILE' )定义如何存储审计结果。

SYSLOGPROTOCOL 为默认值。

CSVTEXTFILE 应只用于测试目的。

default_audit_trail_path 指定 存储文件的位置, CSVTEXTFILE 已经选定的情况下。

对于所有的配置参数,可以在视图 M_INIFILE_CONTENTS 中选择,如果当前用户具有这样做所需的权限。但是目前这些参数只有在被显式设置后才可见。这意味着,它们将对新安装的数据库实例不可见。

系统和监控视图

AUDIT_POLICY:显式所有审计策略和其状态

M_INIFILE_CONTENTS:显示审计有关的配置参数

只有数据库用户具有 CATALOG READ, DATA ADMIN 或 INIFILE ADMIN 权限可以在视图M_INIFILE_CONTENTS 查看任意信息,对于其他用户,该视图为空。

例子

新建的名为 priv_audit 的审计策略将审计有关成功授予和撤销权限和角色的命令,该审计策略有中等审计级别 CRITICAL.。

该策略必须显式启动(见 alter_audit_policy),使得审计策略的审计发生。

CREATEAUDIT POLICY priv_audit AUDITING SUCCESSFUL GRANT PRIVILEGE, REVOKE PRIVILEGE, GRANT ROLE, REVOKE ROLE LEVEL CRITICAL;

7.1.7     CREATE FULLTEXT INDEX
语法:

CREATE FULLTEXT INDEX <index_name> ON <tableref> '(' <column_name> ')' [<fulltext_parameter_list>]

定义全文索引名:

<fulltext_parameter_list> ::= <fulltext_parameter> [, ...]

<fulltext_parameter> ::= LANGUAGE COLUMN <column_name>

| LANGUAGE DETECTION '(' <string_literal_list> ')'

| MIME TYPE COLUMN <column_name>

| <change_tracking_elem>

| FUZZY SEARCH INDEX <on_off>

| PHRASE INDEX RATIO <on_off>

| CONFIGURATION <string_literal>

| SEARCH ONLY <on_off>

| FAST PREPROCESS <on_off>

<on_off> ::= ON | OFF

LANGUAGE COLUMN:指定文件语言的列

LANGUAGE DETECTION:语言检测设置的语言集合。

MIME TYPE COLUMN:指定文件 mime-type 的列

FUZZY SEARCH INDEX:指定是否使用模糊搜索

PHRASE INDEX RATIO:指定短语索引比率的百分比,值必须为 0.0 和 1.0 之间。

CONFIGURATION:自定义配置文件的文本分析路径。

SEARCH ONLY:如果设为 ON,将不存储原始文件内容。

FAST PREPROCESS:如果设为 ON,将使用快速处理,例如语言搜索将不可用。

<change_tracking_elem> ::= SYNC[HRONOUS]| ASYNC[HRONOUS] [FLUSH [QUEUE]<flush_queue_elem>]

SYNC:指定是否创建同步全文索引

ASYNC:指定是否创建异步全文索引

<flush_queue_elem> ::= EVERY <integer_literal> MINUTES| AFTER <integer_literal> DOCUMENTS| EVERY <integer_literal> MINUTES OR AFTER <integer_literal> DOCUMENTS

指定如果使用异步索引,更新全文索引的时机。

描述:

CREATE FULLTEXT INDEX 语句对给定表创建显式全文索引。

例子:

CREATE FULLTEXT INDEX i1 ON A(C) FUZZY SEARCH INDEXOFF

SYNC

LANGUAGE DETECTION ('EN','DE','KR')

上面的例子在表 A 的列 C 创建名为‘i1’的全文索引,未使用模糊搜索索引, 语言检测设置的语言集合由'EN','DE' 和 'KR'组成。

7.1.8     CREATE INDEX
语法:

CREATE [UNIQUE] [BTREE | CPBTREE] INDEX  [<schema_name>.]<index_name> ON <table_name>(<column_name_order>, ...) [ASC | DESC]

语法元素:

<column_name_order> ::= <column_name> [ASC | DESC]

UNIQUE:用来创建唯一性索引。当创建索引和记录添加到表中将进行重复检查。

BTREE | CPBTREE:用来选择使用的索引类型。当列的数据类型为字符串、二进制字符串、十进制数或者约束是一个组合键,或非唯一键,默认的索引类型为 CPBTREE,否则使用 BTREE。

为了使用 B+-树索引,必须使用 BTREE 关键字;对于 CPB+-树索引,需使用 CPBTREE 关键字。

B+-树是维护排序后的数据进行高效的插入、删除和搜索记录的树。

CPB+-树表示压缩前缀 B+-树,是基于 pkB-tree 树。 CPB+树是一个非常小的索引,因为它使用“部分键”,只是索引节点全部键的一部分。对于更大的键, CPB+-树展现出比 B+-树更好的性能。

如果省略了索引类型, SAP HANA 数据库将考虑列的数据类型选择合适的索引。

ASC | DESC:指定以递增或递减方式创建索引。

这些关键字只能在 btree 索引使用,并且对每一列只能使用一次。

描述:

CREATE INDEX 语句创建索引。

例子:

表 t 创建后,以递增方式对表 t 的 b 列创建 CBPTREE 索引 idx。

CREATETABLE t (a INT, b NVARCHAR(10), c NVARCHAR(20));

CREATEINDEX idx ON t(b);

以递增方式对表 t 的 a 列创建 CBPTREE 索引 idx,以递减顺序对 b 列创建:

CREATE CPBTREE INDEX idx1 ON t(a, b DESC);

以递减方式对表 t 的 a 列和 c 列创建 CPBTREE 索引 idx2。

CREATEINDEX idx2 ON t(a, c) DESC;

以递增顺序对表 t 的 b 列和 c 列创建唯一性 CPBTREE 索引 idx3。

CREATEUNIQUEINDEX idx3 ON t(b, c);

以递增顺序对表 t 的 a 列创建唯一性 BTREE 索引 idx4。

CREATEUNIQUEINDEX idx4 ON t(a);

7.1.9     CREATE SCHEMA
语法:

CREATE SCHEMA <schema_name> [OWNED BY <user_name>]

OWNED BY:指定Schema所有者名字。如果省略,当前用户将为Schema所有者。

描述:

CREATE SCHEMA 语句在当前数据库创建Schema。

例子:

CREATESCHEMA my_schema OWNED BYsystem;

7.1.10   CREATE SEQUENCE
语法:

CREATE SEQUENCE <sequence_name> [<common_sequence_parameter_list>] [RESET BY <subquery>]

语法元素:

<common_sequence_parameter_list> ::= <common_sequence_parameter>, ...

<common_sequence_parameter> ::= START WITH n | <basic_sequence_parameter>

<basic_sequence_parameter> ::= INCREMENT BY n| MAXVALUE n| NO MAXVALUE| MINVALUE n| NO MINVALUE| CYCLE| NO CYCLE

INCREMENT BY:定义上个分配值递增到下一个序列值的量(即递增递减间隔值),默认值为 1。指定一个负的值来生成一个递减的序列。 INCREMENT BY 值为 0,将返回错误。

START WITH:定义起始序列值。如果未定义 START WITH 子句值,递增序列将使用 MINVALUE,递减序列将使用MAXVALUE。

MAXVALUE:定义序列可生成的最大数值,必须为 0 至 4611686018427387903 之间。

NO MAXVALUE:使用 NO MAXVALUE 指令,递增序列的最大值将为 4611686018427387903,递减序列的最大值为-1。

MINVALUE:定义序列可生成的最小数值,必须为 0 至 4611686018427387903 之间。

NO MINVALUE:使用 NO MINVALUE 指令,递增序列的最小值将为 1,递减序列的最小值为-4611686018427387903。

CYCLE:使用 CYCLE 指令,序列在到达最大值或最小值后将会重新开始。

NO CYCLE:使用 NO CYCLE 指令,序列在到达最大值或最小值后将不会重新开始。

RESET BY:系统重启期间,系统自动执行 RESET BY 语句,并且将用 RESET BY 子查询确定的值重启序列。

如果未指定 RESET BY,序列值将持久地存储在数据库中。在数据库重启过程中,序列的下一个值将由已保存的序列值生成。

描述:

CREATE SEQUENCE 语句用来创建序列。

序列用来为多个用户生成唯一整数。 CURRVAL 用来获取序列的当前值,NEXTVAL 则用来获取序列的下一个值。 CURRVAL 只有在会话中调用 NEXTVAL 才有效。

例子:

例子 1:

序列 seq 已创建,使用 CURRVAL 和 NEXTVAL 从序列中读取值。

CREATESEQUENCE seq START WITH 11;

NEXTVAL 返回 11:

SELECT seq.NEXTVAL FROM DUMMY;--11

CURRVAL 返回 11:

SELECT seq.CURRVAL FROM DUMMY;--11

例子 2:

如果序列用来在表 R 的 A 列上创建唯一键,在数据库重启后,通过自动分配列 A 的最大值到序列,创建一个唯一键值,语句如下:

CREATETABLE r (a INT);

CREATESEQUENCE s RESETBYSELECTIFNULL(MAX(a), 0) + 1 FROM r;

SELECT s.NEXTVAL FROM DUMMY;--1

7.1.11   CREATE SYNONYM
语法:

CREATE [PUBLIC] SYNONYM <synonym_name> FOR <object_name>

语法元素:

<object_name> ::= <table_name>| <view_name>| <procedure_name>| <sequence_name>

描述:

CREATE SYNONYM 为表、视图、存储过程或者序列创建备用名称。

你可以使用同义词把函数和存储过程重新指向不同的表、视图或者序列,而不需要重写函数或者过程。

可选项 PUBLIC 允许创建公用同义词。任何用户可以访问公用同义词,但只有拥有基本对象合适权限的用户可以访问基本对象。

例子:

CREATESYNONYM t_synonym FOR t;

7.1.12   CREATE TABLE
语法:

CREATE [<table_type>] TABLE [<schema_name>.]<table_name> <table_contents_source>[<logging_option> | <auto_merge_option> | <partition_clause> | <location_clause>]

语法元素:

<table_type> ::= COLUMN| ROW| HISTORY COLUMN| GLOBAL TEMPORARY| LOCAL TEMPORARY

COLUMN, ROW:如果大多数的访问是通过大量元组,而只选择少数几个属性,应使用基于列的存储。如果大多数访问选择一些记录的全部属性,使用基于行的存储是最好的。 SAP HANA 数据库使用组合启用两种方式的的存储和解释。你可以为每张表指定组织类型,默认值为 ROW。

HISTORY COLUMN:利用特殊的事务会话类型称为’HISTORY’创建表。具有会话类型’HISTORY’的表支持“时间旅行”, 对历史状态的数据库查询的执行是可能的。

时间旅行可以以如下方式完成:

会话级别时间旅行:

SET HISTORY SESSION TO UTCTIMESTAMP = <utc_timestamp>

SET HISTORY SESSION TO COMMIT ID = <commit_id>

<utc_timestamp> ::= <string_literal>

 <commit_id> ::= <unsigned_integer>

数据库会话可以设置回到一个特定时间点。该语句的 COMMIT ID 变量接受 commitid 作为参数。commitid 参数的值必须存在系统表 SYS.TRANSACTION_HISTORY 的 COMMIT_ID 列,否则将抛出异常。 COMMIT_ID 在使用用户定义的快照时是有用的。用户自定义的快照可以通过存储在提交阶段分配至事务的 commitid 来获得。 Commitid 可以通过在事务提交后执行以下查询来读取:

SELECT LAST_COMMIT_ID FROM M_TRANSACTIONS WHERE CONNECTION_ID = CURRENT_CONNECTION;

该语句的 TIMESTAMP 变量接受时间戳作为参数。在系统内部,时间戳用来在系统表SYS.TRANSACTION_HISTORY,commit_time 接近给定的时间戳的地方,查询一对(commit_time,commit_id),准确的说,选择最大 COMMIT_TIME 小于等于给定时间戳的对;如果没有找到这样的对,将会抛出异常。然后会话将使用 COMMIT_ID 变量确定的 commit-id 恢复。 要终止恢复会话切换到当前会话中,必须在数据库连接上执行明确的 COMMIT 或 ROLLBACK。

语句级别时间旅行:

<subquery> AS OF UTCTIMESTAMP <utc_timestamp>

<subquery> AS OF COMMIT ID <commit_id>

为了能使 commitid 与提交时间关联,需维护系统表 SYS.TRANSACTION_HISTORY,存储每个为历史表提交数据的事务的额外信息。有关设置会话级别时间旅行的详细信息,请参阅 SET HISTORY SESSION,关于<subquery>的信息,请参阅 Subquery。

注意:

当会话恢复时,自动提交必须关闭(否则会抛出包含相应错误消息的异常)。

非历史表在恢复会话中总显示其当前快照。

只有数据查询语句(select)可以在恢复会话中使用。

历史表必须有主键。

会话类型可以通过系统表 SYS.TABLES 的 SESSION_TYPE 列检查。

GLOBAL TEMPORARY:

表定义全局可见,但数据只在当前会话中可见。表在会话结束后截断。

全局临时表的元数据是持久的,表示该元数据一直存在直到表被删除,元数据在会话间共享。临时表中的数据是会话特定的,代表只有全局临时表的所有者才允许插入、读取、删除数据,存在于会话持续期间,并且当会话结束时,全局临时表中的数据会自动删除。全局临时表只有当表中没有任何数据才能被删除。全局临时表支持的操作:

1. Create without a primary key

2. Rename table

3. Rename column

4. Truncate

5. Drop

6. Create or Drop view on top of global temporary table

7. Create synonym

8. Select

9. Select into or Insert

10. Delete

11. Update

12. Upsert or Replace

 

LOCAL TEMPORARY:

表的定义和数据只在当前会话可见,该表在会话结束时被截断。

元数据在会话间共享,并且是会话特定的,代表只有本地临时表的所有者才允许查看。临时表中的数据是会话特定的,代表只有本地临时表的所有者才允许插入、读取、删除数据,存在于会话持续期间,并且当会话结束时,本地临时表中的数据会自动删除。

本地临时表支持的操作:

1. Create without a primary key

2. Truncate

3. Drop

4. Select

5. Select into or Insert

6. Delete

7. Update

8. Upsert or Replace

 

<table_contents_source> ::= (<table_element>, ...)| <like_table_clause> [WITH [NO] DATA]| [(<column_name>, ...)] <as_table_subquery> [WITH [NO] DATA]]

<table_element> ::= <column_definition> [<column_constraint>]| <table_constraint> (<column_name>, ... )

<column_definition> ::= <column_name> <data_type> [<column_store_data_type>] [<ddic_data_type>][DEFAULT <default_value>] [GENERATED ALWAYS AS

<expression>]

<data_type> ::= DATE | TIME | SECONDDATE | TIMESTAMP | TINYINT | SMALLINT | INTEGER | BIGINT |SMALLDECIMAL | DECIMAL | REAL | DOUBLE|

VARCHAR | NVARCHAR | ALPHANUM | SHORTTEXT |VARBINARY |BLOB | CLOB | NCLOB | TEXT

<column_store_data_type> ::= S_ALPHANUM | CS_INT | CS_FIXED | CS_FLOAT| CS_DOUBLE |CS_DECIMAL_FLOAT | CS_FIXED(p-s, s) | CS_SDFLOAT|

CS_STRING | CS_UNITEDECFLOAT | CS_DATE |CS_TIME | CS_FIXEDSTRING | CS_RAW | CS_DAYDATE | CS_SECONDTIME | CS_LONGDATE |CS_SECONDDATE

<ddic_data_type> ::= DDIC_ACCP | DDIC_ALNM | DDIC_CHAR | DDIC_CDAY | DDIC_CLNT | DDIC_CUKY| DDIC_CURR | DDIC_D16D | DDIC_D34D | DIC_D16R

| DDIC_D34R | DDIC_D16S | DDIC_D34S| DDIC_DATS | DDIC_DAY | DDIC_DEC | DDIC_FLTP | DDIC_GUID | DDIC_INT1 | DDIC_INT2 | DDIC_INT4| DDIC_INT8 | DDIC_LANG | DDIC_LCHR | DDIC_MIN | DDIC_MON| DDIC_LRAW | DDIC_NUMC |DDIC_PREC |DDIC_QUAN | DDIC_RAW | DDIC_RSTR | DDIC_SEC | DDIC_SRST | DDIC_SSTR |DDIC_STRG | DDIC_STXT | DDIC_TIMS | DDIC_UNIT| DDIC_UTCM | DDIC_UTCL | DDIC_UTCS |DDIC_TEXT | DDIC_VARC | DDIC_WEEK

<default_value> ::= NULL | <string_literal> | <signed_numeric_literal>| <unsigned_numeric_literal>

DEFAULT:DEFAULT 定义了 INSERT 语句没有为列提供值情况下,默认分配的值。

GENERATED ALWAYS AS:指定在运行时生成的列值的表达式。

<column_constraint> ::= NULL| NOT NULL| UNIQUE [BTREE | CPBTREE]| PRIMARY KEY [BTREE | CPBTREE]

NULL | NOT NULL:NOT NULL 禁止列的值为 NULL。如果指定了 NULL,将不被认为是常量,其表示一列可能含有空值,默认为 NULL。

UNIQUE:指定为唯一键的列。一个唯一的复合键指定多个列作为唯一键。有了 unique 约束,多行不能在同一列中具有相同的值。

PRIMARY KEY:主键约束是 NOT NULL 约束和 UNIQUE 约束的组合,其禁止多行在同一列中具有相同的值。

BTREE | CPBTREE:指定索引类型。当列的数据类型为字符串、二进制字符串、十进制数或者约束是一个组合键,或非唯一键,默认的索引类型为 PBTREE,

否则使用 BTREE。为了使用 B+-树索引,必须使用 BTREE 关键字;对于 CPB+-树索引,需使用 CPBTREE 关键字。B+-树是维护排序后的数据进行高效的插入、删除和搜索记录的树。CPB+-树表示压缩前缀 B+-树,是基于 pkB-tree 树。 CPB+树是一个非常小的索引,因为它使用“部分键”,只是索引节点全部键的一部分。对于更大的键, CPB+-树展现出比 B+-树更好的性能。如果省略了索引类型, SAP HANA 数据库将考虑列的数据类型选择合适的索引。

<table_constraint> ::= UNIQUE [BTREE | CPBTREE]| PRIMARY KEY [BTREE | CPBTREE]

定义了表约束可以使用在表的一列或者多列上。

<like_table_clause> ::= LIKE   <table_name>

创建与 like_table_name 定义相同的表。表中所有列的定义和默认值拷贝自 like_table_name。当提供了可选项 WITH DATA,数据将从指定的表填充,不过,默认值为 WITH NO DATA。

<as_table_subquery> ::= AS '(<subquery>)

创建表并且用<subquery>计算的数据填充。使用该子句只拷贝 NOT NULL 约束。如果指定了column_names,该指定的 column_names 将覆盖<subquery>中的列名。WITH [NO] DATA 指定数据拷贝自<subquery> 或 <like_table_clause>。

<logging_option> ::= LOGGING| NO LOGGING [RETENTION <retention_period>]

<retention_period> ::= <unsigned_integer>

LOGGING | NO LOGGING:LOGGING (默认值)指定激活记录表日志。NO LOGGING 指定停用记录表日志。一张 NO LOGGING 表意味表定义是持久的且全局可见的,数据则为临时和全局的。

RETENTION:指定以秒为单位,NO LOGGING 列式表的保留时间。在指定的保留期限已过,如果使用物理内存的主机达到 80%,上述表将被删除。

<auto_merge_option> ::= AUTO MERGE | NO AUTO MERGE

AUTO MERGE | NO AUTO MERGE:AUTO MERGE (默认值)指定触发自动增量合并。

<partition_clause> ::= PARTITION BY <hash_partition> [, <range_partition> | , <hash_partition>]| PARTITION BY <range_partition>| PARTITION BY <roundrobin_partition>

                                [,<range_partition>]

<hash_partition> ::= HASH (<partition_expression> [, ...]) PARTITIONS {<num_partitions> |GET_NUM_SERVERS()}

<range_partition> ::= RANGE (<partition_expression>) (<range_spec>, ...)

<roundrobin_partition> ::= ROUNDROBIN PARTITIONS {<num_partitions> | GET_NUM_SERVERS()} [,<range_partition>]

<range_spec> ::= {<from_to_spec> | <single_spec>} [, ...] [, PARTITION OTHERS]

<from_to_spec> ::= PARTITION <lower_value> <= VALUES < <upper_value>

<single_spec> ::= PARTITION VALUE <target_value>

<lower_value> ::= <string_literal> | <numeric_literal>

<upper_value> ::= <string_literal> | <numeric_literal>

<target_value> ::= <string_literal> | <numeric_literal>

<partition_expression> ::= <column_name> | YEAR(<column_name>) | MONTH(<column_name>)

<num_partitions> ::= <unsigned_integer>

GET_NUM_SERVERS()函数返回服务器数量。

PARTITION OTHERS 表示分区定义中未指定的其余值成为一个分区。

确定分区创建所在的索引服务器是可能的。如果你指定了 LOCATION,在这些实例中循环创建分区。列表中的重复项将被移除。如果你在分区定义中精确指定实例数为分区数,则每个分区将分配至列表中各自实例。所有索引列表中的服务器必须属于同一个实例。如果指定了 no location,将随机创建分区。如果分区数与服务器数匹配-例如使用

GET_NUM_SERVERS()-可以确保多个 CREATE TABLE 调用以同样的方式分配分区。对于多级别分区的情况,其适用于第一级的分区数。这个机制是很有用的,如果创建彼此语义相关的多张表。

<location_clause> ::= AT [LOCATION] {'<host>:<port>' | ('<host>:<port>', ...)}

AT LOCATION:表可以创建在 host:port 指定的位置,位置列表可以在创建分配至多个实例的分区表时定义。当位置列表没有提供<partition_clause>,表将创建至指定的第一个位置中。如果没有提供位置信息,表将自动分配到一个节点中。此选项可用于在分布式环境中的行存储和列存储表

描述:

CREATE TABLE 创建一张表。表中未填充数据,除了当<as_table_subquery> 或 <like_table_clause>和WITH DATA 可选项一起使用。

例子:

创建了表 A,整数列 A 和 B。列 A 具有主键约束。

CREATETABLE A (A INTPRIMARYKEY, B INT);

创建了分区表 P1,日期列 U。列 U 具有主键约束并且作为 RANGE 分区列使用。

CREATECOLUMNTABLE P1 (U DATEPRIMARYKEY) PARTITIONBY RANGE (U) (PARTITION'2010-02-03'<= VALUES < '2011-01-01', PARTITIONVALUE = '2011-05-01');

创建了分区表 P2,整数列 I,J 和 K。列 I,J 组成键约束,并且作为哈希分区列使用。列 K 则为子哈希分区列。

CREATECOLUMNTABLE P2 (I INT, J INT, K INT, PRIMARYKEY(I, J)) PARTITIONBY HASH (I, J) PARTITIONS 2, HASH (K) PARTITIONS 2;

创建表 C1,与表 A 的定义相同,记录也相同。

CREATECOLUMNTABLE C1 LIKE A WITH DATA;

创建表 C2,与表 A 的列数据类型和 NOT NULL 约束相同。表 C2 没有任何数据。

CREATETABLE C2 AS (SELECT * FROM A) WITHNO DATA;

7.1.13   CREATE TRIGGER
语法:

CREATE TRIGGER <trigger_name> <trigger_action_time> <trigger_event> ON <subject_table_name> [REFERENCING <transition_list>][<for_each_row>]

BEGIN

[<trigger_decl_list>]

[<proc_handler_list>]

<trigger_stmt_list>

END

语法元素:

<trigger_name> ::= <identifier> 你创建的触发器名称。

<subject_table_name> ::= <identifier> 你创建的触发器所在表的名称。

<trigger_action_time> ::= BEFORE | AFTER  指定触发动作发生的 时间。

BEFORE:操作主题表之前执行触发。

AFTER:操作主题表之后执行触发。

<trigger_event> ::= INSERT | DELETE | UPDATE  定义激活触发器活动的数据修改命令

<transition_list> ::= <transition> | <transition_list> , <transition>

<transition> ::= <trigger_transition_old_or_new> <trigger_transition_var_or_table> <trans_var_name>|<trigger_transition_old_or_new> <trigger_transition_var_or_table> AS <trans_var_name>

当声明了 触发器转变变量,触发器可以访问 DML 正在修改的记录。

当执行了行级别触发器, <trans_var_name>.<column_name>代表触发器正在修改的记录的相应列。

这里, <column_name>为主题表的列名。参见转换变量的例子。

<trigger_transition_old_or_new> ::= OLD | NEW

<trigger_transition_var_or_table> ::= ROW

OLD

你可以访问触发器 DML 的旧记录,取而代之的是更新的旧记录或删除的旧记录。

UPDATE 触发器和 DELETE 触发器可以有 OLD ROW 事务变量。

NEW

你可以访问触发器 DML 的新记录,取而代之的是插入的新记录或更新的新记录。

UPDATE 触发器和 DELETE 触发器可以有 NEW ROW 事务变量。

只支持事务变量。

事务表不被支持。

如果你将’TABLE’作为<trigger_transition_var_or_table>,你将看到不支持功能错误。

<for_each_row> ::= FOR EACH ROW

触发器将以逐行方式调用。

默认模式为执行行级别触发器,没有 FOR EACH ROW 语法。

目前,逐语句触发不被支持。

<trigger_decl_list> ::= DECLARE <trigger_decl>| <trigger_decl_list> DECLARE <trigger_decl>

<trigger_decl> ::= <trigger_var_decl> | <trigger_condition_decl>

<trigger_var_decl> ::= <var_name> CONSTANT <data_type> [<not_null>] [<trigger_default_assign>] ;| <var_name> <data_type> [NOT NULL] [<trigger_default_assign>] ;

<data_type> ::= DATE | TIME | SECONDDATE | TIMESTAMP | TINYINT | SMALLINT | INTEGER| BIGINT |SMALLDECIMAL | DECIMAL | REAL | DOUBLE| VARCHAR | NVARCHAR | ALPHANUM | SHORTTEXT|VARBINARY | BLOB | CLOB| NCLOB | TEXT

<trigger_default_assign> ::= DEFAULT <expression>| := <expression>

<trigger_condition_decl> ::= <condition_name> CONDITION ;| <condition_name> CONDITION FOR <sql_error_code> ;

<sql_error_code> ::= SQL_ERROR_CODE <int_const>

trigger_decl_list

你可以声明触发器变量或者条件。

声明的变量可以在标量赋值中使用或者在 SQL 语句触发中引用。

声明的条件名可以在异常处理中引用。

CONSTANT

当指定了 CONSTANT 关键字,你不可以在触发器执行时修改变量。

<proc_handler_list> ::= <proc_handler>| <proc_handler_list> <proc_handler>

<proc_handler> ::= DECLARE EXIT HANDLER FOR <proc_condition_value_list> <trigger_stmt>

<proc_condition_value_list> ::= <proc_condition_value>| <proc_condition_value_list> , <proc_condition_value>

<proc_condition_value> ::= SQLEXCEPTION
| SQLWARNING
| <sql_error_code>
| <condition_name>
异常处理可以声明捕捉已存的 SQL 异常,特定的错误代码或者条件变量声明的条件名称。
<trigger_stmt_list> ::= <trigger_stmt>| <trigger_stmt_list> <trigger_stmt>
<trigger_stmt> ::= <proc_block>
| <proc_assign>
| <proc_if>
| <proc_loop>
| <proc_while>
| <proc_for>
| <proc_foreach>
| <proc_signal>
| <proc_resignal>
| <trigger_sql>
触发器主体的语法是过程体的语法的一部分。
参见 SAP HANA Database SQLScript guide 中的 create procedure 定义。
触发器主体的语法遵循过程体的语法,即嵌套块(proc_block),标量变量分配(proc_assign), if 块
(proc_if),, loop 块(proc_loop), for 块(proc_for), for each 块(proc_foreach), exception
signal(proc_signal), exception resignal(proc_resignal),和 sql 语句(proc_sql)。
<proc_block> ::= BEGIN
[<trigger_decl_list>]
[<proc_handler_list>]
<trigger_stmt_list>
END ;
你可以以嵌套方式添加另外的'BEGIN ... END;'块。
<proc_assign> ::= <var_name> := <expression> ;
var_name 为变量名,应该事先声明。
<proc_if> ::= IF <condition> THEN <trigger_stmt_list>
[<proc_elsif_list>]
[<proc_else>]
END IF ;
<proc_elsif_list> ::= ELSEIF <condition> THEN <trigger_stmt_list>

<proc_else> ::= ELSE <trigger_stmt_list>
关于 condition 的说明,参见 SELECT 的<condition>。
你可以使用 IF ... THEN ... ELSEIF... END IF 控制执行流程与条件。
<proc_loop> ::= LOOP <trigger_stmt_list> END LOOP ;
<proc_while> ::= WHILE <condition> DO <trigger_stmt_list> END WHILE ;
<proc_for> ::= FOR <column_name> IN [<reverse>] <expression> <DDOT_OP> <expression>
DO <trigger_stmt_list>
END FOR ;
<column_name> ::= <identifier>
<reverse> ::= REVERSE
<DDOT_OP> ::= ..
<proc_foreach> ::= FOR <column_name> AS <column_name> [<open_param_list>] DO
<trigger_stmt_list>
END FOR ;
<open_param_list> ::= ( <expr_list> )
<expr_list> ::= <expression> | <expr_list> , <expression>
<proc_signal> ::= SIGNAL <signal_value> [<set_signal_info>] ;
<proc_resignal> ::= RESIGNAL [<signal_value>] [<set_signal_info>] ;
<signal_value> ::= <signal_name> | <sql_error_code>
<signal_name> ::= <identifier>
<set_signal_info> ::= SET MESSEGE_TEXT = '<message_string>'
<message_string> ::= <identifier>
SET MESSEGE_TEXT
如果你为自己的消息设置 SET MESSEGE_TEXT,当触发器执行时指定的错误被抛出,消息传递给用
户。
SIGNAL 语句显式抛出一个异常。
用户定义的范围( 10000〜19999)将被允许发行错误代码。
RESIGNAL 语句在异常处理中对活动语句抛出异常。
如果没有指定错误代码, RESIGNAL 将抛出已捕捉的异常。

<trigger_sql> ::= <select_into_stmt>
| <insert_stmt>
| <delete_stmt>
| <update_stmt>
| <replace_stmt>
| <upsert_stmt>
对于 insert_stmt 的详情,参见 INSERT。
对于 delete_stmt 的详情,参见 DELETE。
对于 update_stmt 的详情,参见 UPDATE。
对于 replace_stmt 和 upsert_stmt 的详情,参见 REPLACE | UPSERT。
<select_into_stmt> ::= SELECT <select_list> INTO <var_name_list>
<from_clause >
[<where_clause>]
[<group_by_clause>]
[<having_clause>]
[{<set_operator> <subquery>, ... }]
[<order_by_clause>]
[<limit>]
<var_name_list> ::= <var_name> | <var_name_list> , <var_name>
<var_name> ::= <identifier>
关于 select_list, from_clause, where_clause, group_by_clause, having_clause,set_operator, subquery,
order_by_clause, limit 的详情,参见 SELECT。
var_name 是预先声明的标量变量名。
你可以分配选中项至标量变量中。
描述:
CREATE TRIGGER 语句创建触发器。
触发器是一种特殊的存储过程,在对表发生事件时自动执行。
CREATE TRIGGER 命令定义一组语句,当给定操作(INSERT/UPDATE/DELETE)发生在给定对象(主题表)
上执行。
只有对于给定的<subject_table_name>拥有 TRIGGER 权限的数据库用户允许创建表的触发器。
当前触发器限制描述如下:
l不支持 INSTEAD_OF 触发器。
l访问触发器定义的主题表在触发器主体中是不允许的,这代表对于触发器所在的表的任何
insert/update/delete/replace/select

l只支持行级别触发器,不支持语句级别触发器。行级别触发器表示触发活动只有在每次行改
变时执行。语句级别触发器代表触发活动在每次语句执行时运行。语法'FOR EACH ROW’表示
行式执行触发,为默认模式;即时没有指定'FOR EACH ROW’,仍然为行级别触发器。
l不支持事务表(OLD/NEW TABLE)。当触发 SQL 语句想要引用正在被触发器触发事件如
insert/update/delete 修改的数据,事务变量/表将是触发器主体中 SQL 语句访问新数据和旧数
据的方式。事务变量只在行级别触发器中使用,而事务表则在语句级别触发器中使用。
l不支持从节点到多个主机或表中的分区表上执行触发器。
l表只能为每个 DML 操作有一个触发器,可能是插入触发器、更新触发器和删除触发器,并且
它们三个可以一起激活。
因此,一张表总共最多有三个触发器。
l不支持的触发器动作(而存储过程支持):
resultset assignment(select resultset assignment to tabletype),
exit/continue command(execution flow control),
cursor open/fetch/close(get each record data of search result by cursor and access record in loop),
procedure call(call another proecedure),
dynomic sql execution(build SQL statements dynamically at runtime of SQLScript),
return(end SQL statement execution)
系统和监控视图:
TRIGGER 为触发器的系统视图:
系统视图 TRIGGER 显示:
SCHEMA_NAME, TRIGGER_NAME, TRIGGER_OID, OWNER_NAME,
OWNER_OID,SUBJECT_TABLE_SCHEMA,SUBJECT_TABLE_NAME, TRIGGER_ACTION_TIME,
TRIGGER_EVENT, TRIGGERED_ACTION_LEVEL,DEFINITION
例子:
你先需要触发器定义的表:
CREATETABLE TARGET ( A INT);
你也需要表触发访问和修改:
CREATETABLE SAMPLE ( A INT);
以下为创建触发器的例子:

CREATE TRIGGER TEST_TRIGGER AFTERINSERTON TARGET FOR EACH ROW

BEGIN

       DECLARE SAMPLE_COUNT INT;

       SELECTCOUNT(*) INTO SAMPLE_COUNT FROM SAMPLE;

       IF :SAMPLE_COUNT = 0 THEN

              INSERTINTO SAMPLE VALUES(5);

       ELSEIF :SAMPLE_COUNT = 1 THEN

              INSERTINTO SAMPLE VALUES(6);

       ENDIF;

END;

触发器 TEST_TRIGGER 将在任意记录插入至 TARGET 表后执行。由于在第一次插入中,表 SAMPLE 记录数为 0,触发器 TEST_TRIGGER 将插入 5 至表中。
在第二次插入 TARGET 表时,触发器插入 6,因为其计数为 1。
INSERTINTO TARGET VALUES (1);

SELECT * FROM SAMPLE;--5

INSERTINTO TARGET VALUES (2);

SELECT * FROM SAMPLE;--5 6

7.1.14   CREATE VIEW
语法:

CREATE VIEW  [<schema_name>.]<view_name> [(<column_name>, ... )] AS <subquery>

描述:

CREATE VIEW 可以有效地根据 SQL 结果创建虚拟表,这不是真正意义上的表,因为它本身不包含数据。

当列名一起作为视图的名称,查询结果将以列名显示。如果列名被省略,查询结果自动给出一个适当的列名。列名的数目必须与从<subquery>返回的列数目相同。

支持视图的更新操作,如果满足以下条件:

视图中的每一列必须映射到单个表中的一列。

如果基表中的一列有 NOT NULL 约束,且没有默认值,该列必须包含在可插入视图的列中。更新操作没有该条件。

例如在 SELECT 列表,必须不包含聚合或分析的功能,以下是不允许的:

. 在 SELECT 列表中的 TOP, SET, DISTINCT 操作

. GROUP BY, ORDER BY 子句

在 SELECT 列表中必须不能含有子查询。

必须不能包含序列值(CURRVAL, NEXTVAL)。

必须不能包含作为基视图的列视图。

如果基视图或表是可更新的,符合上述条件的基础上,基视图或表的视图是可更新的。

例子:

选择表 a 中的所有数据创建视图 v:

CREATEVIEW v ASSELECT * FROM a;

7.1.15   DROP AUDIT POLICY
语法:

DROP AUDIT POLICY <policy_name>

描述:

DROP AUDIT POLICY 语句删除审计策略。 <policy_name>必须指定已存在的审计策略。

只有拥有系统权限 AUDIT ADMIN 的数据库用户允许删除审计策略。每个拥有该权限的数据库用户可以删除任意的审计策略,无论是否由该用户创建。

即使审计策略被删除了,可能发生的是,定义在已删除的审计策略中的活动将被进一步审计;如果也启用了其他审计策略和定义了审计活动。

暂时关闭审计策略时,可以禁用而不用删除。

系统和监控视图:

AUDIT_POLICY:显示所有审计策略和状态。

M_INIFILE_CONTENTS:显示数据库系统配置参数。

只有拥有系统权限 CATALOG READ, DATA ADMIN 或 INIFILE ADMIN 的用户可以查看M_INIFILE_CONTENTS 视图中的内容,对于其他用户则为空。

例子:

假设使用如下语句前,审计策略已创建:

CREATEAUDIT POLICY priv_audit AUDITING SUCCESSFUL GRANT PRIVILEGE, REVOKE PRIVILEGE, GRANT ROLE, REVOKE ROLE LEVEL CRITICAL;

现在,该审计策略必须删除:

DROPAUDIT POLICY priv_audit;

7.1.16   DROP FULLTEXT INDEX
语法:

DROP FULLTEXT INDEX <fulltext_index_name>

描述:

DROP FULLTEXT INDEX 语句移除全文索引。

例子:

DROP FULLTEXT INDEX idx;

7.1.17   DROP INDEX
语法:

DROP INDEX <index_name>

描述:

DROP INDEX 语句移除索引。

例子:

DROPINDEX idx;

7.1.18   DROP SCHEMA
语法:

DROP SCHEMA <schema_name> [<drop_option>]

语法元素:

<drop_option> ::= CASCADE | RESTRICT

Default = RESTRICT

有限制的删除操作将删除对象当其没有依赖对象时。如果存在依赖对象,将抛出错误。

CASCADE级联删除:将删除对象以及其依赖对象。

描述:

DROP SCHEMA 语句移除schema。

例子:

创建集合 my_schema,表 my_schema.t,然后 my_schema 将使用 CASCADE 选项删除。

CREATESCHEMA my_schema;

CREATETABLE my_schema.t (a INT);

DROPSCHEMA my_schema CASCADE;

7.1.19   DROP SEQUENCE
语法:

DROP SEQUENCE <sequence_name> [<drop_option>]

语法元素:

<drop_option> ::= CASCADE | RESTRICT

Default = RESTRICT

级联删除将删除对象以及其依赖对象。当未指定 CASCADE 可选项,将执行非级联删除对象,不会删除依赖对象,而是使依赖对象 (VIEW, PROCEDURE) 无效。

无效的对象可以重新验证当一个对象有同样的集合,并且已创建了对象名。对象 ID,集合名以及对象名为重新验证依赖对象而保留。

有限制的删除操作将删除对象当其没有依赖对象时。如果存在依赖对象,将抛出错误。

描述:

DROP SEQUENCE 语句移除序列。

例子:

DROPSEQUENCE s;

7.1.20   DROP SYNONYM
语法:

DROP [PUBLIC] SYNONYM <synonym_name> [<drop_option>]

语法元素:

<drop_option> ::= CASCADE | RESTRICT

Default = RESTRICT

级联删除将删除对象以及其依赖对象。当未指定 CASCADE 可选项,将执行非级联删除操作,不会删除依赖对象,而是使依赖对象 (VIEW, PROCEDURE) 无效。

无效的对象可以重新验证当一个对象有同样的集合,并且已创建了对象名。对象 ID,集合名以及对象名为重新验证依赖对象而保留。

有限制的删除操作将删除对象当其没有依赖对象时。如果存在依赖对象,将抛出错误。

描述:

DROP SYNONYM 删除同义词。可选项 PUBLIC 允许删除公用同义词。

例子:

表 a 已创建,然后为表 a 创建同义词 a_synonym 和公用同义词 pa_synonym:

CREATETABLE a (c INT);

CREATESYNONYM a_synonym FOR a;

CREATEPUBLICSYNONYM pa_synonym FOR a;

删除同义词 a_synonym 和公用同义词 pa_synonym

DROPSYNONYM a_synonym;

DROPPUBLICSYNONYM pa_synonym;

7.1.21   DROP TABLE
语法:

DROP TABLE  [<schema_name>.]<table_name> [<drop_option>]

语法元素:

<drop_option> ::= CASCADE | RESTRICT

Default = RESTRICT

级联删除将删除对象以及其依赖对象。当未指定 CASCADE 可选项,将执行非级联删除操作,不会删除依赖对象,而是使依赖对象 (VIEW, PROCEDURE) 无效。

无效的对象可以重新验证当一个对象有同样的集合,并且已创建了对象名。对象 ID,集合名以及对象名为重新验证依赖对象而保留。

有限制的删除操作将删除对象当其没有依赖对象时。如果存在依赖对象,将抛出错误。

描述:

DROP TABLE 语句删除表。

例子:

创建表 A,然后删除。

CREATETABLE A(C INT);

DROPTABLE A;

7.1.22   DROP TRIGGER
DROP TRIGGER <trigger_name>

描述:

DROP TRIGGER 语句删除一个触发器。

只有在触发器所作用表上有 TRIGGER 权限的数据库用户才允许删除该表的触发器。

例子:

对于这个例子,你需要先创建一个名为 test_trigger 的触发器,如下:

CREATETABLE TARGET ( A INT);

CREATETABLE SAMPLE ( A INT);

CREATE TRIGGER TEST_TRIGGER AFTERUPDATEON TARGET

BEGIN

       INSERTINTO SAMPLE VALUES(3);

END;

现在你可以删除触发器:

DROP TRIGGER TEST_TRIGGER;

7.1.23   DROP VIEW
语法:

DROP VIEW  [<schema_name>.]<view_name> [<drop_option>]

语法元素:

<drop_option> ::= CASCADE | RESTRICT

Default = RESTRICT

级联删除将删除对象以及其依赖对象。当未指定 CASCADE 可选项,将执行非级联删除操作,不会删除依赖对象,而是使依赖对象 (VIEW, PROCEDURE) 无效。

无效的对象可以重新验证当一个对象有同样的集合,并且已创建了对象名。对象 ID,集合名以及对象名为重新验证依赖对象而保留。

有限制的删除操作将删除对象当其没有依赖对象时。如果存在依赖对象,将抛出错误。

描述:

DROP VIEW 语句删除视图。

例子:

表 t 已创建,然后选择表 a 中的所有数据创建视图 v:

CREATETABLE t (a INT);

CREATEVIEW v ASSELECT * FROM t;

删除视图 v:

DROPVIEW v;

7.1.24   RENAME COLUMN
语法:

RENAME COLUMN <table_name>.<old_column_name> TO <new_column_name>

描述:

RENAME COLUMN 语句修改列名:

例子:

创建表 B:

CREATETABLE B (A INTPRIMARYKEY, B INT);

显示表 B 中列名的列表:

SELECT COLUMN_NAME, POSITION FROM TABLE_COLUMNS WHERE SCHEMA_NAME =CURRENT_SCHEMA AND TABLE_NAME = 'B'ORDERBYPOSITION;

列 A 重名为 C:

RENAMECOLUMN B.A TO C;

7.1.25   RENAME INDEX
语法:

RENAME INDEX <old_index_name> TO <new_index_name>

描述:

RENAME INDEX 语句重命名索引名。

例子:

表 B 已创建,然后索引 idx 建立在表 B 的列 B:

CREATETABLE B (A INTPRIMARYKEY, B INT);

CREATEINDEX idx on B(B);

显示表 B 的索引名列表:

SELECT INDEX_NAME FROM INDEXES WHERE SCHEMA_NAME = CURRENT_SCHEMA AND TABLE_NAME='B';

索引 idx 重名为 new_idx:

RENAMEINDEX idx TO new_idx;

7.1.26   RENAME TABLE
语法:

RENAME TABLE <old_table_name> TO <new_table_name>

描述:

RENAME TABLE 语句在同一个Schema下,将表名修改为 new_table_name。

例子:

在当前集合创建表 A:

CREATETABLE A (A INTPRIMARYKEY, B INT);

显示当前集合下表名的列表:

SELECT TABLE_NAME FROM TABLES WHERE SCHEMA_NAME = CURRENT_SCHEMA;

表 A 重命名为 B:

RENAMETABLE A TO B;

 

SCHEMA  mySchema 已创建,然后创建表 mySchema.A:

CREATESCHEMA mySchema;

CREATETABLE mySchema.A (A INTPRIMARYKEY, B INT);

显示模式 mySchema 下表名的列表:

SELECT TABLE_NAME FROM TABLES WHERE SCHEMA_NAME = 'MYSCHEMA';

表 mySchema.A 重命名为 B:

RENAMETABLE mySchema.A TO B;注:修改后B还是在mySchema里

7.1.27   ALTER TABLE ALTER TYPE
语法:

<table_conversion_clause> ::= [ALTER TYPE] { ROW [THREADS <number_of_threads>] | COLUMN [THREADS <number_of_threads> [BATCH <batch_size>]] }

语法元素:

<number_of_threads> ::= <numeric_literal>

指定进行表转换的并行线程数。线程数目的最佳值应设置为可用的 CPU 内核的数量。

<batch_size> ::= <numeric_literal>

指定批插入的行数,默认值为最佳值 2,000,000。插入表操作在每个<batch_size>记录插入后立即提交,可以减少内存消耗。 BATCH 可选项只可以在表 从行转换为列时使用。然而,大于 2,000,000的批大小可能导致高内存消耗,因此不建议修改该值。

描述:

通过复制现有的表中的列和数据,可以从现有的表创建一个不同存储类型的新表。该命令用来把表从行转换为列或从列转换为行。如果源表是行式存储,则新建的表为列式存储。

配置参数:

用于表转换的默认线程数在 indexserver.ini 的[sql]部分定义, table_conversion_parallelism =<numeric_literal> (初始值为 8)。

例子:

对于这个例子,你需要先创建欲进行转换的表:

CREATECOLUMNTABLE col_to_row (col1 INT, col2 INT)

CREATEROWTABLE row_to_col (col1 INT, col2 INT)

表 col_to_row 将以列式存储方式创建,表 row_to_col 则为行式存储。

现在你可以将表 col_to_row 的存储类型从列转为行:

ALTERTABLE col_to_row ALTERTYPEROW

你也可以将表 row_to_col 的存储类型从行转为列:

ALTERTABLE row_to_col ALTERTYPECOLUMN

为了使用批量转换模式,你需要在语句结尾处添加批选项:

ALTERTABLE row_to_col ALTERTYPECOLUMN BATCH 10000

7.1.28   TRUNCATE TABLE
语法:

TRUNCATE TABLE <table_name>

描述:

删除表中所有记录。当从表中删除所有数据时, TRUNCATE 比 DELETE FROM 快,但是 TRUNCATE无法回滚。要回滚删除的记录,应使用"DELETE FROM <table_name>"。

HISTORY 表可以通过执行该语句像正常表一样删除。历史表的所有部分(main, delta, history main and history delta)将被删除并且内容会丢失。

7.2数据操纵语句
7.2.1     DELETE
语法:

DELETE [HISTORY] FROM  [<schema_name>.]<table_name> [WHERE <condition>]

<condition> ::= <condition> OR <condition>| <condition> AND <condition>| NOT <condition>| ( <condition> )| <predicate>

关于谓词的详情,请参阅 Predicates。

描述:

DELETE 语句当满足条件时,从表中删除所有记录。如果省略了 WHERE 子句,将删除表中所有记录。

DELETE HISTORY

DELETE HISTORY 将标记选中的历史表中历史记录进行删除。这表示执行完该语句后,引用已删除记录的时间旅行查询语句可能仍然可以查看这些数据。 为了在物理上删除这些记录,必须执行下面的语句:

ALTER SYSTEM RECLAIM VERSION SPACE;  MERGE HISTORY DELTA of <table_name>;

请注意:在某些情况中,即使执行了上述两条语句,仍无法从物理上删除。

欲检查记录是否已从物理上删除,以下语句会有帮助:

SELECT * FROM <table_name> WHERE <condition> WITH PARAMETERS ('REQUEST_FLAGS'=('ALLCOMMITTED','HISTORYONLY'));

注意: “WITH PARAMETERS ('REQUEST_FLAGS'= ('ALLCOMMITTED','HISTORYONLY'))”子句可能只适用于验证 DELETE HISTORY 语句的执行结果。

例子:

CREATETABLE T (KEYINTPRIMARYKEY, VAL INT);

INSERTINTO T VALUES (1, 1);

INSERTINTO T VALUES (2, 2);

INSERTINTO T VALUES (3, 3);

在下面的例子中,将删除一条记录:

DELETEFROM T WHEREKEY = 1;

7.2.2     EXPLAIN PLAN
语法:

EXPLAIN PLAN [SET STATEMENT_NAME = <statement_name>] FOR <sql_subquery>

语法元素:

<statement_name> ::= string literal used to identify the name of a specific executi on plan in the output table for a given SQL statement.

如果未指定 SET STATEMENT_NAME,则将设为 NULL。

描述:

EXPLAIN PLAN 语句用来评估 SAP HANA 数据库遵循的执行 SQL 语句的执行计划。评估的结果存在视图 EXPLAIN_PLAN_TABLE,以便稍后的用户检查。

SQL 语句必须是数据操纵语句,因此Schema定义语句不能在 EXPLAIN STATEMENT 中使用。

你可以从 EXPLAIN_PLAN_TABLE 视图中得到 SQL 计划,该视图为所有用户共享。这里是从视图读取 SQL 计划的例子:

SELECT * FROM EXPLAIN_PLAN_TABLE;

EXPLAIN_PLAN_TABLE 视图中的列:表 1:列名和描述

EXPLAIN_PLAN_TABLE 视图中的 OPERATOR_NAME 列。 表 2: OPERATOR_NAME 列显示的列式引擎操作符列表:

COLUMN SEARCH 为列式引擎操作符起始位置标记, ROW SEARCH 为行式引擎操作符起始位置标记。在以下的例子中, COLUMN SEARCH (ID 10)生成的中间结果被 ROW SEARCH (ID 7)使用, ROWSEARCH (ID 7) 被另一个 COLUMN SEARCH (ID 1)使用。位于 COLUMN SEARCH (ID 10) 最底层的操作符解释了 COLUMN SEARCH (ID 10) 是如何执行的。 ROW SEARCH (ID 7) 和 COLUMN SEARCH (ID 10) 之间的操作符说明了 ROW SEARCH (ID 7) 如何处理由 COLUMN SEARCH (ID 10) 生成的中间结果。位于COLUMN SEARCH (ID 1) 和 ROW SEARCH (ID 7)顶层的操作符解释了顶层 COLUMN SEARCH (ID 1) 是如何处理由 ROW SEARCH (ID 7)生成的中间结果。

SQL 计划解释例子。

该语句来自语 TPC-H 基准。例子中的所有表都是行式存储。

setschema hana_tpch;

DELETEFROM explain_plan_table WHERE statement_name = 'TPC-H Q10';

EXPLAINPLANSET STATEMENT_NAME = 'TPC-H Q10'FOR

       SELECT TOP 20 c_custkey,c_name,SUM(l_extendedprice * (1 - l_discount)) AS revenue,

              c_acctbal,

              n_name,

              c_address,

              c_phone,

              c_comment

       FROM

              customer,

              orders ,

              lineitem,

              nation

       WHERE

              c_custkey = o_custkey

              AND l_orderkey = o_orderkey

              AND o_orderdate >= '1993-10-01'

              AND o_orderdate < ADD_MONTHS('1993-10-01',3)

              AND l_returnflag = 'R'

              AND c_nationkey = n_nationkey

       GROUPBY

       c_custkey,

       c_name,

       c_acctbal ,

       c_phone,

       n_name,

       c_address ,

       c_comment

       ORDERBY revenue DESC;

      

SELECT operator_name, operator_details , table_name FROM explain_plan_table WHERE statement_name = 'TPC-H Q10';

以下是对这个查询语句的计划解释:

7.2.3     INSERT
语法:

INSERT INTO  [ <schema_name>. ]<table_name> [ <column_list_clause> ] { <value_list_clause> | <subquery> }

语法元素:

<column_list_clause> ::= ( <column_name>, ... )

<value_list_clause> ::= VALUES ( <expression>, ... )

描述:

INSERT 语句添加一条到表中。返回记录的子查询可以用来插入表中。如果子查询没有返回任何结果,数据库将不会插入任何记录。可以使用 INSERT 语句指定列的列表。不在列表中的列将显示默认值。如果省略了列的列表,数据库插入所有记录到表中。

例子:

CREATETABLE T (KEYINTPRIMARYKEY, VAL1 INT, VAL2 NVARCHAR(20));

在以下的例子中,你可以插入值:

INSERTINTO T VALUES (1, 1, 'The first');

你可以将值插入到指定的列:

INSERTINTO T (KEY) VALUES (2);

你也可以使用子查询:

INSERTINTO T SELECT 3, 3, 'The third'FROM DUMMY;

7.2.4     LOAD
语法:

LOAD <table_name> {DELTA | ALL | (<column_name>, ...)}

描述:

LOAD 语句明确地加载列式(注:Load只支持列式存储,对于行式存储不能使用)存储表的数据至内存中,而非第一次访问时加载。

DELTA

使用 DELTA,列式表的一部分将加载至内存。由于列式存储对于读操作做了优化和压缩,增量用来优化插入或更新。 所有的插入被传递给一个增量。

ALL

主要的和增量的列存储表中所有数据加载到内存中。

例子:

以下的例子加载整张表 a_table 至内存中。

LOAD a_table all;

以下的例子加载列 a_column 和表 a_table 列 another_column 至内存中。

LOAD a_table (a_column,another_column);

表加载状态可以查询:

select loaded from m_cs_tables where table_name = '<table_name>'

7.2.5     MERGE DELTA
语法:

MERGE [HISTORY] DELTA OF [<schema_name>.]<table_name> [PART n] [WITH PARAMETERS (<parameter_key_value>, ...)]

语法元素:

WITH PARAMETERS (<parameter_list>):

<parameter_list> ::= <parameter>,<parameter_list>

<parameter> ::= <parameter_name> = <parameter_setting>

<parameter_name> ::= 'SMART_MERGE' | 'MEMORY_MERGE'

<parameter_setting> ::= 'ON' | 'OFF'

当前参数: 'SMART_MERGE' = 'ON' | 'OFF'。当 SMART_MERGE 为 ON,数据库执行智能合并,这代表数据库基于 Indexserver 配置中定义的合并条件来决定是否合并。'MEMORY_MERGE' = 'ON' | 'OFF' 数据库只合并内存中表的增量部分,不会被持久化。

描述:

使用 DELTA,列式表的一部分将加载至内存。由于列式存储对于读操作做了优化和压缩,增量用来优化插入或更新。 所有的插入被传递至一个增量部分。

HISTORY 可以指定合并历史表增量部分到临时表的主要历史部分。

PART-可以指定合并历史表增量部分到临时表的主要历史部分,该表已分区。

例子:

MERGEDELTAOF A;

Merges the column store table delta part to its main part.

MERGEDELTAOF A WITH PARAMETERS('SMART_MERGE' = 'ON');

Smart merges the column store table delta part to its main part.

MERGEDELTAOF A WITH PARAMETERS('SMART_MERGE' = 'ON', 'MEMORY_MERGE' = 'ON');

Smart merges the column store table delta part to its main part non-persistent, in memory only.

MERGEDELTAOF A PART 1;

Merge the delta of partition no. 1 of table with name "A" to main part of partion no. 1.

MERGEHISTORYDELTAOF A;

Merge the history delta part of table with name "A" into its history main part.

MERGEHISTORYDELTAOF A PART 1;

Merges the column store table delta part of the history of table with name "A" to its history main part.

7.2.6     REPLACE | UPSERT
语法:

UPSERT  [ <schema_name>. ]<table_name> [ <column_list_clause> ] { <value_list_clause> [ WHERE <condition> | WITH PRIMARY KEY ] | <subquery> }

REPLACE  [ <schema_name>. ]<table_name> [ <column_list_clause> ] { <value_list_clause> [ WHERE <condition> | WITH PRIMARY KEY ] | <subquery> }

语法元素:

<column_list_clause> ::= ( <column_name>, ... )

<value_list_clause> ::= VALUES ( <expression>, ... )

<condition> ::= <condition> OR <condition>| <condition> AND <condition>| NOT <condition>| ( <condition> )| <predicate>

有关谓词的详情,请参阅 Predicates。

描述:

没有子查询的 UPSERT 或者 REPLACE 语句与 UPDATE 相似。唯一的区别是当 WHERE 子句为假(或没有Where子句)时,该语句像 INSERT 一样添加一条新的记录到表中。

对于表有 PRIMARY KEY 的情况,主键列必须包含在列的列表中。没有默认设定,由 NOT NULL 定义的列也必须包含在列的列表中。

有子查询的 UPSERT 或者 REPLACE 语句与 INSERT 一样,除了如果表中旧记录与主键的新记录值相同,则旧记录将被子查询返回的记录所修改。除非表有一个主键,否则就变得等同于 INSERT(即如果表没有设定主键,则为INSERT?),因为没有使用索引来判断新记录是否与旧记录重复。

有'WITH PRIMARY KEY'的 UPSERT 或 REPLACE 语句与有子查询的语句相同。其在 PRIMARY KEY 基础上工作。

例子:

CREATETABLE T (KEYINTPRIMARYKEY, VAL INT);

你可以插入一条新值:

UPSERT T VALUES (1, 1);--没有Where与子查询,直接插入

如果 WHERE 子句中的条件为假,将插入一条新值:

UPSERT T VALUES (2, 2) WHEREKEY = 2; --没有就插入

你可以更新列"VAL"的第一条记录

UPSERT T VALUES (1, 9) WHEREKEY = 1;--有就更新

或者你可以使用"WITH PRIMARY KEY" 关键字

UPSERT T VALUES (1, 8) WITHPRIMARYKEY;--根据主键进行更新,如果不存在,则插入

你可以使用子查询插入值:

UPSERT T SELECTKEY + 2, VAL FROM T;--将子查询的结果插入,如果存在,则更新

UPSERT T VALUES (5, 1) WITHPRIMARYKEY;--根据主键查询时不存在,则插入

UPSERT T SELECT 5,3 from dummy;--存在,则更新

7.2.7     SELECT
语法:

<select_statement> ::= <subquery> [ <for_update> | <time_travel> ]| ( <subquery> ) [ <for_update> | <time_travel> ]

<subquery> ::= <select_clause> <from_clause> [<where_clause>] [<group_by_clause>] [<having_clause>] [{<set_operator> <subquery>, ... }] [<order_by_clause>] [<limit>]

语法元素:

SELECT 子句:

SELECT 子句指定要返回给用户或外部的 select 子句一个输出,如果存在的话。

<select_clause> ::= SELECT [TOP <integer>] [ ALL | DISTINCT ] <select_list>

<select_list> ::= <select_item>[, ...]

<select_item> ::= [<table_name>.] *| <expression> [ AS <column_alias> ]

TOP n:TOP n 用来返回 SQL 语句的前 n 条记录。

DISTINCT 和 ALL:可以使用 DISTINCT 返回重复的记录,每一组选择只有一个副本。使用 ALL 返回选择的所有记录,包括所有重复记录的拷贝。默认值为 ALL。

Select_list:select_list 允许用户定义他们想要从表中选择的列。

*:*可以从 FROM 子句中列出的表或视图中选择所有列。如果集合名和表名或者表名带有星号(*),其用来限制结果集至指定的表。

column_alias:column_alias 可以用于简单地表示表达式。

FROM:FROM 子句中指定输入值,如表、视图、以及将在 SELECT 语句中使用的子查询。

<from_clause> ::= FROM {<table>, ... }

<table> ::= <table_name> [ [AS] <table_alias> ] | <subquery> [ [AS] <table_alias> ] | <joined_table>

<joined_table> ::= <table> [<join_type>] JOIN <table> ON <predicate> | <table> CROSS JOIN <table> | <joined_table>

<join_type> ::= INNER | { LEFT | RIGHT | FULL } [OUTER]

table alias:表别名可以用来简单地表示表或者子查询。

join_type 定义了将执行的联接类型, LEFT 表示左外联接, RIGHT 表示右外联接, FULL 表示全外联接。执行联接操作时, OUT 可能或者可能不使用。

ON <predicate>:ON 子句定义联接谓词。

CROSS JOIN:CROSS 表示执行交叉联接,交叉联接生成两表的交叉积结果。

WHERE 子句

WHERE 子句用来指定 FROM 子句输入的谓词, 使用户可以检索所需的记录。

<where_clause> ::= WHERE <condition>

<condition> ::=<condition> OR <condition> | <condition> AND <condition> | NOT <condition> | ( <condition> ) | <predicate>

<predicate> ::= <comparison_predicate> | <range_preciate> | <in_predicate> | <exist_predicate> | <like_predicate> | <null_predicate>

<comparison_predicate> ::= <expression> { = | != | <> | > | < | >= | <= } [ ANY | SOME | ALL ] ({<expression_list> | <subquery>})

<range_predicate> ::= <expression> [NOT] BETWEEN <expression> AND <expression>

<in_predicate> ::= <expression> [NOT] IN ( { <expression_list> | <subquery> } )

<exist_predicate> ::= [NOT] EXISTS ( <subquery> )

<like_predicate> ::= <expression> [NOT] LIKE <expression> [ESCAPE <expression>]

<null_predicate> ::= <expression> IS [NOT] NULL

<expression_list> ::= {<expression>, ... }

GROUP BY 子句

<group_by_clause> ::=GROUP BY {  { <expression>, ... } | <grouping_set> }

<grouping_set> ::= { GROUPING SETS | ROLLUP | CUBE }[BEST <integer>] [LIMIT <integer>[OFFSET <integer>] ] [WITH SUBTOTAL] [WITH BALANCE] [WITH TOTAL]

[TEXT_FILTER <filterspec> [FILL UP [SORT MATCHES TO TOP]]]  [STRUCTURED RESULT [WITH OVERVIEW] [PREFIX <string_literal>] | MULTIPLE RESULTSETS] ( <grouping_expression_list> )

<grouping_expression_list> ::= { <grouping_expression>, ... }

<grouping_expression> ::=<expression>| ( <expression>, ... ) | ( ( <expression>, ... ) <order_by_clause> )

GROUP BY 用来对基于指定列值选定的行进行分组。

GROUPING SETS

在一条语句中, 生成多个特定数据分组结果。如果没有设置例如 best 和 limit 的可选项,结果将和 UNION ALL 每个指定组的聚合值相同。例如:

"select col1, col2, col3, count(*) from t groupbygrouping sets ( (col1, col2), (col1, col3) )"与" select col1, col2, NULL, count(*) from t groupby col1, col2 unionallselect col1, NULL, col3,count(*) from t groupby col1, col3"相同。在 grouping-sets 语句中,

每个(col1, col2) 和(col1, col3)定义了分组。

ROLLUP

在一条语句中,生成多级聚合结果。例如, "rollup (col1, col2,col3)"与有额外 聚合,但没有分组的"grouping sets ( (col1, col2, col3), (col1, col2), (col1) )"结果相同。因此,结果集所包含的分组的数目是 ROLLUP 列表中的列加上一个最后聚合的数目,如果没有额外的选项。

CUBE

在一条语句中,生成多级聚合的结果。例如, "cube (col1, col2,col3)" 与有额外聚合,但没有分组的"grouping sets ( (col1, col2, col3), (col1, col2), (col1, col3), (col2, col3), (col1), (col2),(col3) )"结果相同。因此,结果集所包含分组的数目与所有可能排列在 CUBE 列表的列加上一个最后聚合的数目是相同的,如果没有附加的选项。

BEST n

返回每个以行聚合数降序排列的分组集中前 n 个分组集(返回的是某个分组里的所有记录,而不是某几条)。 n 可以是任意零,正数或负数。当 n 为零时,作用和没有 BEST 选项一样。当 n 为负数表示以升序排序。

LIMIT n1 [OFFSET n2]

返回每个分组集中(取每个组中的部分行)第一个 N1 分组记录跳过 N2 个后的结果。

WITH SUBTOTAL

返回每个分组集中由 OFFSET 或者 LIMIT 控制的返回结果的分类汇总。除非设置了 OFFSET 和LIMIT,返回值将和 WITH TOTAL 相同。

WITH BALANCE

返回每个分组集中 OFFSET 或者 LIMIT 没有返回的其余结果值。

WITH TOTAL

返回每个分组集中额外的合计总值行。 OFFSET 和 LIMIT 选项不能修改该值。

TEXT_FILTER <filterspec>

执行文本过滤或者用<filterspec>高亮分组列, <filterspec>为单引号字符串,语法如下:

<filterspec> ::= '[<prefix>]<element>{<subsequent>, ...}'

<prefix> ::= + | - | NOT

<element> ::= <token> | <phrase>

<token> ::= !! Unicode letters or digits

<phrase> ::= !! double-quoted string that does not contain double quotations inside

<subsequent> ::= [<prefix_subsequent>]<element>

<prefix_subsequent> ::= + | - | NOT | AND | AND NOT | OR

<filterspec>定义的过滤是由与逻辑操作符 AND, OR 和 NOT 连接的标记/词组或者短语组成。 一个标记相匹配的字符串,其中包含对应不区分大小写的单词, 'ab' 匹配 'ab cd' 和 'cd Ab' ,但不匹配'abcd'。一个标记可以包含通配字符’,匹配任何字符串, ’匹配任意字母。但是在词组内, ’和’不是通配符。逻辑运算符 AND, OR 和 NOT 可以与标记,词组一起使用。由于 OR 是默认操作符, 'ab cd' 和'ab OR cd'意义一样。注意,逻辑运算符应该大写。作为一种逻辑运算符,前缀'+' 和 '-'各自表示包含(AND) 和不包含 (AND NOT)。例如, 'ab -cd' 和 'ab AND NOT cd'意义相同。如果没有 FILL UP 选项,只返回含有匹配值的分组记录。 需要注意的是一个过滤器仅被运用到每个分组集的第一个分组列。

FILL UP

不仅返回匹配的分组记录,也包含不匹配的记录。 text_filter 函数对于识别哪一个匹配是很有用的。参阅下面的'Related Functions’。

SORT MATCHES TO TOP

返回匹配值位于非匹配值前的分组集。该选项不能和 SUBTOTAL, BALANCE 和 TOTAL 一起使用。

STRUCTURED RESULT

结果作为临时表返回。 对于每一个分组集创建一个临时表,如果设置 WITH OVERVIEW 选项,将为分组集的总览创建额外的临时表,该临时表的名字由 PREFIX 选项定义。

WITH OVERVIEW

将总览返回至单独的额外一张表中。

PREFIX 值

使用前缀命名临时表。必须以"#"开始,代表是临时表。如果省略,默认前缀为"#GN", 然后,连接该前缀值和一个非负整数,用作临时表的名称,比如"#GN0", "#GN1" 和 "#GN2"。

MULTIPLE RESULTSETS

返回多个结果集中的结果。

相关函数

grouping_id ( <grouping_column1, ..., grouping_columnn> )函数返回一个整数,判断每个分组记录属于哪个分组集。 text_filter ( <grouping_column> ) 函数与 TEXT_FILTER, FILL UP, 和 SORT MATCHES TO TOP 一起使用,显示匹配值或者 NULL。当指定了 FILL UP 选项时,未匹配值显示为 NULL。

返回格式

如果 STRUCTURED RESULT 和 MULTIPLE RESULTSETS 都没有设置,返回所有分组集 的联合,以及对于没有包含在指定分组集中的属性填充的 NULL 值。使用 STRUCTURED RESULT,额外的创建临时表,在同一会话中用"SELECT * FROM <table name>"可以查询。表名遵循的格式:

<PREFIX>0:如果定义了 WITH OVERVIEW,该表将包含总览。

<PREFIX>n: 由 BEST 参数重新排序的第 n 个分组集。

使用 MULTIPLE RESULTSETS,将返回多个结果集。每个分组集的分组记录都在单个结果集中。

HAVING 子句:

HAVING 子句用于选择满足谓词的特定分组。如果省略了该子句,将选出所有分组。

<having_clause> ::= HAVING <condition>

SET OPERATORS

SET OPERATORS 使多个 SELECT 语句相结合,并只返回一个结果集。

<set_operator> ::= UNION [ ALL | DISTINCT ] | INTERSECT [DISTINCT] | EXCEPT [DISTINCT]

UNION ALL

选择所有 select 语句中的所有(并集)记录。重复记录将不会删除。

UNION [DISTINCT]

选择所有 SELECT 语句中的唯一记录,在不同的 SELECT 语句中删除重复记录。 UNION 和 UNION DISTINCT 作用相同。

INTERSECT [DISTINCT]

选择所有 SELECT 语句中共有(交集)的唯一记录。

EXCEPT [DISTINCT]

在位于后面的 SELECT 语句删除(差集)重复记录后,返回第一个 SELECT 语句中所有唯一的记录。

ORDER BY 子句

<order_by_clause> ::= ORDER BY { <order_by_expression>, ... }

<order_by_expression> ::= <expression> [ ASC | DESC ]| <position> [ ASC | DESC]

<position> ::= <integer>

ORDER BY 子句用于根据表达式或者位置对记录排序。位置表示选择列表的索引。对"select col1,col2 from t order by 2", 2 表示 col2 在选择列表中使用的第二个表达式。 ASC 用于按升序排列记录,DESC 用于按降序排列记录。默认值为 ASC。

LIMIT

LIMIT 关键字定义输出的记录数量。

<limit> ::= LIMIT <integer> [ OFFSET <integer> ]

LIMIT n1 [OFFSET n2]:返回跳过 n2 条记录后的最先 n1 条记录。

FOR UPDATE

FOR UPDATE 关键字锁定记录,以便其他用户无法锁定或修改记录,直到本次事务结束。

<for_update> ::= FOR UPDATE

TIME TRAVEL

该关键字与时间旅行有关,用于语句级别时间旅行回到 commit_id 或者时间指定的快照。

<time_travel> ::= AS OF { { COMMIT ID <commit_id> } | { UTCTIMESTAMP <timestamp> }}时间旅行只对历史列表适用。 <commit_id>在每次提交后可以从 m_history_index_last_commit_id 获得,其相关的<timestamp>可以从 sys.m_transaction_history 读取。

createhistorycolumntable x ( a int, b int ); // after turnning off auto commit

insertinto x values (1,1);

commit;

select last_commit_id from m_history_index_last_commit_id where session_id = current_connection;// e.g., 10

insertinto x values (2,2);

commit;

select last_commit_id from m_history_index_last_commit_id where session_id = current_connection; // e.g., 20

deletefrom x;

commit;

select last_commit_id from m_history_index_last_commit_id where session_id = current_connection; // e.g., 30

select * from x asofcommit id 30; // return nothing

select * from x asofcommit id 20; // return two records (1,1) and (2,2)

select * from x asofcommit id 10; // return one record (1,1)

select commit_time from sys.transaction_history where commit_id = 10; // e.g., '2012-01-01 01:11:11'

select commit_time from sys.transaction_history where commit_id = 20; // e.g., '2012-01-01 02:22:22'

select commit_time from sys.transaction_history where commit_id = 30; // e.g., '2012-01-01 03:33:33'

select * from x asof utctimestamp '2012-01-02 02:00:00'; // return one record (1,1)

select * from x asof utctimestamp '2012-01-03 03:00:00'; // return two records (1,1) and (2,2)

select * from x asof utctimestamp '2012-01-04 04:00:00'; // return nothing

 

例子:

表 t1:

droptable t1;

createcolumntable t1 ( id intprimarykey, customer varchar(5), yearint, product varchar(5), sales int );

insertinto t1 values(1, 'C1', 2009, 'P1', 100);

insertinto t1 values(2, 'C1', 2009, 'P2', 200);

insertinto t1 values(3, 'C1', 2010, 'P1', 50);

insertinto t1 values(4, 'C1', 2010, 'P2', 150);

insertinto t1 values(5, 'C2', 2009, 'P1', 200);

insertinto t1 values(6, 'C2', 2009, 'P2', 300);

insertinto t1 values(7, 'C2', 2010, 'P1', 100);

insertinto t1 values(8, 'C2', 2010, 'P2', 150);

以下的 GROUPING SETS 语句和第二个 group-by 查询相等。 需要注意的是,两组在第一个查询的分组集内指定的各组在第二个查询。

select customer, year, product, sum(sales) from t1 groupbyGROUPING SETS((customer, year),(customer, product));

select customer, year, NULL, sum(sales) from t1 groupby customer, year

unionall

select customer, NULL, product, sum(sales) from t1 groupby customer, product;

注:Union时,两个Select语句的字段个数,对应字段的类型要相同。BW中的MultiCube是将多个InfoProvider的记录插入到MultiCube所对应的物理表中,这一过程并不是通过Union SQL语句来完成的,而是一个个将InfoProvider的数据插入到MultiCube中,所以来自InfoProvider的字段个数可以不同,只是在报表展示时,通过 Group进行了合并

 

ROLLUP 和 CUBE 经常使用的分组集的简明表示。 下面的 ROLLUP 查询与第二个 group-by 查询相等。

select customer, year, sum(sales) from t1 groupby ROLLUP(customer, year);

select customer, year, sum(sales) from t1 groupbygrouping sets((customer, year),(customer))

unionall

selectNULL, NULL, sum(sales) from t1;

selectNULL, NULL, sum(sales) from t1;

select customer, year, sum(sales) from t1 groupbygrouping sets((customer, year),(customer))

select customer, year, sum(sales) from t1 groupbygrouping sets((customer, year),(customer),())

以下的 CUBE 查询与第二个 group-by 查询相等。

select customer, year, sum(sales) from t1 groupby CUBE(customer, year);

select customer, year, sum(sales) from t1 groupbygrouping sets((customer, year),(customer),(year))

unionall

selectNULL, NULL, sum(sales) from t1;

select customer, year, sum(sales) from t1 groupbygrouping sets((customer, year),(customer),(year))

select customer, year, sum(sales) from t1 groupbygrouping sets((customer, year),(customer),(year),())

 

BEST 1 指定以下查询语句只能返回最上面的 1 个 best 组。在该个例子中,对于(customer, year)组存在 4 条记录,而(product)组存在 2 条记录,因此返回之前的 4 条记录。对于 'BEST -1' 而非 'BEST 1',返回后 2 条记录。

select customer, year, product, sum(sales) from t1 groupbygrouping sets ((customer, year),(product));

select customer, year, product, sum(sales) from t1 groupbygrouping sets BEST 1((customer, year),(product));

select customer, year, product, sum(sales) from t1 groupbygrouping sets BEST 2((customer, year),(product));

select customer, year, product, sum(sales) from t1 groupbygrouping sets BEST -1((customer, year),(product));

LIMIT2 限制每组最大记录数为 2。对于(customer, year) 组,存在 4 条记录,只返回前 2 条记录;(product)组的记录条数为 2,因此返回所有结果。

select customer, year, product, sum(sales) from t1 groupbygrouping sets LIMIT 2((customer, year),(product));

WITH SUBTOTAL 为每一组生成额外的一条记录,显示返回结果的分类汇总(没有显示出来的不会被统计,这与With Total是不一样的,请参考后面的With Total)。这些记录的汇总对customer, year, product 列返回 NULL,选择列表中 sum(sales)的总和。

select customer, year, product, sum(sales) from t1 groupbygrouping sets LIMIT 2 WITH SUBTOTAL((customer, year),(product));

WITH BALNACE 为每一组生成额外的一条记录,显示未返回结果的分类汇总(如果未返回结果行不存在,则以分类汇总行还是会显示,只不过都是问号,而不是不显示)。

select customer, year, product, sum(sales) from t1 groupbygrouping sets WITH BALANCE((customer, year),(product));

select customer, year, product, sum(sales) from t1 groupbygrouping sets LIMIT 2 WITH BALANCE((customer, year),(product));

select customer, year, product, sum(sales) from t1 groupbygrouping sets LIMIT 1 WITH BALANCE((customer, year),(product));

WITH TOTAL为每一组生成额外的一条记录,显示所有分组记录的汇总,不考虑该分组记录是否返回(即没有显示在分组里的数据也会汇总起来,如下面的 300 + 500 <> 1250,因为使用了Limit限制了每组返回的条数,但那些未显示出来的数据也会被一起统计,这与 With SubTotal不一样)。

select customer, year, product, sum(sales) from t1 groupbygrouping sets LIMIT 2 WITH TOTAL((customer, year),(product))

TEXT_FILTER 允许用户获得有指定的<filterspec>的分组的第一列。以下查询将搜索以’2’结尾的列:对于第一个分组集为 customers, 第二个为 products。只返回三条匹配的记录。在 SELECT 列表中的 TEXT_FILTER 对于查看哪些值匹配是很有用的。

select customer, year, product, sum(sales), text_filter(customer), text_filter(product) from t1

groupbygrouping sets TEXT_FILTER '*2'((customer, year),(product));--只是去搜索每个分组里里的第一列,如这里的customer与product,但不搜索Year列,因为不是分组中的首列

FILL UP 用于返回含有<filterspec>的匹配和不匹配的记录。 因此,下面的查询返回 6 条记录,而先前的查询返回 3 条。

select customer, year, product, sum(sales), text_filter(customer), text_filter(product)

from t1 groupbygrouping sets TEXT_FILTER '*2' FILL UP ((customer, year),(product));

SORT MATCHES TO TOP 用于提高匹配记录。对于每个分组集,将对其分组记录进行排序。

select customer, year, product, sum(sales), text_filter(customer), text_filter(product)

from t1 groupbygrouping sets TEXT_FILTER '*2' FILL UP SORT MATCHES TO TOP((customer, year),(product));

STRUCTURED RESULT 为每个分组集创建一张临时表,并且可选地,为总览表也创建一张。表"#GN1" 为 分组集(customer, year),表"#GN2" 为分组集(product)。注意,每张表只含有一列相关列。也就是说,表"#GN1"不包含列"product",而表"#GN2"不包含列"customer" and "year"。

select customer, year, product, sum(sales) from t1 groupbygrouping sets STRUCTURED RESULT((customer, year),(product));

select * from"#GN1";

select * from"#GN2";

WITH OVERVIEW 为总览表创建临时表"#GN0"。

select customer, year, product, sum(sales)

from t1 groupbygrouping sets structured result WITH OVERVIEW((customer, year),(product));

select * from"#GN0";

select * from"#GN1";

select * from"#GN2";

用户可以通过使用 PREFIX 关键字修改临时表的名字。注意,名字必须以临时表的前缀'#'开始,下面与上面结果是一样,只是临时表名不一样而已:

select customer, year, product, sum(sales)

from t1

groupbygrouping sets STRUCTURED RESULT WITH OVERVIEW PREFIX '#MYTAB'((customer, year),(product));

select * from"#MYTAB0";

select * from"#MYTAB1";

select * from"#MYTAB2";

当相应的会话被关闭或用户执行 drop 命令,临时表被删除。 临时列表是显示在m_temporary_tables。

select * from m_temporary_tables;

MULTIPLE RESULTSETS 返回多个结果的结果集。在 SAP HANA Studio 中,以下查询将返回三个结果集:一个为总览表,两个为分组集。

select customer, year, product, sum(sales) from t1 groupbygrouping sets MULTIPLE RESULTSETS((customer, year),(product));

7.2.8     UNLOAD
语法:

UNLOAD <table_name>

描述:

UNLOAD 语句从内存中卸载列存储表, 以释放内存。表将在下次访问时重新加载。

例子:

在下面的例子中,表 a_table 将从内存中卸载。

UNLOAD a_table;

卸载表的状态可以通过以下语句查询:

select loaded from m_cs_tables where table_name = 't1';

7.2.9     UPDATE
语法

UPDATE  [<schema_name>.]<table_name>  [ AS <alias_name> ] <set_clause> [ WHERE <condition> ]

<set_clause> ::= SET {<column_name> = <expression>},...

关于表达式的详情,请参见 Expressions。

<condition> ::= <condition> OR <condition> | <condition> AND <condition> | NOT <condition> | ( <condition> ) | <predicate>

关于谓词的详情,请参见 Predicates。

描述:

UPDATE 语句修改满足条件的表中记录的值。如果 WHERE 子句中条件为真,将分配该列至表达式的结果中。如果省略了 WHERE 子句,语句将更新表中所有的记录。

例子:

CREATETABLE T (KEYINTPRIMARYKEY, VAL INT);

INSERTINTO T VALUES (1, 1);

INSERTINTO T VALUES (2, 2);

如果 WHERE 条件中的条件为真,记录将被更新。

UPDATE T SET VAL = VAL + 1 WHEREKEY = 1;

如果省略了 WHERE 子句,将更新表中所有的记录。

UPDATE T SET VAL = KEY + 10;

7.3系统管理语句
7.3.1     SET SYSTEM LICENSE
语法:

SET SYSTEM LICENSE '<license key>'

描述:

安装许可证密钥的数据库实例。许可证密钥(<license key>="">) 将从许可证密钥文件中复制黏贴。

执行该命令需要系统权限 LICENSE ADMIN。

例子:

SETSYSTEM LICENSE '----- Begin SAP License -----

SAPSYSTEM=HD1

HARDWARE-KEY=K4150485960

INSTNO=0110008649

BEGIN=20110809

EXPIRATION=20151231

LKEY=...

SWPRODUCTNAME=SAP-HANA

SWPRODUCTLIMIT=2147483647

SYSTEM-NR=00000000031047460'

7.3.2     ALTER SYSTEM ALTER CONFIGURATION
语法:

ALTER CONFIGURATION (<filename>, <layer>[, <layer_name>]) SET | UNSET <parameter_key_value_list> [ WITH RECONFIGURE]

语法元素:

<filename> ::= <string_literal>

行存储引擎配置的情况下,文件名是'indexserver.ini'。 所使用的文件名必须是一个位于’DEFAULT’层的 ini 文件。如果选择文件的文件名在所需的层不存在,该文件将用 SET 命令创建。

<layer> ::= <string_literal>

设置配置变化的目标层。 该参数可以是'SYSTEM'或'HOST'。 SYSTEM 层为客户设置的推荐层。 HOST层应该一般仅可用于少量的配置,例如, daemon.ini 包含的参数。

<layer_name> ::= <string_literal>

如果上述的层设为’HOST’, layer_name 将用于设置目标 tenant 名或者目标主机名。例如,

'selxeon12' 为目标 'selxeon12' 主机名。

SET

SET 命令更新键值,如果该键已存在,或者需要的话插入该键值。

UNSET

UNSET 命令删除键及其关联值。

<parameter_key_value_list> ::={(<section_name>,<parameter_name>) = <parameter_value>},...

指定要修改的 ini 文件的段、键和值语句如下:

<section_name> ::= <string_literal>

将要修改的参数段名:

<parameter_name> ::= <string_literal>

将要修改的参数名:

<parameter_value> ::= <string_literal>

将要修改的参数值。

WITH RECONFIGURE

当指定了 WITH RECONFIGURE,配置的修改将直接应用到 SAP HANA 数据库实例。

当未指定 WITH RECONFIGURE,新的配置将写到文件 ini 中,然而,新的值将不会应用到当前运行系统中,只在数据库下次的启动时应用。这意味 ini 文件中的内容可能和 SAP HANA 数据库使用的实际配置值存在不一致。

描述:

设置或删除 ini 文件中的配置参数。 ini 文件配置用于 DEFAULT, SYSTEM, HOST 层。

注意: DEFAULT 层配置不能使用此命令更改或删除。

以下为 ini 文件位置的例子:

DEFAULT: /usr/sap/<SYSTEMNAME>/HDB<INSTANCENUMBER>/exe/config/indexserver.ini

SYSTEM: /usr/sap/<SYSTEMNAME>/SYS/global/hdb/custom/config/indexserver.ini

HOST: /usr/sap/<SYSTEMNAME>/HDB<INSTANCENUMBER>/<HOSTNAME>/indexserver.ini

配置层的优先级: DEFAULT < SYSTEM < HOST。这表示 HOST 层具有最高优先级,跟着是 SYSTEM层,最后是 DEFAULT 层。最高优先级的配置将应用到运行环境中。 如果最高优先级的配置被删除,具有下一个最高优先级的配置将被应用。

系统和监控视图:

目前可供使用的 ini 文件在系统表 M_INIFILES 列出,并且当前配置在系统表 M_INIFILE_CONTENTS可见。

例子:

修改系统层配置的例子如下:

ALTERSYSTEMALTER CONFIGURATION ('filename', 'layer') SET ('section1', 'key1') = 'value1', ('section2','key2') = 'value2', ... [WITH RECONFIGURE];

ALTERSYSTEMALTER CONFIGURATION ('filename', 'layer', 'layer_name' ) UNSET ('section1', 'key1'),('section2'), ...[WITH RECONFIGURE];

7.3.3     ALTER SYSTEM ALTER SESSION SET
语法:

ALTER SYSTEM ALTER SESSION <session_id> SET <key> = <value>

语法元素:

<session_id> ::= <unsigned_integer>

应当设置变量的会话的 ID。

<key> ::= <string_literal>

会话变量的键值,最大长度为 32 个字符。

<value> ::= <string_literal>

会话变量的期望值,最大长度为 512 个字符。

描述:

使用该命令,你可以设置数据库会话的会话变量:

注意:有几个只读会话变量,你不能使用该命令修改值: APPLICATION, APPLICATIONUSER,TRACEPROFILE。

会话变量可以使用 SESSION_CONTEXT 函数获得,使用 ALTER SYSTEM ALTER SESSION UNSET 命令取消设置。

例子:

在以下的例子中,你在会话 200006 将变量'MY_VAR' 设为 'dummy':

ALTERSYSTEMALTER SESSION 200006 SET'MY_VAR'= 'dummy';

7.3.4     ALTER SYSTEM ALTER SESSION UNSET
语法:

ALTER SYSTEM ALTER SESSION <session_id> UNSET <key>

语法元素:

<session_id> ::= <unsigned_integer>

应当取消设置变量的会话 ID。

<key> ::= <string_literal>

会话变量的键值, 最大长度为 32 个字符。

描述:

使用该命令,你可以取消设置数据库会话的会话变量。

会话可以通过 SESSION_CONTEXT 函数获得。

例子:

获得当前会话的会话变量:

SELECT * FROM M_SESSION_CONTEXT WHERE CONNECTION_ID = CURRENT_CONNECTION

从特定会话中删除会话变量:

ALTERSYSTEMALTER SESSION 200001 UNSET 'MY_VAR';

7.3.5     ALTER SYSTEM CANCEL [WORK IN] SESSION
语法

ALTER SYSTEM CANCEL [WORK IN] SESSION <session_id>

语法元素:

<session_id> ::= <string_literal>

所需会话的会话 ID。

描述:

通过指定会话 ID 取消当前正在运行的语句。取消的会话将在取消后回滚,执行中的语句将返回错误代码 139(current operation cancelled by request and transaction rolled back)。

例子:

你可以使用下面的查询来获取当前的连接 ID 和它们执行的语句。

SELECT C.CONNECTION_ID, PS.STATEMENT_STRING

FROM M_CONNECTIONS C JOIN M_PREPARED_STATEMENTS PS

ON C.CONNECTION_ID = PS.CONNECTION_ID AND C.CURRENT_STATEMENT_ID = PS.STATEMENT_ID

WHERE C.CONNECTION_STATUS = 'RUNNING'AND C.CONNECTION_TYPE = 'Remote'

利用上文中的查询语句获得的连接 ID,你现在可以取消一条正在运行的查询,语句如下:

ALTERSYSTEM CANCEL SESSION '400037';

7.3.6     ALTER SYSTEM CLEAR SQL PLAN CACHE
语法:

ALTER SYSTEM CLEAR SQL PLAN CACHE

描述:

SQL PLAN CACHE 存储之前执行的 SQL 语句生成的计划, SAP HANA 数据库使用该计划缓存加速查询语句的执行,如果同样的 SQL 语句 再次执行。计划缓存也收集关于计划准备和执行的数据。

你可以从以下的监控视图中找到更多有关 SQL 缓存计划的内容:

M_SQL_PLAN_CACHE, M_SQL_PLAN_CACHE_OVERVIEW

ALTER SYSTEM CLEAR SQL PLAN CACHE 语句删除所有当前计划缓存没有执行的 SQL 计划。该命令还可以从计划缓存中删除所有引用计数为 0 的计划,并重置所有剩余计划的统计数据。最后,该命令也重置监控视图 M_SQL_PLAN_CACHE_OVERVIEW 的内容。

例子:

ALTERSYSTEM CLEAR SQLPLANCACHE

7.3.7     ALTER SYSTEM CLEAR TRACES
语法:

ALTER SYSTEM CLEAR TRACES (<trace_type_list>)

语法元素:

<trace_type_list> ::= <trace_type> [,...]

通过在逗号分隔的列表中加入多个 trace_types,您可以同时清除多个追踪。

<trace_type> ::= <string_literal>

你可以通过设置 trace_type 为以下类型之一,有选择地清除特定的追踪文件:

描述:

你可以使用 ALTER SYSTEM CLEAR TRACES 清除追踪文件中的追踪内容。当您使用此命令所有开设了 SAP HANA 数据库的跟踪文件将被删除或清除。在分布式系统中,该命令将清除所有主机上的所有跟踪文件。

使用此命令可以减少大跟踪文件使用的磁盘空间,例如,当追踪组件设为 INFO 或 DEBUG。

你可以使用系统表 M_TRACEFILES, M_TRACEFILE_CONTENTS 各自监控追踪文件及其内容。

例子:

要清除警告的跟踪文件,使用下面的命令:

ALTERSYSTEM CLEAR TRACES('ALERT');

要清除警告和客户端跟踪文件,使用下面的命令:

ALTERSYSTEM CLEAR TRACES('ALERT', 'CLIENT');

7.3.8     ALTER SYSTEM DISCONNECT SESSION
语法:

ALTER SYSTEM DISCONNECT SESSION <session_id>

语法元素:

<session_id> ::= <string_literal>

要断开连接的会话 ID。

描述:

你使用 ALTER SYSTEM DISCONNECT SESSION 来断开数据库指定的会话。在断开连接之前,与会话相关联的所有正在运行的操作将被终止。

例子:

你使用如下的命令获得空闲会话的会话 ID:

SELECT CONNECTION_ID, IDLE_TIME FROM M_CONNECTIONS WHERE CONNECTION_STATUS = 'IDLE'AND CONNECTION_TYPE = 'Remote'ORDERBY IDLE_TIME DESC

你使用如下命令断开会话连接:

ALTERSYSTEMDISCONNECT SESSION '400043'

7.3.9     ALTER SYSTEM LOGGING
语法:

ALTER SYSTEM LOGGING <on_off>

语法元素:

<on_off> ::= ON | OFF

描述:

启动或禁用日志。

日志记录被禁用后,任何日志条目将不会持久化。当完成一个保存点,只有数据区被写入数据。

这可能会导致损失已提交的事务,当 indexserver 在加载中时被终止。在终止的情况下,你必须截断,并再次插入的所有数据。

启用日志记录后,你必须执行一个保存点,以确保所有的数据都保存,并且你必须执行数据备份,否则你将不能恢复这些数据。

只在初次加载时使用该命令!

你可以使用 ALTER TABLE ... ENABLE/DISABLE DELTA LOG 为单个列表完成操作。

7.3.10   ALTER SYSTEM RECLAIM DATAVOLUME
语法:

ALTER SYSTEM RECLAIM DATAVOLUME [SPACE] [<host_port>] <percentage_of_overload_size>

<shrink_mode>

语法元素:

<host_port> ::= 'host_name:port_number'

指定服务器在持久层应减少的大小:

<percentage_of_overload_size> ::= <int_const>

指定过载的数据量应减少的百分比。

<shrink_mode> ::= DEFRAGMENT | SPARSIFY

指定持续层减少大小的策略,默认值为 DEFRAGEMENT。请注意, SPARSIFY 尚未支持,并保留以备将来使用

描述:

该命令应在持久层中未使用的空间释放时使用。 它减少数据量到过载量的 N%; 它的工作原理就像一个硬盘进行碎片整理,散落在页面的数据将被移动到数据量的前端和数据量尾端的自由空间将被截断。

如果省略了<host_port> ,该语句将持久化地分配至所有服务器。

例子:

在下面的例子中,架构中的所有服务器持久层将进行碎片整理,并减少至过载尺寸的 120%。

ALTERSYSTEM RECLAIM DATAVOLUME 120 DEFRAGMENT

7.3.11   ALTER SYSTEM RECLAIM LOG
语法:

ALTER SYSTEM RECLAIM LOG

描述:

当数据库中已经积累了大量的日志段时,你可以使用此命令,收回磁盘空间目前未使用的日志段。

日志段的积累,可以以多种方式引起。 例如,当自动日志备份不可长期操作或日志保存点被阻塞很长时间, 当这样的问题发生时,你只能在修复日志积累的根本原因后, 使用 ALTER SYSTEM CLAIM LOG 命令。

例子:

你回收目前未使用的日志段的磁盘空间,使用下面的命令:

ALTERSYSTEM RECLAIM LOG

7.3.12   ALTER SYSTEM RECLAIM VERSION SPACE
语法:

ALTER SYSTEM RECLAIM VERSION SPACE

描述:

执行 MVCC 版本垃圾回收来重用资源。

7.3.13   ALTER SYSTEM RECONFIGURE SERVICE
语法:

ALTER SYSTEM RECONFIGURE SERVICE (<service_name>,<host>,<port>)

语法元素:

<service_name> ::= <string_literal>

你希望重新配置的服务名称。关于可用的服务类型的列表,请参阅监控视图 M_SERVICE_TYPES。

<host> ::= <string_literal>

<port> ::= <integer>

你将重新配置服务的主机和端口号。

描述:

你可以使用 ALTER SYSTEM RECONFIGURE SERVICE 通过应用当前配置参数,重新配置指定的服务。

在使用没有 RECONFIGURE 选项的 ALTER CONFIGURATION 修改多个配置参数使用该命令。参见ALTER SYSTEM ALTER CONFIGURATION。

欲重新配置特定的服务,指定<host> 和 <port>的 值, 而<service_name> 留空。

欲重新配置一种类型的所有服务,指定<service_name> 的值, 而 host> 和 <port>留空。

欲重新配置所有服务,所有参数留空。

例子:

你可以使用以下命令来重新配置 ld8520.sap.com 主机上所有使用端口号 30303 的服务:

ALTERSYSTEM RECONFIGURE SERVICE ('','ld8520.sap.com',30303)

你可以使用以下命令重新配置类型 indexserver 的所有服务:

ALTERSYSTEM RECONFIGURE SERVICE ('indexserver','',0)

参见 ALTER SYSTEM ALTER CONFIGURATION。

7.3.14   ALTER SYSTEM REMOVE TRACES
语法:

ALTER SYSTEM REMOVE TRACES (<host>, <trace_file_name_list>)

<trace_file_name_list> ::= <trace_file>,...

语法元素:

<host> :== <string_literal>

将要删除追踪记录的主机名。

<trace_file_name_list> ::= <trace_file> [,..]

你可以通过在逗号分隔的列表中添加多条 trace_file 记录,同时删除多条追踪记录。

<trace_file> :== see table below.

你可以将 trace_file 设置为以下类型之一:

描述:

你可以使用该命令删除指定主机中的追踪文件,减少大追踪文件占用的硬盘空间。当某个服务的追踪文件已打开,则不能被删除。这种情况下,你可以使用 ALTER SYSTEM CLEAR TRACES 命令清除追踪文件。

例子:

你使用以下命令删除主机 lu873.sap.com 上所有 ALERT 追踪文件:

ALTERSYSTEM REMOVE TRACES ('lu873.sap.com', '*alert_*.trc');

参见 ALTER SYSTEM CLEAR TRACES。

7.3.15   ALTER SYSTEM RESET MONITORING VIEW
语法:

ALTER SYSTEM RESET MONITORING VIEW <view_name>

语法元素:

<view_name> ::= <identifier>

重设可重置监控视图的名字。

注意:不是所有监控视图可以使用该命令进行重置。可重设视图的名字后缀为"_RESET",你可以通过其名字判断是否可以重置。

描述:

你可以使用此命令重置指定的监视视图的统计数据。

你可以使用此命令来定义测量的起始点。首先,你重置监控视图,然后执行一个操作。当该操作完成后,查询监控视图"_RESET"版本获得从上次重置之后收集到的统计信息。

例子:

在以下的例子中,你重置"SYS"."M_HEAP_MEMORY_RESET"监控视图:

ALTERSYSTEMRESET MONITORING VIEW"SYS"."M_HEAP_MEMORY_RESET"

7.3.16   ALTER SYSTEM SAVE PERFTRACE
语法:

ALTER SYSTEM SAVE PERFTRACE [INTO FILE <file_name>]

语法元素:

<file_name> ::= <string_literal>

原始性能数据保存的文件。

描述:

你可以使用命令收集.prf 文件中的原始性能数据,保存该信息至.tpt 文件。 .tpt 文件保存在 SAP HANA 数据库实例的追踪文件目录中。如果你未指定文件名,则文件将保存为'perftrace.tpt'。

性能追踪数据文件(.tpt)可以从'SAP HANA Computing Studio'->Diagnosis-Files 下载,之后性能追踪可以利用 SAP HANA 实例中的 HDBAdmin 加载和分析。

监控视图:

性能文件的状态可以从 M_PERFTRACE 监控。

例子:

你可以使用如下命令将原始性能数据保存至'mytrace.tpt'文件:

ALTERSYSTEM SAVE PERFTRACE INTO FILE 'mytrace.tpt'

7.3.17   ALTER SYSTEM SAVEPOINT
语法:

ALTER SYSTEM SAVEPOINT

描述:

持久层管理器上执行保存点。 保存点是一个数据库的完整连续镜像保存在磁盘上的时间点,该镜像可以用于重启数据库。

通常情况下,保存点定期执行,由[persistence]部分的参数 savepoint_interval_s 配置。 对于特殊的(通常测试)的目的,保存点可能会被禁用。在这种情况下,你可以使用此命令来手动执行保存点。

7.3.18   ALTER SYSTEM START PERFTRACE
语法:

ALTER SYSTEM START PERFTRACE [<user_name>] [<application_user_name>] [PLAN_EXECUTION][FUNCTION_PROFILER] [DURATION <duration_seconds>]

语法元素:

<user_name> ::= <identifier>

限制 perftrace 收集为指定的 SQL 用户名。

<application_user_name> ::= <identifier>

限制为指定的 SQL 用户名收集 perftrace,应用用户可以通过会话变量 APPLICATIONUSER 定义。

PLAN_EXECUTION

收集计划执行细节:

FUNCTION_PROFILER

收集函数级别细节:

<duration_seconds> ::= <numeric literal>

经过 duration_seconds 后, perftrace 自动停止。如果未指定该参数,仅停止有 ALTER SYSTEM STOP PERFTRACE 的 perftrace。

描述:

开始性能追踪。

利用'Explain Plan' 或 'Visualize Plan',你可以在逻辑级别查看语句的执行。利用'Perfomance Trace',语句的执行将记录在线程和函数级别。

一次只能有一个 perftrace 活动。

性能追踪文件状态可以从 M_PERFTRACE 监控。

例子:

ALTERSYSTEM START PERFTRACE sql_user app_user PLAN_EXECUTION FUNCTION_PROFILER

7.3.19   ALTER SYSTEM STOP PERFTRACE
语法:

ALTER SYSTEM STOP PERFTRACE

描述:

停止先前启动的性能追踪。停止后,需要利用 ALTER SYSTEM SAVE PERFTRACE 收集和保存性能追踪数据。

例子:

ALTERSYSTEM STOP PERFTRACE

7.3.20   ALTER SYSTEM STOP SERVICE
语法:

ALTER SYSTEM STOP SERVICE <host_port> [IMMEDIATE [WITH COREFILE]]

语法元素:

<host_port> ::= <host_name:port_number> | ('<host_name>',<port_number>)

将停止的服务的位置。

IMMEDIATE

立即停止(中止)服务,无需等待正常关机。

WITH COREFILE

写入 core 文件。

描述:

停止或终止单个或者多个服务。 通常,该服务将由守护进程重新启动。

修改了不能在线更改的参数之后使用。

例子:

ALTERSYSTEM STOP SERVICE 'ld8520:30303'

UNSET SYSTEM LICENSE ALL

语法:

7.3.21   UNSET SYSTEM LICENSE ALL
描述:

删除所有已安装的许可证密钥。 使用此命令后,系统将被立即锁定,并且需要一个新的有效许可证密钥,然后才可以继续使用。执行该命令需要有 LICENSE ADMIN 权限。

例子:

UNSET SYSTEM LICENSE ALL

7.4会话管理语句
7.4.1     CONNECT
语法:

CONNECT <connect_option>

语法元素:

<connect_option> ::=<user_name> PASSWORD <password> | WITH SAML ASSERTION '<xml>'

描述:

通过指定 user_name 和密码或者指定 SAML 断言连接数据库实例。

例子:

CONNECT my_user PASSWORD myUserPass1

7.4.2     SET HISTORY SESSION
语法:

SET HISTORY SESSION TO <when>

语法元素:

<when>:

用户应该指定一个确切的会话旅行的时间。

<when> ::= NOW | COMMIT ID <commit_id> | UTCTIMESTAMP <utc_timestamp>

描述:

SET HISTORY SESSION 使当前会话查看历史记录表过去的版本。用户可以指定 COMMIT ID 中的版本或 UTCTIMESTAMP 格式,或者通过指定 NOW 回到当前版本。发布带有 COMMIT ID 或UTCTIMESTAMP 的 SET HISTORY SESSION 之后,当前会话中看到了一个旧版本的历史记录表,而不能写进系统任何东西。如果给定了 NOW 选项,当前会话恢复到一个正常的会话,看到当前版本的历史记录表,并能写入系统。 此命令只适用于历史记录表,普通表的可见性不会受到影响。

例子:

SELECT CURRENT_UTCTIMESTAMP FROM SYS.DUMMY

SELECT LAST_COMMIT_ID FROM M_HISTORY_INDEX_LAST_COMMIT_ID WHERE SESSION_ID =

CURRENT_CONNECTION COMMIT

SET HISTORY SESSION TO UTCTIMESTAMP '2012-03-09 07:01:41.428'

SET HISTORY SESSION TO NOW

7.4.3     SET SCHEMA
语法:

SET SCHEMA <schema_name>

描述:

你可以修改会话的当前schema。 如果表前不限制schema,则使用当前用户的schema。

7.4.4     SET [SESSION]
语法:

SET [SESSION] <key> = <value>

(SESSION选项可以省略)

语法元素:

<key> ::= <string_literal>

会话变量的键值,最大长度为 32 个字符。

<value> ::= <string_literal>

会话变量的期望值,最大长度为 512 个字符。

描述:

你可以使用该命令设置你数据库会话的会话变量,通过提供键值对。

注意:有几个只读会话变量,你不能使用该命令修改值: APPLICATION, APPLICATIONUSER,TRACEPROFILE。

会话变量可以使用 SESSION_CONTEXT 函数获得,使用 UNSET [SESSION]命令取消设置。

例子:

SET'MY_VAR' = 'dummy';

SELECT SESSION_CONTEXT('MY_VAR') FROM dummy;

UNSET 'MY_VAR';

7.4.5     UNSET [SESSION]
语法:

UNSET [SESSION] <key>

语法元素:

<key> ::= <string_literal>

会话变量的键值,最大长度为 32 个字符。

描述:

你可以使用 UNSET [SESSION]取消设置当前会话的会话变量。

注意:有几个只读会话变量,你不能使用该命令修改值: APPLICATION, APPLICATIONUSER,TRACEPROFILE。

例子:

SET'MY_VAR'= 'dummy';

SELECT SESSION_CONTEXT('MY_VAR') FROM dummy;

UNSET 'MY_VAR';

7.5事务管理语句
7.5.1     COMMIT
语法:

COMMIT

描述:

该系统支持事务一致性,保证了当前作业是完全应用到系统中或者弃用。如果用户希望持久地应用当前作业至系统中,用户应使用 COMMIT 命令。 如果 COMMIT 命令发出后,并成功处理,任何改变将应用到当前事务完成的系统中,改变也将对其他未来开始的作业可见。通过 COMMIT 命令已经承诺的工作,将不能恢复。 分布式系统中,遵守标准的两阶段提交协议。在第一阶段, 事务处理协调器将询问每一位参与者是否准备提交,并将结果发送到第二阶段的参与者。 COMMIT 命令只适用于'autocommit'的禁用会话。

例子:

COMMIT

7.5.2     LOCK TABLE
语法:

LOCK TABLE <table_name> IN EXCLUSIVE MODE [NOWAIT]

描述:

LOCK TABLE 命令显式地尝试获取表的互斥锁。如果指定了 NO WAIT 选项, 其只是试图获得表的锁。如果指定了 NOWAIT 选项不能获得锁,将返回一个错误代码,但是当前事务将回滚。

例子:

LOCKTABLE t1 INEXCLUSIVEMODE NOWAIT

7.5.3     ROLLBACK
语法:

ROLLBACK

描述:

该系统支持事务一致性,保证了当前作业是完全应用到系统中或者弃用。在事务的中间过程, 可以显式恢复,因为由于 ROLLBACK 命令,事务尚未执行。发布 ROLLBACK 命令后, 将完全恢复事务系统做的任何变化,当前会话将处于闲置状态。 ROLLBACK 命令只适用于'autocommit'的禁用会话。

例子:

ROLLBACK

7.5.4     SET TRANSACTION
语法:

SET TRANSACTION <isolation_level> | <transaction_access_mode>

语法元素:

isolation_level ::= ISOLATION LEVEL <level>

隔离级别设置数据库中的数据语句级读一致性。如果省略了 isolation_level,默认值为 READ COMMITTED。

level ::= READ COMMITTED(提交读取) | REPEATABLE READ(可重复读) | SERIALIZABLE(序列化读)

READ COMMITTED

READ COMMITTED 隔离级别提供事务过程中语句级别读一致性。 在语句开始执行时,事务中的每条语句都能看到已提交状态的数据。这意味着在同一事务中,每个语句可能会看到执行时数据库中不同的快照,因为数据可以在事务中提交。

REPEATABLE READ/SERIALIZABLE

REPEATABLE READ/SERIALIZABLE 隔离级别提供了事务级快照隔离。事务所有语句共享数据库同样的快照。该快照包含所有已提交的事务开始的时间以及事务本身的修改。

transaction_access_mode ::= READ ONLY | READ WRITE

SQL 事务访问模式控制事务是否可以在执行期间修改数据。如果省略了transaction_access_mode,默认值为 READ ONLY。

READ ONLY

如果设置了 READ ONLY 访问模式,则只允许只读的 SELECT 语句。如果在这种模式下尝试更新或插入操作,会抛出一个异常。

READ WRITE

如果设置了 READ WRITE 访问模式,在一个事务中的语句可以按需自由地读取或更改数据库的数据。

描述:

SAP HANA 数据库使用多版本并发控制 (MVCC) 确保读取操作的一致性(提交读取隔离级别+MVCC,可以解决数据不可重复读的问题)。并发的读操作不阻塞并发写操作数据库中的数据的一致视图。并发的读操作不阻塞并发写数据库数据的一致视图。更新操作通过插入数据的新版本而不是覆盖已有数据执行。

指定的隔离级别确定将要使用的锁操作类型。系统同时支持语句级快照隔离和事务级快照隔离。

 对于语句级快照隔离,使用READ COMMITED。

 对于事务级快照隔离,使用REPEATABLE READ 或者 SERIALIZABLE。

 

在一个事务中,当记录被插入、更新或删除时,系统对事务执行中,受影响的记录设置互斥锁的持续时间,也对受影响的表设置锁。这样可以保证当表中的记录正在更新时,该表不会被删除或更改。数据库在事务结束时释放这些锁。

注意:读取操作不设置任何数据库中表或行的锁,无论使用何种隔离级别。

数据定义语言和事务隔离

数据定义语言(DDL) 语句(CREATE TABLE, DROP TABLE, CREATE VIEW, etc )总是立即对随后的 SQ 语句生效,无论使用何种隔离级别。对于这种行为的一个例子,请考虑下面的顺序:

1. 一个长期运行 SERIALIZABLE 的隔离事务在表 C 开始操作。

2. 一些 DDL 语句在事务外运行,添加一列新列至表 C。

3. 在 SERIALIZABLE 隔离事务内,只要 DDL 语句执行完毕,新生成的列可以要访问。访问发生不论使用何种隔离级别。

例子:

SETTRANSACTION READ COMMITTED;

 

数据库的隔离级别:并发性作用。

l  Read Uncommited(未提交读):没有提交就可以读取到数据(发出了Insert,但没有commit就可以读取到。)很少用。在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。

l  Read Commited(提交读):只有提交后才可以读,常用。这是大多数数据库系统的默认隔离级别(但不是MySQL默认的,MySql默认为可重复读)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。解决了脏读问题。

l  Repeatable Read(可重复读):mysql默认级别, 必需提交才能见到,读取数据时数据被锁住。它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。解决了不可重复读的问题

l  Serialiazble(序列化读):最高隔离级别,串型的,你操作完了,我才可以操作,并发性特别不好。这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。

隔离级别

是否存在脏读

是否存在不可重复读

是否存在幻读

Read Uncommitted(未提交读)

Y

Y

Y

Read Commited(提交读)

N

Y(可采用悲观锁解决)

Y

Repeatable Read(可重复读)

N

N

Y

Serialiazble(序列化读)

N

N

N

事务并发时可能出现问题:脏读、不可重复读、幻读

脏读:没有提交就可以读取到数据称为脏读

不可重复读:再重复读一次,数据与你上的不一样。称不可重复读。

幻读:在查询某一条件的数据,开始查询的后,别人又加入或删除些数据,再读取时与原来的数据不一样了。

 

脏读(Drity Read):某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。

不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。

 幻读(Phantom Read):在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几行(Row)数据,而另一个事务却在此时插入了新的几行数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。

 

设置 JDBC 事务隔离级别(注意多数数据库都不支持所有的隔离级别):

1  java.sql.Connection.TRANSACTION_READ_COMMITTED

2  java.sql.Connection.TRANSACTION_READ_UNCOMMITTED

4  java.sql.Connection.TRANSACTION_REPEATABLE_READ

8  java.sql.Connection.TRANSACTION_SERIALIZABLE

一般我们将级别设置为1(提交读)级别后,再通过程序的方式来避免“不可重复读”问题。

如果我们在Hibernate中没有设置数据库的隔离级别,则默认是依赖于数据库的,所以我们最好设置。

银行系统需要将数据库的隔离级别设置成“可重复读”。

一、悲观锁
悲观锁:具有排他性(我锁住当前数据后,别人看到不此数据)

悲观锁一般由数据机制来做到的。select ... for update

1、  悲观锁的实现
通常依赖于数据库机制,在整修过程中将数据锁定,其它任何用户都不能读取或修改(如:必需我修改完之后,别人才可以修改)

2、  悲观锁的适用场景:
悲观锁一般适合短事务比较多(如某一数据取出后加1,立即释放)

长事务占有时间(如果占有1个小时,那么这个1小时别人就不可以使用这些数据),不常用。

3、  实例:
 
     
 

 

 

 

 

 

 
用户1、用户2 同时读取到数据,但是用户2先 -200,这时数据库里的是800,现在用户1也开始-200,可是用户1刚才读取到的数据是1000,现在用户用刚刚一开始读取的数据1000-200为800,而用户1在更新时数据库里的是用房更新的数据800,按理说用户1应该是800-200=600,而现在是800,这样就造成的更新丢失。这种情况该如何处理呢,可采用两种方法:悲观锁、乐观锁。先看看悲观锁:用户1读取数据后,用锁将其读取的数据锁上,这时用户2是读取不到数据的,只有用户1释放锁后用户2才可以读取,同样用户2读取数据也锁上。这样就可以解决更新丢失的问题了。

二、乐观锁
乐观锁:不是锁,是一种冲突检测机制,如Hibernate就是这样。

        乐观锁的并发性较好,因为我改的时候,别人随边修改。

        乐观锁的实现方式:常用的是版本的方式(每个数据表中有一个版本字段version,某一个用户更新数据后,版本号+1,另一个用户修改后再+1,当用户更新发现数据库当前版本号与读取数据时版本号不一致(等于小于数据库当前版本号),则更新不了。

7.5.4.1        数据库锁相关概念
为了确保并发用户在存取同一数据库对象时的正确性(即无丢失修改、可重复读、不读“脏”数据),数据库中引入了锁机制。基本的锁类型有两种:排它锁(exclusive locks 记为x 锁)和共享锁(share locks记为 s锁)。加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。

排它锁:若事务t对数据d加x锁,则其它任何事务都不能再对d加任何类型的锁,直至t 释放d 上的x 锁;一般要求在修改数据前要向该数据加排它锁,所以排它锁又称为写锁。

共享锁:若事务t对数据d加s 锁,则其它事务只能对d加 s锁,而不能加x 锁,直至t 释放d 的s 锁;一般要求在读取数据前要向该数据加共享锁,所以共享锁又称为读锁。

7.5.4.1.1      悲观封锁
锁在用户修改之前就发挥作用:
Select ..for update(nowait)
Select * from tab1 for update
用户发出这条命令之后,oracle将会对返回集中的数据建立行级封锁,以防止其他用户的修改。
如果此时其他用户对上面返回结果集的数据进行dml或ddl操作都会返回一个错误信息或发生阻塞。
1:对返回结果集进行update或delete操作会发生阻塞。
2:对该表进行ddl操作将会报:Ora-00054:resource busy and acquire with nowait specified.

原因分析
此时Oracle已经对返回的结果集上加了排它的行级锁,所有其他对这些数据进行的修改或删除操作都必须等待这个锁的释放,产生的外在现象就是其他的操作将发生阻塞,这个这个操作commit或rollback.
同样这个查询的事务将会对该表加表级锁,不允许对该表的任何ddl操作,否则将会报出ora-00054错误::resource busy and acquire with nowait specified.

7.5.4.1.2      乐观封锁
乐观的认为数据在select出来到update进取并提交的这段时间数据不会被更改。这里面有一种潜在的危险就是由于被选出的结果集并没有被锁定,是存在一种可能被其他用户更改的可能。因此Oracle仍然建议是用悲观封锁,因为这样会更安全。乐观锁一般通过程序版本控制来实现,如Hibernate

7.5.4.1.3      阻塞
定义:
当一个会话保持另一个会话正在请求的资源上的锁定时,就会发生阻塞。被阻塞的会话将一直挂起,直到持有锁的会话放弃锁定的资源为止。4个常见的dml语句会产生阻塞
INSERT
UPDATE
DELETE
SELECT…FOR UPDATE


INSERT

Insert发生阻塞的唯一情况就是用户拥有一个建有主键约束的表。当2个的会话同时试图向表中插入相同的数据时,其中的一个会话将被阻塞,直到另外一个会话提交或会滚。一个会话提交时,另一个会话将收到主键重复的错误。回滚时,被阻塞的会话将继续执行。

UPDATE 和DELETE当执行Update和delete操作的数据行已经被另外的会话锁定时,将会发生阻塞,直到另一个会话提交或会滚。

Select …for update

当一个用户发出select..for update的错作准备对返回的结果集进行修改时,如果结果集已经被另一个会话锁定,就是发生阻塞。需要等另一个会话结束之后才可继续执行。可以通过发出 select… for update nowait的语句来避免发生阻塞,如果资源已经被另一个会话锁定,则会返回以下错误:Ora-00054:resource busy and acquire with nowait specified.

7.5.4.1.4      死锁-deadlock
定义:当两个用户希望持有对方的资源时就会发生死锁.
即两个用户互相等待对方释放资源时,oracle认定为产生了死锁,在这种情况下,将以牺牲一个用户作为代价,另一个用户继续执行,牺牲的用户的事务将回滚.
例子:
1:用户1对A表进行Update,没有提交。
2:用户2对B表进行Update,没有提交。
此时双反不存在资源共享的问题。
3:如果用户2此时对A表作update,则会发生阻塞,需要等到用户一的事物结束。
4:如果此时用户1又对B表作update,则产生死锁。此时Oracle会选择其中一个用户进行会滚,使另一个用户继续执行操作。
起因:
Oracle的死锁问题实际上很少见,如果发生,基本上都是不正确的程序设计造成的,经过调整后,基本上都会避免死锁的发生。

7.6访问控制语句
7.6.1     ALTER SAML PROVIDER
ALTER SAML PROVIDER <saml_provider_name> WITH SUBJECT <subject_name> ISSUER <issuer_distinguished_name>

语法元素:

<subject_name> ::=

<string_literal>

<issuer_distinguished_name> ::=

<string_literal>

描述:

ALTER SAML PROVIDER 语句修改 SAP HANA 数据库已知的 SAML 提供商的属性。

<saml_provider_name> 必须是一个现有的 SAML 提供商。只有拥有系统权限 USER ADMIN 的数据库

用户允许修改 SAML 提供商。

<subject_name> 以及 <issuer_distinguished_name>是 SAML 身份提供程序中证书对应的名字。

系统和监控视图:

SAML_PROVIDER:显示所有 SAML 提供商主题名和 issuer_name。

7.6.2     ALTER USER
语法:

ALTER USER <user_name> <alter_user_option>

语法元素:

<alter_user_option> ::=PASSWORD <password> [<user_parameter_option>]

| <user_parameter_option>

| IDENTIFIED EXTERNALLY AS <external_identity> [<user_parameter_option>]

| RESET CONNECT ATTEMPTS

| DROP CONNECT ATTEMPTS

| DISABLE PASSWORD LIFETIME

| FORCE PASSWORD CHANGE

| DEACTIVATE [USER NOW]

| ACTIVATE [USER NOW]

| DISABLE <authentication_mechanism>

| ENABLE <authentication_mechanism>

| ADD IDENTITY <provider_identity>...

| ADD IDENTITY <external_identity> FOR KERBEROS

| DROP IDENTITY <provider_info>...

| DROP IDENTITY FOR KERBEROS

| <string_literal>

<authentication_mechanism> ::= PASSWORD | KERBEROS | SAML

<provider_identity> ::=<mapped_user_name> FOR SAML PROVIDER <saml_provider_name>| <external_identity> FOR KERBEROS

<mapped_user_name> ::=ANY | <string_literal>

<saml_provider_name> ::=<simple_identifier>

<provider_info> ::= FOR SAML PROVIDER <saml_provider_name>

<password> ::=<letter_or_digit>...

<user_parameter_option> ::=<set_user_parameters>  [<clear_user_parameter_option>] | <clear_user_parameter_option>

<set_user_parameters> ::=SET PARAMETER CLIENT = <string_literal>

<clear_user_parameter_option> ::=CLEAR PARAMETER CLIENT| CLEAR ALL PARAMETERS

<external_identity> ::=<simple_identifier>

描述:

ALTER USER 语句修改数据库用户。 <user_name>必须指定一个现有的数据库用户。

每个用户可以为自己执行 ALTER USER。但并非所有<alter_user_option>可以由用户自己指定。对于<alter_user_option>其他用户,只有拥有系统权限 USER ADMIN 权限的用户可以执行 ALTER USER。

使用 PASSWORD 创建的用户不能修改为 EXTERNALLY,反之亦然。但他们的<password>或者<external_identity>是可以修改的。

你可以使用此命令更改用户的密码。密码的修改必须遵循当前数据库定义的规则,包括最小密码长度和定义的字符类型(大写、小写、数字、特殊字符)必须是密码的一部分。用户根据指定数据库实例定义的策略,必须定期更换密码,或者由首次连接到数据库实例的用户,自己更改密码。

你可以更改外部认证。外部用户使用外部系统需要进行身份验证,例如, Kerberos 系统。这些用户没有密码,但是有 Kerberos 实体名称。有关外部身份的详细信息,请联系您的域管理员。

<user_parameter_option>可以用来设置、修改或者清除用户参数 CLIENT。

<set_user_parameters>用来为数据库中的用户设置用户参数 CLIENT。

当使用报表时,该用户参数 CLIENT 可以用于限制用户 <user_name>访问有关特定客户端的信息。

<user_parameter_option>不能由用户自己指定。

如果在成功连接(正确的用户/密码组合)前,达到参数 MAXIMUM_INVALID_CONNECT_ATTEMPTS(参见监控视图 M_PASSWORD_POLICY)定义的错误次数,用户将在允许重新连接前,被锁定几分钟。拥有系统权限 USER ADMIN 的用户或者用户自己,可以使用命令 ALTER USER <user_name>

RESET CONNECT ATTEMPTS 可以删除已发生的无效连接尝试的信息。

拥有系统权限 USER ADMIN 的用户可以使用命令 ALTER USER <user_name> DISABLE PASSWORD

LIFETIME 排除用户<user_name>的所有密码生命周期检查。这应该只为技术用户使用,而非正常的数据库用户。

拥有系统权限 USER ADMIN 的用户可以使用命令 ALTER USER <user_name> FORCE PASSWORD CHANGE 强制用户<user_name>在下次连接后立即修改密码,然后才可以正常工作。

拥有系统权限 USER ADMIN 的用户可以使用命令 ALTER USER <user_name> DEACTIVATE USER NOW关闭/锁定用户<user_name>的账号。用户<user_name>的账号关闭/锁定之后,用户将不能连接到

SAP HANA 数据库。欲重新激活/解锁用户<user_name>,系统权限 USER ADMIN 用户使用命令USER <user_name> ACTIVATE USER NOW,或者,在用户使用 PASSWORD 身份验证机制的情况下,使用 ALTER USER <user_name> PASSWORD <password>重设用户密码。

拥有系统权限 USER ADMIN 的用户可以使用命令 ALTER USER <user_name> ACTIVATE USER NOW 重新激活/解锁之前已经关闭的用户<user_name>账号。

配置参数:

有关密码的配置参数,可以查看监控视图 M_PASSWORD_POLICY。这些参数存储在

indexserver.ini, 'password policy'部分中。相关的参数描述可以在 SAP HANA 安全指南,附录,密码策略参数中找到。

系统和监控视图:

USERS: 显示所有用户、用户的创建者、创建时间和当前状态的信息。

USER_PARAMETERS:显示定义的 user_parameters,目前只提供 CLIENT。

INVALID_CONNECT_ATTEMPTS:显示每个用户无效连接的尝试次数。

LAST_USED_PASSWORDS: 显示用户上次密码修改日期。

M_PASSWORD_POLICY:显示描述密码所允许的样式的配置参数及其生命周期。

例子:

在可能使用给定的密码连接数据库以及已有的 SAML 提供商 OUR_PROVIDER 断言之前,用户名为NEW_USER 的用户已经创建完成。由于断言将提供数据库用户名, <mapped_user_name>设为ANY。这由如下的语句完成:

CREATEUSER new_user PASSWORD Password1 WITHIDENTITYANYFOR SAML PROVIDER OUR_PROVIDER;

现在,该用户将被强制修改密码,用户被禁止使用 SAML。

ALTERUSER new_user FORCE PASSWORD CHANGE;

ALTERUSER new_user DISABLE SAML;

假设用户已经过于频繁的尝试一个错误的密码,管理员将重置无效的连接尝试数为零。

ALTERUSER new_user RESETCONNECT ATTEMPTS;

用户 new_user 应当允许使用 KERBEROS 机制进行身份验证。因此,需要定义该连接的外部身份。

ALTERUSER new_user ADDIDENTITY'testkerberosName'FOR KERBEROS;

ALTERUSER new_user ENABLE KERBEROS;

另一方面,用户 new_user 将放松使用 SAML 提供商 OUR_PROVIDER 断言的可能性。

ALTERUSER new_user DROPIDENTITYFOR SAML PROVIDER OUR_PROVIDER;

最后,管理员希望禁止此用户 new_user 的所有连接,因为他最近执行的可疑操作。

ALTERUSER new_user DEACTIVATE;

7.6.3     CREATE ROLE
语法:

CREATE ROLE <role_name>

语法元素:

<role_name> ::= <identifier>

描述:

CREATE ROLE 语句创建一个新的角色。

只有拥有系统权限 ROLE ADMIN 的用户可以创建新角色。

指定的角色名称不能与现有用户或角色的名称相同。

角色是权限的一个命名集合,可以授予一个用户或角色。如果你想允许多个数据库用户执行相同的操作,你可以创建一个角色,授予该角色所需的权限,并将角色授予不同的数据库用户。

每个用户允许将权限授予一个已有的角色,但只有只有拥有系统权限 ROLE ADMIN 的用户可以将角色授予角色和用户。

SAP HANA 数据库提供了四种角色:

PUBLIC:每个数据库用户默认已被授予该角色。

该角色包括只读访问系统视图、监控视图和一些存储过程的执行权限。这些权限可以被撤销。

该角色可以授予过后将被撤销的权限。

MODELING:该角色包含使用 SAP HANA Studio 信息建模器所需的权限。

CONTENT_ADMIN:该角色包含与 MODELING 角色相同的角色,但是使用扩展该角色将被允许授予其他用户这些权限。此外,它包含了与导入对象工作的元库权限。

MONITORING:该角色包含所有元数据、当前的系统状态、监控视图和服务器统计数据的只读访问。

系统和监控视图:

ROLES:显示所有角色、它们的创建者和创建时间。

GRANTED_ROLES:显示每个用户或角色被授予的角色。

GRANTED_PRIVILEGES:显示每个用户或角色被授予的权限。

例子:

创建名称为 role_for_work_on_my_schema 的角色。

CREATE ROLE role_for_work_on_my_schema;

7.6.4     CREATE SAML PROVIDER
语法:

CREATE SAML PROVIDER <saml_provider_name> WITH SUBJECT <subject_distinguished_name> ISSUER <issuer_distinguished_name>

描述:

CREATE SAML PROVIDER 语句定义 SAP HANA 数据库已知的 SAML 提供商。 <saml_provider_name>必须与已有的 SAML 提供商不同。

只有拥有系统权限 USER ADMIN 的用户可以创建 SAML 提供商,每个有该权限的用户允许删除任何 SAML 提供商。

需要一个现有的 SAML 提供商,能够为用户指定 SAML 连接。 <subject_distinguished_name> 和<issuer_distinguished_name>是 SAML 提供商使用的 X.509 证书的主题和发布者的 X.500 可分辨名字。这些名字的语法可以在 ISO/IEC 9594-1 中找到。

SAML 概念的详细细节可以在 Oasis SAML 2.0 中找到。

系统和监控视图:

SAML_PROVIDERS:显示所有 SAML 提供商主题名和发布者名字。

例子:

创建一个名称为 gm_saml_provider 的 SAML 提供商,指定主题和发布者所属的公司。

CREATE SAML PROVIDER gm_saml_provider WITH SUBJECT 'CN = wiki.detroit.generalmotors.corp,OU = GMNet,O = GeneralMotors,C = EN'

ISSUER 'E = John.Do@gm.com,CN = GMNetCA,OU = GMNet,O = GeneralMotors,C = EN';

7.6.5     CREATE USER
语法:

CREATE USER <user_name> [PASSWORD <password>] [IDENTIFIED EXTERNALLY AS <external_identity>] [WITH IDENTITY <provider_identity>...] [<set_user_parameters>]

语法元素:

<external_identity> ::=<simple_identifier> | <string_literal>

<provider_identity> ::=<mapped_user_name> FOR SAML PROVIDER <saml_provider_name> | <external_identity> FOR KERBEROS

<mapped_user_name> ::=ANY | <string_literal>

<saml_provider_name> ::=<simple_identifier>

<set_user_parameters> ::=SET PARAMETER CLIENT = <string_literal>

描述:

CREATE USER 创建一个新的数据库用户。

只有拥有系统权限 USER ADMIN 的用户可以创建另一个数据库用户。

指定的用户名必须不能与已有的用户名、角色名或集合名相同。

SAP HANA 数据库提供的用户有: SYS, SYSTEM, _SYS_REPO,_SYS_STATISTICS。

数据库中的用户可以通过不同的机制进行身份验证,内部使用密码的身份验证机制和而外部则使用 Kerberos 或 SAML 等机制验证。用户可以同时使用不止一种方式进行身份验证,但在同一时间,只有一个密码和一个外部识别有效。与之相反的是,同一时间可以有一个以上<provider_identity>为一个用户存在。至少需指定一种验证机制允许用户连接和在数据库实例上工作。

由于兼容性原因,语法 IDENTIFIED EXTERNALLY AS <external_identity>以及<external_identity> FORKERBEROS 会继续使用。

密码必须遵循当前数据库定义的规则。密码的修改必须遵循当前数据库定义的规则,包括最小密码长度和定义的字符类型(大写、小写、数字、特殊字符)必须是密码的一部分.用户根据指定数据库实例定义的策略,必须定期更换密码。在执行 CREATE USER 命令期间提供的密码将被视为已提供, <user_name>将会修改为大写作为每个<simple_identifier>。

外部用户使用外部系统进行身份验证,例如 Kerberos 系统。这些用户没有密码,但是有 Kerberos实体名称。有关外部身份的详细信息,请联系您的域管理员。

如果 ANY 作为映射的用户名, SAML 断言将包含断言生效的数据库用户名。 <saml_provider_name>必须指定一个已有的 SAML 提供商。

<set_user_parameters>可以用于为数据库中的用户设置用户参数 CLIENT。

当使用报表时,该用户参数 CLIENT 可以用于限制用户 <user_name>访问有关特定客户端的信息。

<user_parameter_option>不能由用户自己指定。

对于每个数据库用户,数据集合将以包含用户名方式创建。这是不能显式删除。用户删除时,该集合也将被删除。数据库用户拥有该集合,并当他不显式指定集合名称时,作为自己的默认集合使用。

配置参数:

与密码相关的配置参数可以在监控视图 M_PASSWORD_POLICY 查看。这些参数存储 indexserver.ini的'password policy'部分中。相关的参数描述可以在 SAP HANA 安全指南,附录,密码策略参数中找到。

系统和监控视图:

USERS: 显示所有用户、用户的创建者、创建时间和当前状态的信息。

USER_PARAMETERS:显示定义的 user_parameters,目前只提供 CLIENT。

INVALID_CONNECT_ATTEMPTS:显示每个用户无效连接的尝试次数。

LAST_USED_PASSWORDS: 显示用户上次密码修改日期。

M_PASSWORD_POLICY:显示描述密码所允许的样式的配置参数及其生命周期。

SAML_PROVIDERS;显示已有的 SAML 提供商。

SAML_USER_MAPPING:显示每个 SAML 提供商的映射用户名。

例子:

在可能使用给定的密码连接数据库以及已有的 SAML 提供商 OUR_PROVIDER 断言之前,用户名为NEW_USER 的用户已经创建完成。由于断言将提供数据库用户名, <mapped_user_name>设为ANY。 这由如下的语句完成:

CREATEUSER new_user PASSWORD Password1 WITHIDENTITYANYFOR SAML PROVIDER OUR_PROVIDER;

7.6.6     DROP ROLE
语法:

DROP ROLE <role_name>

例子:

DROP ROLE 语句删除角色。 <drop_name>必须指定已经存在的角色。

只有拥有系统权限 ROLE ADMIN 的用户可以删除角色。任何有该权限的用户允许删除任意角色。

只有 SAP HANA 提供的角色可以删除: PUBLIC, CONTENT_ADMIN, MODELING and MONITORING。

如果一个角色授予用户或角色,在角色删除时将被撤销。撤销角色可能会导致一些视图无法访问或者存储过程再也不工作,如果一个视图或存储过程依赖于该角色中的任意权限,会发生这种情况。

系统和监控视图:

ROLES:显示所有角色、它们的创建者和创建时间。

GRANTED_ROLES:显示每个用户或角色被授予的角色。

GRANTED_PRIVILEGES:显示每个用户或角色被授予的权限。

例子:

创建名为 role_for_work_on_my_schema 的角色,随后立即删除。

CREATE ROLE role_for_work_on_my_schema;

DROP ROLE role_for_work_on_my_schema;

7.6.7     DROP SAML PROVIDER
语法:

DROP SAML PROVIDER <saml_provider_name>

描述:

DROP SAML PROVIDER 语句删除指定的 SAML 提供商。 <saml_provider_name>必须是一个已有的SAML 提供商。如果指定的 SAML 提供商正在被 SAP HANA 用户使用,则该提供商不能被删除。

只有拥有系统 USER ADMIN 权限的用户可以删除 SAML 提供商。

系统和监控视图:

SAML_PROVIDERS:显示所有 SAML 提供商主题名称和 issuer_name。

7.6.8     DROP USER
语法:

DROP USER <user_name> [<drop_option>]

语法元素:

<drop_option> ::= CASCADE | RESTRICT

Default = RESTRICT

描述:

DROP USER 语句删除数据库用户。 <user_name>必须指定一个已有的数据库用户。

只有拥有系统 USER ADMIN 权限的用户可以删除用户。拥有该权限的用户可以删除任何用户。 SAPHANA 数据库提供的用户不能删除: SYS, SYSTEM, _SYS_REPO,_SYS_STATISTICS。

如果显式或隐式指定了<drop_option> RESTRICT,则当用户为数据集合的所有者或以及创建了其他集合,或者该用户集合下存有非本人创建的对象时,该用户不能被删除。

如果指定了<drop_option> CASCADE,包含用户名的集合和属于该用户的集合,连同所有存在这些集合中的对象(即使是由其他用户创建)一起删除。用户拥有的对象,即使为其他集合中的一部分,将被删除。依赖于已删除对象的对象将被删除,即使已删除的用户所拥有的公共同义词。

已删除对象的权限将被撤销,授予已删除用户的权限也将被撤销。撤销权限可能会造成更多的撤销操作,如果这些权限被进一步授予。

已删除用户创建的用户和由他们创建的角色将不会被删除。已删除的用户创建的审核策略也不会被删除。

如果用户存在一个已打开的会话,仍然可以删除该用户。

系统和监控视图:

已删除用户将从以下视图删除:

USERS: 显示所有用户、用户的创建者、创建时间和当前状态的信息。

USER_PARAMETERS:显示定义的 user_parameters,目前只提供 CLIENT。

INVALID_CONNECT_ATTEMPTS:显示每个用户无效连接的尝试次数。

LAST_USED_PASSWORDS: 显示用户上次密码修改日期。

M_PASSWORD_POLICY:显示描述密码所允许的样式的配置参数及其生命周期。

对象的删除可能影响所有描述对象的系统视图,例如 TABLES, VIEWS,PROCEDURES, ... .

对象的删除可能影响描述权限的视图:例如 GRANTED_PRIVILEGES 以及所有监控视图,例如M_RS_TABLES, M_TABLE_LOCATIONS, ...

例子:

例如,使用这条语句创建名称为 NEW_USERd 的用户:

CREATEUSER new_user PASSWORD Password1;

已有的用户 new_user 将被删除,连同其所有对象一起:

DROPUSER new_user CASCADE;

7.6.9     GRANT
语法:

GRANT <system_privilege>,... TO <grantee> [WITH ADMIN OPTION] | GRANT <schema_privilege>,... ON SCHEMA <schema_name> TO <grantee> [WITH GRANT OPTION]| GRANT <object_privilege>,... ON <object_name> TO <grantee> [WITH GRANT OPTION] | GRANT <role_name>,... TO <grantee> [WITH ADMIN OPTION]| GRANT STRUCTURED PRIVILEGE <privilege_name> TO <grantee>

语法元素:

<system_privilege> ::=AUDIT ADMIN | BACKUP ADMIN| CATALOG READ | CREATE SCENARIO| CREATE SCHEMA | CREATE STRUCTURED PRIVILEGE| DATA ADMIN | EXPORT| IMPORT 
| INIFILE ADMIN| LICENSE ADMIN | LOG ADMIN| MONITOR ADMIN | OPTIMIZER ADMIN| RESOURCE ADMIN | ROLE ADMIN| SAVEPOINT ADMIN | SCENARIO ADMIN| SERVICE ADMIN | SESSION ADMIN| STRUCTUREDPRIVILEGE ADMIN | TRACE ADMIN| USER ADMIN | VERSION ADMIN| <identifier>.<identifier>

系统权限用来限制管理任务。定义如下的系统权限:

AUDIT ADMIN

该权限控制以下审计有关命令的执行: CREATE AUDIT POLICY, DROP AUDIT POLICY and ALTER AUDIT POLICY.

BACKUP ADMIN

该权限授权 ALTER SYSTEM BACKUP 命令来定义和启动备份进程或执行恢复过程。

CATALOG READ

该权限赋予所有用户未经过滤的只读访问所有的系统和监控视图。正常情况下,这些视图的内容根据正在访问用户的权限过滤。权限 CATALOG READ 使用户有只读访问所有的系统和监控视图的内容。

CREATE SCENARIO

该权限控制计算场景和多维数据集(数据库计算)的创建。

CREATE SCHEMA

该权限控制使用 CREATE SCHEMA 命令创建数据库数据集合。每个用户都有个集合。拥有该权限,用户允许创建更多的集合。

CREATE STRUCTURED PRIVILEGE

该权限授权创建结构化权限(分析权限)。注意,只有分析权限的所有者可以进一步授予其他用户或者角色,以及撤销。

DATA ADMIN

该强大的权限授权读取系统和监控视图中的所有数据,包括在 SAP HANA 数据库中执行 DDL (DataDefinition Language) 以及 DDL 命令。这表示拥有该权限的用户不能选择或者修改存储在其他用户表中的数据,但是可以修改表的定义或甚至删除该表。

EXPORT

该权限授权通过 EXPORT TABLE 命令导出数据库中的活动。注意,除了该权限,用户仍需要将要导出的源表 SELECT 权限。

IMPORT

该权限授权通过 IMPORT TABLE 命令导入数据库中的活动。注意,除了该权限,用户仍需要将要导入的目标表 SELECT 权限。

INIFILE ADMIN

该权限授权修改系统设置的不同方式。

LICENSE ADMIN

该权限授权 SET SYSTEM LICENSE 命令安装一个新的许可。

LOG ADMIN

该权限授权 ALTER SYSTEM LOGGING [ON|OFF] 命令启用或禁用 刷新日志机制。

MONITOR ADMIN

该权限授权关于 EVENT 的 ALTER SYSTEM 命令。

OPTIMIZER ADMIN

该权限授权关于 SQL PLAN CACHE 和 ALTER SYSTEM 的 ALTER SYSTEM 命令。

UPDATE STATISTICS 命令影响查询优化器的行为。

RESOURCE ADMIN

该权限授权关于资源,例如 ALTER SYSTEM RECLAIM、 DATAVOLUME 和 ALTER SYSTEM RESET

MONITORING VIEW 的命令,并且授权 Management Console 中的许多命令。

ROLE ADMIN

该权限授权使用 CREATE ROLE 命令创建和删除角色。同时也授权使用 GRANT 和 REVOKE 命令授予和撤销角色。

SAVEPOINT ADMIN

该权限使用 ALTER SYSTEM SAVEPOINT 命令授权保存点流程的执行。

SCENARIO ADMIN

该权限授权所有计算场景相关的活动,包括新建。

SERVICE ADMIN

该权限授权 ALTER SYSTEM [START|CANCEL|RECONFIGURE] 命令,用于管理数据库中的系统服务。

SESSION ADMIN

该权限授权会话相关的 ALTER SYSTEM 命令 ,停止或重新连接用户会话或者修改会话参数。

STRUCTUREDPRIVILEGE ADMIN

该权限授权结构化权限的创建、重新激活和删除。

TRACE ADMIN

该权限授权数据库追踪文件的操作 ALTER SYSTEM [CLEAR|REMOVE] TRACES 命令。

USER ADMIN

该权限授权使用 CREATE USER, ALTER USER, and DROP 命令创建和修改用户。

VERSION ADMIN

该权限授权多版本并发控制(MVCC) ALTER SYSTEM RECLAIM VERSION SPACE command 命令。

<identifier>.<identifier>

SAP HANA 数据库组件可以创建自己需要的权限。这些权限使用组件名作为系统权限的第一标识符,使用组件-权限-名字作为第二标识符。目前元库使用该特点。有关名为 REPO.<identifier>的权限,请参阅元库手册。

 

<schema_privilege> ::=CREATE ANY| DEBUG| DELETE| DROP| EXECUTE| INDEX| INSERT| SELECT| TRIGGER| UPDATE

数据集合权限用于集合和存储在该集合中对象的访问和修改。集合权限的定义如下:

CREATE ANY

该权限允许用户在数据库中创建各种对象,尤其是表、视图、序列、同义词、 SQL 脚本、或者存储过程。

DELETE, DROP, EXECUTE, INDEX, INSERT, SELECT, UPDATE

指定的权限被授予每个目前和以后存储在集合中的每个对象。有关权限详细说明,请参阅下面的描述对象权限的部分,请检查以下权限适用于哪些类型的对象。

 

<object_privilege> ::=ALL PRIVILEGES| ALTER| DEBUG| DELETE| DROP| EXECUTE| INDEX| INSERT| SELECT| TRIGGER| UPDATE| <identifier>.<identifier>

对象权限用于限制用户访问和修改数据库对象,例如表、 视图、序列或者存储过程以及诸如此类。并不是所有的这些权限适用于所有类型的数据库对象。

对于对象类型允许的权限,见下表。

对象权限的定义如下:

ALL PRIVILEGES

该权限为所有 DDL(数据定义语言)和 DML(数据操纵语言)权限的组合。该权限一方面是授予人目前有的和允许进一步授予的权限,另一方面,特定对象上可以被授予的权限。该组合为给定的授予人和对象进行动态评估。 ALL PRIVILEGES 适用于表或试图。

ALTER

该 DDL 权限授权对象的 ALTER 命令。

DEBUG

该 DML 权限授权 存储过程或者计算视图的调试功能。

DELETE

该 DML 权限授权对象的 DELETE 和 TRUNCATE 命令。

DROP

该 DDL 权限授权对象的 DROP 命令。

EXECUTE

该 DML 权限授权 SQL Script 函数或者使用 CALLS 或 CALL 命令的存储过程。

INDEX

该 DDL 权限授权对象索引的创建、修改或者删除。

INSERT

该 DML 权限授权对象的 INSERT 命令。 INSERT 连同 UPDATE 权限一起允许使用对该对象的 REPLACE

和 UPSERT 命令。

SELECT

该 DML 权限授予对象的 SELECT 命令或者序列的使用。

TRIGGER

该 DDL 权限授权指定表或者指定集合中表的 CREATE TRIGGER / DROP TRIGGER 命令。

UPDATE

该 DML 权限授权对象的 UPDATE 命令 INSERT 连同 UPDATE 权限一起允许使用对该对象的 REPLACE

和 UPSERT 命令。

<identifier>.<identifier>

SAP HANA 数据库组件可以创建自己需要的权限。这些权限使用组件名作为系统权限的第一标识符,使用组件-权限-名字作为第二标识符。目前元库使用该特点。有关名为 REPO.<identifier>的权限,请参阅元库手册。

对视图的 DELETE, INSERT and UPDATE 操作只适用于可更新的视图,表示这些视图遵守这样的一些限制:不包含联接、 UNION,没有聚合以及进一步的一些限制。

DEBUG 只对计算视图适用,而非其他类型的视图。

这些限制适用于同义词,以及同义词代表的对象也适用。

 

<object_name> ::=<table_name>| <view_name>| <sequence_name>| <procedure_name>| <synonym_name>

对象权限用于限制用户访问和修改数据库对象,例如表、 视图、序列、存储过程和同义词。

<grantee> :: =<user_name>| <role_name>

grantee 可以是一个用户或者角色。在权限或角色授予角色的情况下,角色授予的所有用户,将有指定的权限或角色。

角色是权限的一个命名集合,可以授予一个用户或角色。

如果你想允许多个数据库用户执行相同的操作,你可以创建一个角色,授予该角色所需的权限,并将角色授予不同的数据库用户。

当授予角色给角色时,将建立一颗角色树。当将一个角色(R)授予另一个角色或者用户(G) , G 将拥有所有直接授予 R 的权限和角色。

 

描述:

GRANT 用于授予权限和结构化权限给用户和角色,也用于授予权限给用户和其他角色。

指定的用户、角色、对象和结构化权限必须在使用 GRANT 命令前已经存在。

只有拥有权限并且允许进一步授予权限的用户才能授予权限。每个拥有 ROLE ADMIN 权限的用户允许授予角色给其他角色和用户。

用户不能授予自己权限。

SYSTEM 用户有至少一个系统权限和 PUBLIC 角色。所有其他用户也有 PUBLIC 角色。这些权限和角色不能自己撤销。

虽然 SYSTEM 用户拥有许多权限,该用户不能选择或者修改其他用户的表,如果他没有显式地授权可以这样做。

SYSTEM 用户有在自己默认集合中创建对象的权限,名字和用户本身一样。

对于由用户创建的表,他们拥有所有权限并且可以将权限授予给用户和角色。

对依赖于例如基于表的视图的其他对象,可能发生的是用户如果没有底层对象的权限则在依赖对象也没有权限。或者可能发生的是用户有权限,但是不允许进一步授权。该用户将不能授予这些权限。

WITH ADMIN OPTION 和 WITH GRANT OPTION 指定了已分配的权限可以被特定的用户进一步分配,或者被拥有指定角色的用户分配。

使用 GRANT STRUCTURED PRIVILEGE <structured_privilege_name>,一个之前定义过的分析权限(基于通用结构化权限)被分配给用户或角色。该分析权限用于限制只读访问分析视图、属性视图和计算视图特定的数据,通过过滤属性值。

系统和监控视图:

USERS: 显示所有用户、用户的创建者、创建时间和当前状态的信息。

ROLES:显示所有角色、它们的创建者和创建时间。

GRANTED_ROLES:显示每个用户或角色被授予的角色。

GRANTED_PRIVILEGES:显示每个用户或角色被授予的权限。

 

例子:

假设已经创建了拥有创建集合、角色和用户权限的用户,他新建了数据集合:

CREATESCHEMA myschema;

另外,他还在该集合中新建了一张名为 work_done 的表。

CREATETABLE myschema.work_done (t TIMESTAMP, userNVARCHAR (256), work_done VARCHAR (256);

他创建了一个新的用户 named worker,在可能使用给定的密码和名为role_for_work_on_my_schema 的角色连接数据库

CREATEUSER worker PASSWORD His_Password_1;

CREATE ROLE role_for_work_on_my_schema;

他将其集合下所有对象的 SELECT 权限授予 role_for_work_on_my_schema 角色:

GRANTSELECTONSCHEMA myschema TO role_for_work_on_my_schema;

另外,用户将表 work_done to 的 INSERT 权限授予 role_for_work_on_my_schema 角色:

GRANTINSERTON myschema.work_done TO role_for_work_on_my_schema;

接着,他将角色授予新的用户:

GRANT role_for_work_on_my_schema TO worker WITHGRANTOPTION;

另外, worker 用户被直接授予表删除权限。该权限的选项允许进一步授予此权限。

GRANTDELETEON myschema.work_done TO worker;

现在,用户将创建任何类型对象的权限授予 worker 用户:

GRANTCREATEANYONSCHEMA myschema TO worker;

结果, worker 用户拥有集合 myschema 下所有表和视图的 SELECT 权限,表 myschema.work_done的 INSERT 和 DELETE 权限,以及在集合 myschema 下创建对象的权限。另外,该用户允许授予表myschema.work_done 的 DELETE 权限给其他用户和角色。

 

第二个例子中,用户有相应的权限,包括允许进一步授予权限、将系统权限 INIFILE ADMIN 和TRACE ADMIN 授予已有的用户 worker。他允许 worker 进一步授予这些权限。

GRANT INIFILE ADMIN, TRACE ADMIN TO worker WITH ADMIN OPTION;

7.6.10   REVOKE
语法:

REVOKE <system_privilege>,... FROM <grantee>|| REVOKE <schema_privilege>,... ON SCHEMA <schema_name> FROM <grantee>| REVOKE <object_privilege>,... ON <object_name> FROM <grantee>| REVOKE <role_name>,... FROM <grantee>| REVOKE STRUCTURED PRIVILEGE <privilege_name> FROM <grantee>

语法元素:

有关语法元素的定义,参见 GRANT。

描述:

REVOKE 语句撤销指定的角色或者结构化权限或者从指定用户或角色的指定对象中撤销权限。

只有拥有授权的用户可以撤销该权限。这对于有 ROLE ADMIN 的用户和角色的撤销也一样。

SYSTEM 用户有至少一个系统权限和 PUBLIC 角色。所有其他用户也有 PUBLIC 角色。这些权限和角色不能自己撤销。

如果用户也被授予一个角色,就不可能撤销属于该角色的一些权限。这种情况下,必须撤销所有角色,并且需要用户已授予给他的权限。

如果一个角色授予用户或角色,在角色删除时将被撤销。撤销角色可能会导致一些视图无法访问或者存储过程再也不工作,如果一个视图或存储过程依赖于该角色中的任意权限,会发生这种情况。

撤销已用 WITH GRANT OPTION 或 WITH ADMIN OPTION 授权的权限将导致不仅从指定的用户中撤销,也将从所有该用户直接或间接授权给用户和角色的权限中撤销。

由于权限可以用个不同的用户授给用户或角色,用户撤销该权限并一定意味着,该用户将失去这权限。有关语法元素的详请,请参见 GRANT。

系统和监控视图:

USERS: 显示所有用户、用户的创建者、创建时间和当前状态的信息。

ROLES:显示所有角色、它们的创建者和创建时间。

GRANTED_ROLES:显示每个用户或角色被授予的角色。

GRANTED_PRIVILEGES:显示每个用户或角色被授予的权限。

例子:

假设用户已经执行如下语句:

CREATEUSER worker PASSWORD His_Password_1;

CREATE ROLE role_for_work_on_my_schema;

CREATETABLE myschema.work_done (t TIMESTAMP, userNVARCHAR (256), work_done VARCHAR (256);

GRANTSELECTONSCHEMA myschema TO role_for_work_on_my_schema;

GRANTINSERTON myschema.work_done TO role_for_work_on_my_schema;

GRANT role_for_work_on_my_schema TO worker;

GRANT TRACE ADMIN TO worker WITH ADMIN OPTION;

GRANTDELETEON myschema.work_done TO worker WITHGRANTOPTION;

已授权的用户允许撤销这些权限。他从角色中撤销权限,因此,暗示着从所有已授予角色的用户撤销权限。另外, worker 用户将不再有 TRACE ADMIN 权限。撤销权限将导致撤回操作发生至worker 用户授予该权限的所有用户。

REVOKESELECTONSCHEMA myschema FROM role_for_work_on_my_schema;

REVOKE TRACE ADMIN FROM worker;

7.7数据导入导出语句
7.7.1     EXPORT
语法:

EXPORT <object_name_list> AS <export_format> INTO <path> [WITH <export_option_list>]

语法元素:

WITH <export_option_list>:

可以使用 WITH 子句传入 EXPORT 选项。

 

<object_name_list> ::= <OBJECT_NAME>,... | ALL

<export_import_format> ::= BINARY | CSV

<path> ::= 'FULL_PATH'

<export_option_list> ::= <export_option> | <export_option_list> <export_option>

<export_option> ::=REPLACE |CATALOG ONLY |NO DEPENDENCIES |SCRAMBLE [BY <password>] |THREADS <number_of_threads>

描述:

EXPORT 命令以指定的格式 BINARY 或者 CSV,导出表、视图、列视图、同义词、序列或者存储过程。临时表的数据和"no logging"表不能使用 EXPORT 导出表。

OBJECT_NAME

将导出对象的 SQL 名。欲导出所有集合下的所有对象,你要使用 ALL 关键字。如果你想导出指定集合下的对象,你应该使用集合名和星号,如"SYSTEM"."*"。

BINARY

表数据将以内部 BINARY 格式导出。使用这种方式导出数据比以 CSV 格式快几个数量级。只有列式表可以以二进制格式导出。行式表总是以 CSV 格式导出,即使指定了 BINARY 格式。

CSV

表数据将以 CSV 格式导出。导出的数据可以导入至其他数据库中。另外,导出的数据顺序可能被打乱。列式和行式表都可以以 CSV 格式导出。

FULL_PATH

将导出的服务器路径。

注意:当使用分布式系统, FULL_PATH 必须指向一个共享磁盘。由于安全性原因,路径可能不包含符号链接,也可能不指向数据库实例的文件夹内,除了'backup' 和 'work'子文件夹。有效路径(假设数据库实例位于/usr/sap/HDB/HDB00)的例子:

'/tmp'<br>

'/usr/sap/HDB/HDB00/backup'<br>

'/usr/sap/HDB/HDB00/work'<br>

 

REPLACE

使用 REPLACE 选项,之前导出的数据将被删除,而保存最新导出的数据。如果未指定 REPLACE 选项,如果在指定目录下存在先前导出的数据,将抛出错误。

CATALOG ONLY

使用 CATALOG ONLY 选项,只导出数据库目录,不含有数据。

NO DEPENDENCIES

使用 NO DEPENDENCIES 选项,将不导出已导出对象的相关对象。

SCRAMBLE

以 CSV 格式导出时,使用 SCRAMBLE [BY '<password>'],可以扰乱敏感的客户数据。当未指定额外的数据库,将使用默认的扰乱密码。只能扰乱字符串数据。导入数据时,扰乱数据将以乱序方式导入,使最终用户无法读取数据,并且不可能回复原状。

THREADS

表示用于并行导出的线程数。

 

使用的线程数

给定 THREADS 数目指定并行导出的对象数,默认为 1。增加数字可能减少导出时间,但也会影响系统性能。

应当考虑如下:

 对于单个表, THREADS 没有效果。

 对于视图或者存储过程,应使用2 个或更多的线程(最多取决于对象数)。

 对于整个集合,考虑使用多余10 个线程(最多取决于系统内核数)。

 对于整个 BW / ERP 系统( ALL 关键字)的上千张表,数量大的线程是合理的(最多 256)。

 

系统和监控视图:

你可以使用系统视图 M_EXPORT_BINARY_STATUS 监控导出的进度。

你可以在如下语句中,使用会话 ID 从相应的视图中终止导出会话。

ALTERSYSTEM CANCEL [WORKIN] SESSION 'sessionId'

导出的详细结果存储在本地会话临时表#EXPORT_RESULT。

例子:

EXPORT"SCHEMA"."*"AS CSV INTO'/tmp'WITHREPLACE SCRAMBLE THREADS 10

7.7.2     IMPORT
语法:

IMPORT <object_name_list> [AS <import_format>] FROM <path> [WITH <import_option_list>]

语法元素:

WITH <import_option_list>:可以使用 WITH 子句传入 IMPORT 选项。

<object_name_list> ::= <object_name>,... | ALL

<import_format> ::= BINARY | CSV

<path> ::= 'FULL_PATH'

<import_option_list> ::= <import_option> | <import_option_list> <import_option>

<import_option> ::=REPLACE |CATALOG ONLY |NO DEPENDENCIES |THREADS <number_of_threads>

 

描述:

IMPORT 命令导入表、视图、列视图、同义词、序列或者存储过程。临时表的数据和"no logging"表不能使用 IMPORT 导入。

OBJECT_NAME

将导入对象的 SQL 名。欲导入路径中的所有对象,你要使用 ALL 关键字。如果你想将对象导入至指定集合下,你应该使用集合名和星号,如"SYSTEM"."*"。

BINARY | CSV

导入过程可能忽略格式的定义,因为在导入过程中,将自动检测格式。将以导出的同样格式导入。

FULL_PATH

从该服务器路径导入。

注意:当使用分布式系统, FULL_PATH 必须指向一个共享磁盘。如果未指定 REPLACE 选项,在指定目录下存在相同名字的表,将抛出错误。

CATALOG ONLY

使用 CATALOG ONLY 选项,只导入数据库目录,不含有数据。

NO DEPENDENCIES

使用 NO DEPENDENCIES 选项,将不导入已导入对象的相关对象。

THREADS

表示用于并行导入的线程数。

使用的线程数

给定 THREADS 数目指定并行导入的对象数,默认为 1。增加数字可能减少导入时间,但也会影响系统性能。

应当考虑如下:

 对于单个表, THREADS 没有效果。

 对于视图或者存储过程,应使用2 个或更多的线程(最多取决于对象数)。

 对于整个集合,考虑使用多余10 个线程(最多取决于系统内核数)。

 对于整个 BW / ERP 系统( ALL 关键字)的上千张表,数量大的线程是合理的(最多 256)。

 

系统和监控视图:

你可以使用系统视图 M_IMPORT_BINARY_STATUS 监控导入的进度。

你可以在如下语句中,使用会话 ID 从相应的视图中终止导入会话。

ALTER SYSTEM CANCEL [WORK IN] SESSION 'sessionId'

导入的详细结果存储在本地会话临时表#IMPORT_RESULT。

7.7.3     IMPORT FROM
语法:

IMPORT FROM [<file_type>] <file_path> [INTO <table_name>] [WITH <import_from_option_list>]

语法元素:

WITH <import_from_option_list>:

可以使用 WITH 子句传入 IMPORT FROM 选项。

<file_path> ::= '<character>...'

<table_name> ::= [<schema_name>.]<identifier>

<import_from_option_list> ::= <import_from_option> | <import_from_option_list> <import_from_option>

<import_from_option> :: =THREADS <number_of_threads> |BATCH <number_of_records_of_each_commit> |TABLE LOCK |NO TYPE CHECK |SKIP FIRST <number_of_rows_to_skip>
 ROW |COLUMN LIST IN FIRST ROW |COLUMN LIST ( <column_name_list> ) |RECORD DELIMITED BY '<string_for_record_delimiter>' |FIELD DELIMITED BY '<string_for_field_delimiter>' |OPTIONALLY ENCLOSED BY '<character_for_optional_enclosure>' |DATE FORMAT '<string_for_date_format>' |TIME FORMAT '<string_for_time_format>' |TIMESTAMP FORMAT '<string_for_timestamp_format>' |

描述:

IMPORT FROM 语句将外部 csv 文件的数据导入至一个已有的表中。

THREADS:表示可以用于并行导出的线程数。默认值为 1,最大值为 256。

BATCH:表示每个提交中可以插入的记录数。

THREADS 和 BATCH 可以通过启用并行加载和一次提交多条记录,实现加载的高性能。一般而言,对于列式表, 10 个并行加载线程以及 10000 条记录的提交频率是比较好的设置。

TABLE LOCK:锁住表为了更快的导入数据至列式表。如果指定了 NO TYPE CHECK,记录将在插入时,不检查每个字段的类型。

SKIP FIRST <int> ROW:跳过插入前 n 条记录。

COLUMN LIST IN FIRST ROW:表示在 CSV 文件中第一行的列。

COLUMN LIST ( <column_name_list> ):表示将要插入的字段列表。

RECORD DELIMITED BY '<string>':表示 CSV 文件中的记录分隔符。

FIELD DELIMITED BY '<string>':表示 CSV 文件中的字段分隔符。

OPTIONALLY ENCLOSED BY '<character>':表示字段数据的可选关闭符。

DATE FORMAT '<string>':表示字符的日期格式。如果 CSV 文件有日期类型,将为日期类型字段使用指定的格式。

TIME FORMAT '<string>':表示字符的时间格式。如果 CSV 文件有时间类型,将为时间类型字段使用指定的格式。

TIMESTAMP FORMAT '<string>':表示字符的时间戳格式。如果 CSV 文件有时间戳类型,将为日期类型字段使用指定的格式。

例子:

IMPORTFROM CSV FILE '/data/data.csv'INTO"MYSCHEMA"."MYTABLE"WITH RECORD DELIMITED BY'\n' FIELD DELIMITED BY','

引用来源:https://www.cnblogs.com/renzhituteng/p/11013957.html

SAP-Garson
原文链接:

文章来自于网络,如果侵犯了您的权益,请联系站长删除!

上一篇:SAP WORK FLOW
下一篇:SAP 定价
评论列表

发表评论

评论内容
昵称:
关联文章

SAP HANA SQL语法
SAP Hana sql语法
SAP Hana sql语法
SAP HANA HDBTable定义SQL View语法
SAP-ABAP-SELECT语法SQL语法详解
学习SAP HANA SQL
HANA SQL
hana语法
HANA 一些sql语句
HANA系列】SAP HANA SQL截取字符串
SAPHANA学习(1):SAP HANA SQL Reference
HANA_SQL常见错误代码
HANA Native SQL
HANA SQL 执行过程
SAP ABAP 基础语法
HANA SQL - RANK函数
HANA SQL
SAP HANA 基础SQL和SQLScript 学习笔记 速读
SAP HANA HDBTable定义Structure语法
HANA系列】SAP HANA SQL REPLACE替换字符串

热门标签
CBP 问题处理 # ALV # 【SAP | 前世今生】 # 1.moonsec-2020-[持续更新] # ABAP # ABAP-接口 # abap学习路线 # ALV # AVRCP协议 # bdc # BMS项目实战记录 # BW # ClickHouse # crud 框架 (mybatis-plus/ jpa等) # dynpro # ERP # JCo3.0 # PyRFC # Python数据分析与机器学习 # SAP ABAP # SAP FICO # SAP FTP # SAP HANA # SAP MM # SAP-Restful # SAP消息号A类 # sap应用技巧 # 工具使用 # 数据库 # 网安神器篇 # 优化篇 # 语法 # 筑基08:渗透测试综合实验 (path.Combinee(rootDir, "nwrfcsdk", "icuuc50")) ,ides .NET .NET 6 .NET Core .NET Remoting和WebServices .net(C#) .NET/C# .netcore .NET技术 .NET连接SAP .UD选择集 /h /ui2/cl_json @click.prevent _E8_AE_BA_E6_96_87 ~ { ABAP} ~ ~{一起学ABAP}~ “SAP.Middleware.Connector.RfcConfigParameters”的类型初 《ABAP专栏》 《SAP ABAP基础通关百宝书》【从入门到精通】 《测绘程序设计精品案例合集》 《计算机网络自顶向下方法》学习笔记 【Azure 应用服务】 【SAP】ABAP-CDSVIEW 【速成之路】SQLserver 0.0-SAP BW学习 001-计算机基础 01检验类型 1 10.Abap 10.ABAP-CTS 102 1024程序员节 103 1155服务器装系统 12.SAP-SKILL 122 13台根服务器位置 15行 1809 1909 1核1g1m服务器相当于什么性能 2003服务器修改ftp密码 2010 2012服务器系统安装数据库 2012服务器系统安装数据库吗 2018年终总结 2019 2019java专科 2019年终总结之SAP项目实践篇 2022跨年烟花代码 2022年 2023云数据库技术沙龙 2023云数据库技术沙龙 “MySQL x ClickHouse” 专场 2-step picking 2-step拣配 2月一次的flyback 321 32位服务器系统安装教程 3D 40 408 408——计算机网络 408学习笔记 40位 478g+ 虚拟服务器 4hana 545移动类型 5G 6.824 60.技术开发 6------SAP 701 711 740新语法 7------SAP A a2dp AA AB01 ABAP ABAP 语法 ABAP AES加密解密 ABAP ALV abap alv 更改数据 abap alv新增行数据 ABAP AMDP abap bapi ABAP BAPI分享 ABAP BASE64加解密 ABAP BC400 ABAP CDS ABAP checkbox ABAP Dialog开发 ABAP DOI ABAP EXCEL ABAP Expression ABAP GUID ABAP Handy program abap hr ABAP IDOC abap java ABAP JSON ABAP JSON大小写 ABAP JSON驼峰 abap me21n增强 abap mm后台表 ABAP Modify 的用法 ABAP New ABAP REST API ABAP REST JSON ABAP RSA PSE ABAP RSA 加密解密 ABAP SAP ABAP SESSION传递 ABAP SMARTFORMS 默认 WORD 编辑 ABAP Table ABAP Toolbar ABAP tools ABAP wait abap xml 日期格式 ABAP 报错 ABAP 笔记 ABAP 常见错误 ABAP 程序开发 abap 程序模板 ABAP 初级技术 abap 创建出口历程 abap 调用java abap 发送json报文 ABAP 关键字 ABAP 基础知识 ABAP 技巧 ABAP 接口 ABAP 开发 ABAP 乱乱记 ABAP 内表 ABAP 内表 排序 abap 内表 条件查找 ABAP 配置相关 ABAP 批量创建货源清单 ABAP 屏幕开发激活显示 ABAP 人事模块 abap 上传excel数字去除千分符 ABAP 实用程序记录 ABAP 事务代码 ABAP 数据字典 ABAP 替换 ABAP 替换字符 ABAP 条件断点 DEBUG ABAP 未按大小排序 ABAP 销售模块 ABAP 新语法 ABAP 选择屏幕 ABAP 学习 ABAP 学习笔记 ABAP 一些常用技巧 ABAP 语法备忘 ABAP 增强 abap 指定长度服务器上传数据 ABAP 中级技术 abap 转换成字符串 ABAP 字符查找 abap 字符串操作 ABAP  屏幕流 ABAP 开发模块 ABAP/4 ABAP_01 ABAP_02 ABAP_BASIS ABAP_FUNCTION MODULE ABAP_OTHERS ABAP_SYNTAX ABAP_各路小技能 ABAP2XLSX ABAP4 ABAP7.50 ABAP740新语法 abapdata定义方法 abaper ABAP-FICO ABAP报表程序结构框架 ABAP报错 abap捕获当前功能键sy ABAP查找代码块 ABAP常用代码段 ABAP程序例子 ABAP初级 ABAP创建搜索帮助 ABAP打印 ABAP的BAPI ABAP调优 LOOP ABAP定时job abap动态变量 ABAP动态修改屏幕 abap读取sap服务器文件名 abap对接外围系统 abap分页 ABAP工具 ABAP关键字 ABAP函数 abap获取日期 ABAP基础 abap基础入门 ABAP基础语法 ABAP基础知识 ABAP技能树 ABAP技巧之游标 ABAP技术 abap技术栈 ABAP加密 ABAP-接口 ABAP开发 ABAP开发回顾总结 ABAP开发随便记录 ABAP开发学习 ABAP开发语言 abap开发注释快捷键 ABAP开源项目清单 ABAP快捷键 abap连接mysql ABAP模块 ABAP内表汇总 abap判断包含字符当中包含小数点 ABAP屏幕相关 ABAP其他增强 ABAP入门 ABAP时间戳 ABAP实例分享 ABAP使用技巧 abap视图字段限制 ABAP数据库删除 abap数据类型转换 ABAP四代增强 ABAP四舍五入 ABAP随笔 ABAP提取汉字 abap文件上传 abap文件下载导出 ABAP问题记录 abap系列 ABAP相关 ABAP小工具 ABAP小记 ABAP小技巧 ABAP校验时间日期格式 abap新语法 ABAP新语法汇总 ABAP新语法收集整理 ABAP修改删除数据 ABAP选择屏幕 ABAP选择屏幕开发 ABAP学习 ABAP学习记录 ABAP学习实用网址 abap语法 ABAP语法优化 ABAP语言 ABAP增强 ABAP知识点总结 ABAP指针 ABAP中RANGES的用法 ABAP中的同步和异步调用 abap字符串值变量 Abaqus ABLDT ABLDT_OI ABMA AC_DOCUMENT Account Group ACDOCA Activate ADD NEW FONT ADO.NET Adobe Form ADT AES AFAB/AFABN AFAMA AG1280 AirByte AJAB ajax AL11 ALE all in one Allocation Rule ALV ALV List ALV SEL_MODE alv 刷新 ALV报表 ALV横列单元格颜色 ALV模板 ALV鼠标右键 alv下拉 alv显示基础 ALV知识点 AMDP amp AMS系列产品 android android studio Android9设备打开WIFI热点 android不同版本风格 android模拟器 android热点流程 Android网络接入框架分析 Android系统开发 Angular angular.js ANSYS Ant Anywhere数据库监控 AO25 aof apache Apache DolphinScheduler API api document APM APO APO函数 APO开发 app App Service for Window application app测试 app服务器设计文档 app服务器数据库文件夹下 aps APT Architecture Archiving Area Menu arm arraylist ar路由器的虚拟服务器 ASAP asp.net asp.net MVC Assortment ATO Attribute AuCs authorization Automatic AutomaticScrg automation AVForamt AW01N Awesome Java awk awr AWS AWS SAP AWS SAP认证 aws认证 AWS战报 Azure Azure Storage B2B增长 Backflush BADI BANK Bank Account BAPI bapi sap 创建物料 BASE base64 bash BASIS Basis Consultant Questionnaire BASIS基础知识 BASIS模块 BASIS系统配置及操作 BASIS中遇到的问题 batch Batch Data Conversion BD87 BDC bdv021-clickHouse Beginning WF 4.0翻译 BGP路由器协议排错 bgRFC BI BI+BW+BO仓库管理 big data BigData ble bluetooth BO BOBF bom bom成本分析模型 bom更改编号 sap books bookv001——navigationing Boost完整实战教程 bootstrap BOPF BP BPC BPC开发 BP共用编码 BP和客商关联后台表 BP-客商 BP配置 bp配置 sap BP文档 break BRF+ BRFplus BSP BSTAT=U bt BTE BTEs BTP BUG BUG问题解决 BulkStorage BurpSuite插件 Business Suite BusinessPartner BUT000 BW BW/4 HANA BW4 bw4/ hana BW4/HANA BW4HANA BW报表使用操作手册 BW技术 BW建模 BW实施 ByteDance C# C# IO相关 C# sap集成 C# WPF C# 编程 C# 窗体应用 C# 读取txt文本数据 C# 读取文本每行每列数据 C# Stopwatch C#Winform C#编程 C#高级 C#格式转化 C#基础 C#基础知识 C#教程 C#入门经典 C#算法演义 c#学习 C#知识点笔记 C/4 C/4HANA c/c++ C++ C4C CA CS CO cad项目数据库服务器 Calculation CapacityCheck case when Cash Management cast CA周记 CBS CCNP题库 CDISC CDS CDS View CDS Views CDS视图 Cell Popin centos certificate CertificateType Change Log ChatGPT CHECK_ACCESS_KEYS CHECKBOX CheckBoxGroup Check按钮 chrome CI & CD CIO ci上传文件到不同服务器 cj20n sap 报错未知列的名称 CKM3 CKMLCP CL_GUI_ALV_GRID cl_ukm_facade Class ClickHouse clickhouse数据库 Client Copy CLIENTCOPY Cloud Cloud Native Cloud Platform CloudFoundry CMS CMU15-445 (Fall 2019) CO CO01 co88 sap 实际结算 COCA单词表 COCA高频单词 COCA核心词汇 COCA英语分频词汇 COCA英语语料库 CO-CCA CODE COGI COKEY Commerce Commvault Commvault技术知识点 Configuration connect_by_path ContentServer continue Control ControlQuantity CONV Conversion COPA COPC COPY来源 Cording Block Core Data Service(CDS View) CO控制 CO配置 CPI CPI技术小知识 CPLD CPM cpu CRM CRM系统 crm系统服务器要求 cross warehouse Crystal Reports CS CSharp CSI SAP2000 CSI SAP2000安装教程 css css3 CSV认证 CTCM ctf CTF-MISC CTF-Misc-wp CTS Customers CVI_CUST_LINK CVI_VEND_LINK C和C++Everything教程 C语言 C语言程序设计 Dapr Data Services Data sources database datagridview dataTable交换列 dataTable列操作 DATAX date DateNavigator DB DB LUW DB2 dba DBA 实战系列 DBCO DD08V DDIC DDS算法 debian debian云服务器项目 Debug debug方法 DEBUG改SAP表数据 Decal Decline demo DEMO程序 des DESADV DESTINATION DestinationProvider devexpress v22.1 devops DevSecOps DIalog Dictionary Encoding Diff discuz服务器系统 disk dms dns怎么修改默认服务器 docker docker容器 dom dont show this message again Driver E5调用API E5开发者 E5续订 EBS Ecc ECC_常用标准函数标准方法 ECC6 ECC6是否支持linux7 echarts eclips Eclipse eclipse报错 ECM ecmascript ECM企业管理 ecn EDI EDIT Ehancement EHP EHP4 EHP8 elasticsearch elementui ELT emqx English Enhancement enhancement MBCF0007 Enterprise Servers and Development Entity Linking Enumeration EOS空项目添加服务器 EPIC EPIC_PROC epoll EPPM erp erp oracle数据库连接失败 ERP 增强 erp5 ERP-SAP erp服务器系统分区多大 ERP供应链 ERP实施 erp无线架设服务器 ERP系统 erp系统 服务器在哪里的 ERP项目 ERP小讲堂 es6 esb ESP8266 esri ESXI ETBAS二次开发 eth节点计划服务器维护 ETL etl工程师 ETL工具 ETL开发规范 ETL社区版 ETL数据集成 ETO events EWM EWM模块 Example examples EXCEL Excel服务器数据库修改 Exception EXCLUDING express F.13 F-02 F110 F5080 FAA_CMP_LDT FAGL_FC_VAL FAGLGVTR FB05 FBB1 FBL1N ffmpeg FI FI01 FI12 FI12_HBANK FI-AA FICO fico bapi FICO Integration FICO-AA FICO模块 FICO-年结 FICO问题点 FICO-月结 FICO增强 field-symbols fifaol服务器不稳定 file Fine finereport FINSC_LEDGER Fiori fiori 2.0 fiori app configuration fiori launchpad Fiori-Web FIORI配置 Fixed point arithmetic FixedStorageBin FI财务 FI金额 FI配置 FLCU00 flex FLVN00 FM Focus FONT FONTS For FOR ALL ENTRIES IN FPGA fpga开发 FPGA项目例子总结 FPM framework freemarker Freight标签页 freshman to ABAP FS15会计科目扩充 FTP ftp 网页如何上传到服务器 ftp传输文件到其他服务器 ftp服务器存放文档 ftp服务器端文件大小设置 ftp服务器设置上文件大小 ftp服务器生成xml文件 FTP服务器收不到传送的文件 ftp服务器数据存放位置 ftp服务器文件路径怎么写 ftp服务器限制文件大小 function Function ALV Function Modules functional programming Functions Game Gartner Gateway GATEWAY100 GBase gdal GeneXus GeneXus 2021 gentoo 安装php7 GeoTools GET Parameter GIS Git github Gizmos gnu go google Google 微软 亚马逊 阿里 腾讯 字节跳动面试总结 GR GR Date GR/IR GR/IR余额清单 GRaph Process groovy GroupNumber gui GUI STATUS gui740的消息服务器 GUID GW100 H3c 服务器bmc管理芯片 h3c服务器 raid 型号 h3虚拟服务器 h5修改服务器数据 hadoop HAHA SQL halcon HANA HANA Advanced Data Modeling HANA Advanced Data Modeling 读书笔记 HANA DB HANA DBA hana s4 服务器 HANA SQL hana sql mysql oracle HANA SQLScript HANA Studio HANA VIEW hana vs oracle hana 表空间 hana 查看表字段 HANA 导入数据 hana 服务器性能测试 HANA Studio HANA安装 hana查询去重 HANA常用函数 hana抽数到mysql hana的date对应oracle日期 hana服务器销售资质 HANA进阶学习 hana生产系统服务器 HANA实战 hana数据库 hana数据库 字段长度 hana数据库导入mysql hana数据库导入到oracle hana数据库服务器文件丢失 hana数据库教程php hana数据库连接mysql hana数据库连接oracle hana数据库与mysql HANA信息建模 Hana性能优化 hana修改字段 HANA学习 hana语法 HANA在线日志 Hashid hash-identifier hbase HCM HCP HDI Container HEC hibernate hierarchy Hints his系统服务器数据存在哪里 His系统数据库服务器关系 hive HNUST湖南科技大学计科专业考试复习资料 hp380G5服务器系统安装 hp服务器产品文档 HR HR模块 HR薪资发放过账 HR增强 HTAP HTAP for MySQL html html5 HTML5/CSS/Bootstrap http http://95u.free.fr/index.php httpcompnents https https://mp.weixin.qq.com/s/keb HU Hybris I/F IBAN IBP ICF ID ide idea idea中项目如何上传到服务器中 IDES IDoc idoc java IDOC技术 IDT ifm_research_notes IFRS16 iis ftp服务器文件大小 ijkplayer IM image imessage IMG子菜单 import IM层面 Include Informatica inspection point intellij idea Inter-company Intergration Internal table Interview INVOIC ios iot IP ipad协议 ipfs存储服务器销售 IQ02 IQ09 IR IRPA ISO IS-RETAIL issue IT IT - Linux ITS ityangjia IT技术 IT企划 IT生涯 IT项目与团队 IT养家 j2ee J3RCALD jar Java java b1 b1 be a9 Java Connector java jco sap 重连 JAVA PI PO SOAP JAVA PO SOAP java sap总账凭证接口 java webservice调用sap Java Why java 访问hana java 薪水完爆abap JavaScript javaSE基础篇 Java并发 Java调用SAP java调用sap接口 JAVA调用SAP接口地址 java对接sap java更换sap配置不生效 Java工具类 JAVA工作日常 java函数调用报错 java获取hana接口数据 java获取sap数据 java开发 java连接hana java连接sap Java连接sap无明显报错信息 java实战 java项目所需服务器 JAVA学习 java云服务器怎么上传文件大小 java怎么安装apple JAVA重点部分的笔记 java转sap hybris方向 JCo jco.client.saprouter JCo3 JCO连接 jdbc JDBC连接 JDK jira JOC Join JOIN 内表 jpa jquery js json json 服务器 文件 js基础笔记 junit JVM jwt K3 kafka KANBAN KE24 kernel kettle KEY kohana KP06与KP26 KSU5 KSV5 kubernetes labview lambda lamp LAN leetcode LEFT DELETING LEADING LENGTH Leonardo less linq Linux linux 64位vcs linux hana linux hana 版本查询 linux 安装sap linux 划分两个VDisk linux 命令是 的sap linux64 solvers Linux查看hana数据库进程 linux登录Hana数据库 linux调用rfc函数配置 Linux开发分享 Linux启动SAP服务 linux如何查看MBFE版本信息 Linux网络 linux系统的服务器怎么重启 linux相关 linux中停sap服务 lisp list LISTING Lock Logic LogicSystem lpfs存储服务器怎样维护 LQ02 LSETBF01 LSMW LT23 LT41 LT42 LT45 LTMC LTMC和LSMW等 LTMOM LX03 LX09 LX10 LX11 LX12 LX29 LX39 M_MSEG_LGO mac mac os x macos Mail makefile Manage Banks manager mariadb Markdown mass MASTER DATA MAST表 matdoc Material Group Material Ledger MaterialSpec matplotlib matrix maven MaxDB MaxWeight MB04 MB51清单格式 MB5B MB5M MBSM MBST MBST冲销 mcu md01和md02区别 MD04 MD04中例外信息30 MDBS MDG MDG 2021 MDG 2022 MDG BP MDG顾问 MDG项目 ME me15 me21nme22nme23n增强ME_ ME22N ME57界面看到的供应源跟Source List主数据不一致 MEBV memcached MES Mesh Message Messages MetaERP Method List MF47和COGI MI10 MIBC microsoft Microsoft Access Microsoft Azure Microsoft365 E5 MIGO MIGO 241 migo 311 MIGO+201 migo初始化库存 s4 MIGO事务代码 MIGO增强 MIGO子功能 migration Migration cock MIRO MIRO发票校验 MIRO发票校验多采购订单选择 mkpf ml MM mm bapi MM/SD mm17 MM41创建的商品主数据 MM41创建商品主数据 MM60 MMBE MMPV MMSC MM-报表功能开发 MM-采购管理 MM-采购审批 MM常用BAPI MM-定价过程 MM更改物料类型 MM顾问 MM教程 MM模块 MM配置 MM物料管理 mobile MODIFY table MOVE TO movement type mp3 MP38 MPN MPN物料的采购初探 mps MQTT mqtt服务器数据存储位置 mqtt协议库服务器 MRP MRP标识 MRP处理代码 MRP过程 MRP组 MS SQL mseg mssql MTE MTO MTO/MTS MTS MTS/MTO/ATO/ETO MTS/MTO/ETO Mule ESB 开发 Mule ESB 社区版 实施 Mule ESB 实施 Mule ESB开发 Mule ESB社区版实施 Mule ESB实施 MultipleBOM MultipleSpecifications MultipleSpecs Muxer mvc MWSI mybatis mybatis-plus myeclipse mysql mysql 1060指定的服务未安装 mysql hana数据同步 mysql版本情况 Mysql等数据库 MySQL高级 mysql和hana mysql数据库停库停不下来 MZ SAP FICO精讲视频 MZ SAP那些事 nagios name_mappings Naming Convention NAST nas怎么备份服务器文件夹 NativeLibrary.Load nat服务器性能 nc 二次开发 NCO NCO3.0 nc文件服务器 数据库文件 NDSS NetSuite 案例 NetSuite新闻 Netweaver network New NineData nlp Node node.js nodejs nokia NoSQL NOTE npm null Number Range numbers numpy NW751 nwa key-storage NWBC NX文档服务器 o365 OA OAAQ OABL oa办公 OB07 OB08 OB13 OB52 OB62 OB74 OBBH OBJK ObjType OBR1 OBR2 OBR3 OBYC-DIF OBYC-PRD oceanbase ocx OData odbc odoo office OI-题解 olap OMIR OMSJ OMSY OMX6 Onenote_DB Onenote_Others onetime vendor On-premise OO OOALV OOALV进阶 OOALV增删改查 OPEN open item OPEN SQL Open Storage Opengauss openGauss核心技术 OPENSAP UI5 扫盲 OPENSQL Openui5 openwrt系统安装到云服务器异常 ops$ oracle数据库用户 ora 01005 linux Oracle oracle 60401 oracle clob minus oracle dba Oracle EBS oracle e-business suite 下载 Oracle ERP oracle ftp 文件乱码 oracle hana 字段长度 oracle logon 乱码 oracle nid ora 24324 oracle sap 备份 oracle sap金蝶 oracle set newpage Oracle Tuning oracle 抽数据到 hana oracle 创建一揽子协议 oracle 打开数据库三步 oracle 应用系统 oracle创建服务出错1073 oracle和netsuite培训 Oracle数据库 oracle数据库恢复版本不一致 oracle与用友的差别 OS other Others Outbound Overtime p2p PA PaaS PACKAGE SIZE Pandas parallel Parameter Partner payment Payment method Payment Terms PA认证 PB00 PBXX PC PC00_M99_CIPE PCo PCP0 PC安装服务器系统 PDA pdf performance PE安装服务器系统6 PFCG PGI Pharos(小白路标) php php功能函数 PHP开发erp功能模块 php连接sap hana数据库 php清理服务器文件大小 php与sap系统 php转行自学java PhysicalSamples PI PI/PO ping pip PIPO PIR PI接口常见问题处理 pi节点虚拟服务器怎么弄 Plant Group PLG PLG Application跳转传参 plm PLSQL PLSQL13 PLSQL弹出框 PM pmp pms PMW PO po 价格条件表 PO&amp poi PolarDB Popup Port Portal POS POS Interface PostgreSQL posting key postman Postman 接口测试 Power BI PowerBI PowerBuilder Powered by 金山文档 powerpoint PowerQuery&amp PO接口常见问题处理 PO中基于GR的IV清单 PP PP &amp PP Module PPM PP模块 pp模块常用表 sap PP生产订单 PP生产过程 PR PREPACK Pricing Print PROCEDURE Product Hierarchy project management PS PS模块 pu Purchase Purchase Order History Categor pyautogui pycharm python Python Golang 人工智能 机器学习 图像处理 Python场景积累 python获取sap数据 Python基础 PYTHON接口开发 python连接sap接口 python能连sap吗 python学习 python与sap QA08 QA11 QC51 QE01 QE23 QM QM Control Key QM采购质量管理 QM质量管理 QP01 qRFC QS28 QS61 qt qt5 Quality Certificate Quant QUERY R3 rabbitmq rac 服务器 修改时间 RadioButtonGroup Random react react.js READ receive idoc redhat redis REDUCE Reflex WMS REM REP Report ReRAM rest REST ADAPTER RESTful RETAIL ReturnDelivery RFC rfcv函数实现 RFC查询SAP数据库 rfc方式的集成 sap RFC封装WEBService RFC函数 rfc垮端口 sap RFSEPA02 RIGHT DELETING TRAILING Rollout project Routing RPA RPA机器人 RPA机器人流程自动化 RPA魔力象限 RPA资讯 RPC0 RSA RSA Encryption RSA PRIVATE KEY RSS RTMP协议云服务器 runtime rust RV_ORDER_FLOW RWBE r语言 R语言入门课 S/4 S/4 HANA S/4 HANA 1809 S/4HANA S/4HANA 2020 S/4HANA 2021 S/4HANA 2022 S/4HANA迁移 S/4补0 去0 s_alr_87013127 S_ALR_87013611 S_ALR_870136XX s2k S4 S4 CLOUD/ FIORI S4 CRM S4 HANA s4 hana ecc S4 HANA 功能变化清单 S4 HANA数据迁移工具 S4 HAVA S4 Kernel S4CRM S4H PA S4HANA S4HANA Conversion S4HC S4HC产品相关 S4新表ACDOCA S4新型数据导入工具 saas SAC Sales Area SALES PRICE SampleSize SAP sap abap SAP ABAP学习 SAP Basis SAP / 后台配置 SAP 1809 sap 46c oracle 从unix 迁移至 windows SAP ABAP SAP ABAP  Excel模板上传及Excel数据批导 SAP ABAP AES128 SAP ABAP AES256 SAP ABAP for HANA SAP ABAP HANA SAP ABAP Runtime Error SAP ABAP SHA512 SAP ABAP 编程教程 SAP ABAP 并发 SAP ABAP 核心代码 SAP ABAP 基础 学习 SAP ABAP 李斌的分享笔记本 SAP ABAP 问题整理 SAP ABAP 学习资料 SAP ABAP 增强 SAP ABAP(总结) sap abap接口篇 SAP ABAP开发 sap abap开发从入门到精通 SAP ABAP开发实战——从入门到精通 SAP ABAP开发问题记录 SAP ABAP开发专栏 SAP ABAP零碎知识 SAP ABAP浅尝截止 SAP ABAP实例大全 SAP ABAP性能优化 SAP ABAP增强 SAP ABAP自学教程 SAP Adapter SAP Adobe Form SAP AES加密解密 SAP ALE SAP ALV SAP Analytics Cloud sap and oracle SAP APO SAP APO 介绍 SAP Ariba SAP ARM SAP B1 SAP B1 License Serve SAP B1原创 SAP BAPI SAP Basis SAP Basis Tips SAP Basis 系统学习 SAP Basis&amp SAP BDC SAP BDC MODE SAP BDC模式 SAP BI on HANA SAP BO SAP BOBF/FPM/WEBDYNPRO SAP BOBJ SAP BOM反查 SAP BOM记录查询 SAP BOM修改记录 SAP BP SAP BTP SAP business one SAP Business One 二次开 SAP BW sap bw、echar、smart bi sap bw4 sap C/4HANA SAP C4C SAP CAR sap cds view SAP client2.0 download SAP Cloud SAP Cloud Platform SAP Cloud Platform Cockpit SAP CO SAP Consultancy SAP CP SAP CPI SAP CRM sap crm button SAP Data Service sap dbco访问oracle SAP DEMO数据增加 SAP Dialog调用 SAP Dialog开发 SAP Dialog学习 SAP ECC SAP ECC6 SAP ECC6 / CO SAP ECC6 / FI SAP EDI SAP EPIC SAP ERP SAP ERP系统 SAP EWM SAP excel数据导入 SAP FI sap fi  凭证跳号 SAP FI-AA SAP FICO SAP FICO 报错处理办法 SAP FICO 开发说明书03(源代码仅做参考) SAP FICO 系统配置 SAP FICO 资料免费分享 SAP FICO开发说明书_01(源代码仅作参考) SAP FICO开发说明书_02(源代码仅作参考) SAP Fiori SAP Fiori & SAP(open) UI5 SAP Fiori 开发实践 SAP FM SAP freelancer SAP Frori SAP Gateway SAP GUI sap gui script SAP GUI 登录不需要密码 SAP GUI 界面 SAP GUI 快捷方式密码 SAP GUI 密码保存 SAP GUI 免密登录 SAP GUI 主题 SAP GUI 主题切换 SAP GUI+WEBGUI SAP GUI界面切换 SAP GUI密码设定 SAP GUI切换 SAP HAN SAP HANA SAP HANA Hint sap hana oracle exadata SAP HANA SDI sap hana 迁移 oracle SAP HANA 数据库学习 SAP HANA  上云 SAP HANA2.0 SAP HANA总结 SAP HCM SAP HCM学习 SAP HR sap http SAP IBP SAP IDOC sap idoc java SAP INBOX SAP IRPA SAP ISSUE sap java客户端 sap java乱码 SAP JCO NCO SAP JCO 负载均衡 SAP License sap linux客户端 sap linux系统安装教程 sap linux下配置文件 SAP List Viewer(ALV) SAP LOGON SAP LSMW SAP LSMW教程 SAP LUW SAP MASS SAP material classification SAP MDG SAP ME sap me21n增强 sap me22n增强 sap me23n增强 sap mes java SAP MII SAP MM SAP MM BAPI SAP MM 对于MRKO事务代码的几点优化建议 SAP MM 后台配置 SAP MM 特殊库存之T库存初探 SAP MM 小贴士 SAP MM/SD 业务相关 SAP MM06 SAP MM基础配置 SAP MM模块面试 SAP MRP默认值 SAP MRP默认值设置 SAP MRP配置 sap mysql SAP Native SQL SAP Nco 3 Connector 连接SAP 并接收数据 SAP NetWeaver sap netweaver 7.02 sap netweaver application server java SAP NetWeaver RFC library SAP NWBC sap nwds as java SAP ODATA SAP OData 开发实战教程 - 从入门到提高 sap oracle client SAP PA证书 SAP PI SAP PI - 同步 vs. 异步 SAP PI PO 接口调用 SAP PI PO 接口问题 SAP PI SSL证书 SAP PI&amp SAP PI/PO SAP PI/PO 系统集成 SAP PI架构 SAP PLM SAP PM SAP PM 工厂维护 SAP PO SAP PO PI 系统接口集成 SAP PO SSL证书 SAP PO 导入SSL证书 SAP PO/PI接口 sap powerdesigner SAP PO安装 SAP PP SAP project SAP PS SAP QM sap query SAP R/3 SAP R3 SAP R3 ABAP4 SAP R3 主流系统EAI接口技术剖析 sap r3的lanuage 代码 SAP REST API SAP REST JSON SAP Retail SAP RFC SAP RFC 与 Web有啥区别 SAP ROUTRE SAP RSA 加密解密 SAP S/4 SAP S/4 HANA SAP S/4 HANA Cloud Sap S/4 Hana 和Sap ERP有什么不同 SAP S/4 HANA新变化-FI数据模型 SAP S/4 HANA新变化-MM物料管理 SAP S/4 HANA新变化-SD销售与分销 SAP S/4 HANA新变化-信用管理 SAP S/4 HANA新变化-主数据:物料主数据 SAP S/4 HANA新变化-主数据:业务伙伴之后台配置 SAP S/4 HANA与SAP Business Suit SAP S/4 MM SAP S/4HANA SAP S/4HANA表结构之变 SAP S4 SAP S4 HANA SAP S4 HANA CLOUD SAP S4  有用链接 SAP S4/Cloud应用 SAP S4/HANA FICO都有哪些改变? SAP S4HANA SAP S4HANA里委外加工采购功能的变化 SAP SBO9.1 SAP SBO重装 SAP SCM EWM SAP script SAP SD SAP SD MM PP FICO SAP SD 常用表 SAP SD 基础知识之定价配置(Pricing Confi SAP SD 基础知识之计划行类别(Schedule Lin SAP SD 基础知识之物料列表与物料排除 SAP SD 基础知识之行项目类别(Item Categor SAP SD 销售中的借贷项凭证 SAP SD 信贷管理的操作流程 sap sdi mysql SAP SD常用表 SAP SD基础知识之凭证流(Document Flow) SAP SD基础知识之输出控制(Output Control SAP SD模块 SAP SD模块-送达方和售达方的区别和联系 SAP SD微观研究 SAP SHIFT SAP SICF REST SAP smartforms乱码 SAP smartforms转pdf SAP smartforms转pdf乱码 SAP SQL sap srm SAP SRM 开发 SAP SRM  函数 sap strans解析json SAP TIPS SAP UI5 SAP UI5&amp SAP Variant 配置 SAP VC SAP Web Service SAP Web Service简介与配置方法 SAP Webservice SAP WM SAP WORKFLOW SAP XI/PI SAP 案例方案分享 sap 报错 注册服务器错误 SAP 报错集合大全 SAP 标准功能 SAP 标准教材和自学方法 sap 标准委外和工序委外 sap 查看服务器文件夹 SAP 常规 SAP 常用表 SAP 常用操作 sap 成本中心下的po SAP 成都研究院 SAP 导出 HTML sap 导出系统所有的单位 SAP 登录图片修改 SAP 顶级BOM查询 sap 订单状态修改时间 SAP 端口 SAP 发票合并与拆分 sap 发送mesage SAP 反查顶级BOM SAP 反查一级BOM sap 服务器信息 SAP 功能函数 sap 供应商表 SAP 顾问宝典 SAP 函数 SAP 后台表 SAP 后台配置 sap 计划订单 sap 假脱机请求 SAP 接口 SAP 接口测试 SAP 结账流程 sap 界面创建凭证 SAP 金税接口介绍 SAP 开发 sap 流程图 退货销售订单 sap 默认屏幕变式 SAP 配置 &amp SAP 批量创建货源清单 SAP 请求号 SAP 权限 SAP 权限配置 SAP 商超订单统一管理系统 SAP 商品主数据 SAP 数据库删除 SAP 数据字典 sap 双计量单位 sap 思维导图 SAP 锁机制认识 SAP 通用功能手册 SAP 透明表 SAP 图片修改 sap 文档服务器安装 SAP 问题以及报错 SAP 物料版次 SAP 物料不一致 SAP 物料删除标记 SAP 物料在启用序列号管理或者不启用序列号管理之间快速切换 SAP 系统 sap 消耗策略999 sap 消息服务器 bat sap 小技巧 sap 新建事务 sap 新增科目表 sap 修改服务器时间格式 sap 修改许可服务器 SAP 虚拟机配置1-FI SAP 虚拟机配置2-CO SAP 虚拟机配置3-MM SAP 虚拟机配置7-WM SAP 序列号与库存关联起来? SAP 选择屏幕 SAP 选择屏幕开发 SAP 演示数据增加 SAP 业务 SAP 业务顾问成长之路 sap 一代增强 SAP 银企直连 SAP 银企直联 SAP 银行对账 sap 用户权限表 SAP 语法(Syntax) SAP 员工主数据 SAP 原材料 SAP 云 SAP 杂项 SAP 增強 SAP 增强 SAP 之门 01 SAP 中国研究院 SAP 主题 SAP 字段增强 SAP 自动化 SAP  ERROR sap  hana SAP  MM知识点 SAP  PP SAP  配置 BOM SAP Enhancement SAP Migration SAP SD SAP STMS SAP&amp SAP* sap*账号 SAP,SD SAP/ABAP SAP/ABAP 相关汇总 SAP/ABAP记录 SAP/ERP SAP/FICO sap/hana SAP_ABAP SAP_ABAP知识点 SAP_BAPI SAP_BASIS SAP_FICO sap_mm SAP_PP SAP_SD SAP_Table SAP_TCODE SAP_モジュール_MM SAP_モジュール_SD SAP_常见问题集合 SAP_常用BAPI SAP_常用表 SAP_各路小技能 SAP_基本配置 SAP_接口 SAP_视图 SAP·SD SAP2000 sap2000学习笔记 SAPabap SAP-ABAP SAP-ABAP-Function SAP-ABAP基础语法 SAP-ABAP-基础知识 SAP-ABAP小白学习日常 SAP-ALL SAP-ALV SAPB1 SAP-BASIC SAP-Basis SAP-Bassic-基础知识 SAP-C01 SAP-CO SAPECC6.0 SAPFI SAP-FI SAP-FI/CO SAP-FICO SAP-FICO-CO SAP-Fiori SAP-GR SAPGUI SAPHANA SAP-HANA saphana服务器操作系统说明 saphana服务器硬件评估 SAP-IR sapjco SAPJCO3 sapjco配置文件下载 sapjoc3 SAPLINK SAP-MDG SAP-MDG-GEN SAP-MDG-HOWTO SAP-MDG-INTEGRATION SAPMM SAP-MM SAP--MM SAP-MM-采购管理 SAP-MM-后台 SAP-MM-前台 SAP-MM问题集锦 SAP-MM-问题记录 sapmto生产模式配置及操作详解 sapnco sapnco3 receive idoc sapnco3 接收 idoc sapnco3.0 SapNwRfc.dll SAPOSS SAP-Other SAP-PM SAP-PO SAPPP SAP-PP SAP-PP模块 SAP-PS SAP-QM SAP-RETAIL SAProuter SAP-RPA SAP-SD SAPUI5 SAP-UI5 SAPUI5核心内容 SAPUI5教程 SAP-WDA SAP-WM SAP案例教程 SAP宝典 SAP报表开发工具 Report Painter SAP边做边学(自学)-看看坚持多久 SAP标准工具程序 SAP表 SAP--表相关 sap采购订单更改记录 SAP采购订单增强 sap采购申请自动转采购订单 SAP仓储单位SU SAP-操作文档 SAP策略组 sap产品 sap产品图谱 - road to sap.pdf SAP常规功能 SAP-常见问题 SAP常用BAPI SAP常用表 SAP超时设置 sap成本流怎么看 SAP创建自定义权限 SAP呆滞库存的计算 SAP代码分享 SAP单链接 SAP的NOTE sap的pod确认 sap的工作日历 SAP的技术战略 SAP的竞争战略 sap的清账是什么意思 SAP调用 SAP队列 SAP访问本机虚拟机服务器 sap放弃java sap服务器安全证书 sap服务器查看系统日志目录 sap服务器出pdf文件 sap服务器迁移性能问题 sap服务器数据库配置文件 sap服务器文件上传 sap服务器怎么安装双系统 sap服务器之间文件复制 SAP改表 SAP--概念 SAP干货分享 SAP各种BOM汇总——含义解释 SAP更改物料类型 sap更改主题 SAP工具 SAP-工作 SAP公司 sap供应商更改组 sap固定资产号码范围 SAP顾问 SAP顾问进行时 SAP顾问那些事 SAP管理 SAP核心模块 SAP后台配置 sap后台配置原因代码 SAP环境配置 sap获取系统时间 SAP基本安装 sap基于mysql安装 SAP技巧 SAP技巧集 SAP技术 SAP技术端 SAP技术文档 SAP技术小知识 SAP技术总结 SAP加解密 SAP加密 SAP架构 SAP-架构 sap假脱机打印机设置 SAP监控 SAP监控常用TCODE sap脚本运行 SAP教程 SAP接口 SAP接口 证书和密钥 SAP接口编程 SAP接口常见问题处理 SAP接口开发 SAP接口数据库 SAP接口相关设置 SAP解密 SAP界面设置 SAP经验 SAP开发 SAP-开发 sap开发需要java吗 sap开发语言 sap可以指定应用服务器 SAP客户数据 SAP客户数据导出 sap客户信贷 sap客户主数据bapi SAP-跨模块知识 SAP零售 SAP零售行业 SAP密码过期设置 sap模糊搜索闪退 SAP模块 SAP模块知识 sap内部顾问 sap内部运维 sap培训 SAP培训机构 SAP配置 SAP批量打开工单 SAP批量导出客户 SAP批量导出客户数据 SAP批量修改 sap期初导资产代码 sap清账使用反记账 SAP请求传输 SAP取历史库存(可查询期初期末库存和指定日期之库存) SAP权限管理 sap权限激活 SAP认证 SAP如何发布webservice SAP入门 SAP软件 SAP删除物料 SAP上云 sap生产工单报工 SAP实施 SAP实施攻略 SAP实施知识 SAP使用技巧 sap事务代码 sap事务代码如何收藏 SAP视频 SAP视频教程 SAP视图 SAP视图批量维护 SAP视图维护 SAP数据表 SAP数据导入导出 SAP数据分析 SAP-数据库 sap税码配置 SAP索引不存在 SAP通用技能 sap外币重估流程图 SAP维护 SAP-未分类 sap未分摊差异怎么处理 sap文化 SAP文章 SAP问题处理记录 sap无法正常启动服务器配置文件 SAP物料classification SAP物料类型 SAP物料删除 SAP物料视图批量维护 SAP物料视图维护 SAP物料特性值 SAP物料主数据 SAP稀有模块 sap系统 SAP--系统 sap系统ftp服务器下文件 SAP系统-MM模块 sap系统搭建教程 sap系统登录时没有服务器 SAP系统管理 SAP系统界面 SAP系统配置 sap系统前台数据与后台表之间 SAP系统研究 sap系统中的batch sap相关知识 SAP项目 sap项目部署到服务器 SAP-项目经验 SAP项目实施 SAP-项目实施随笔小计 SAP项目问题 sap消息服务器错误 SAP--消息号 SAP消息监控器 SAP销售订单邮件 sap销售发货的流程 sap销售凭证流mysql表 sap销售维护 SAP销售员维护 SAP小问题 SAP写入mysql SAP心得 SAP新产品系统 SAP修改已经释放了的请求号 sap虚拟机 多个服务器 sap虚拟机作为服务器 SAP选择屏幕 SAP选择屏幕开发 SAP学习 SAP业务 SAP异常处理 SAP银企直连 SAP银企直联 SAP银行账户管理(BAM) sap应用服务器超载 SAP邮件发送 SAP邮件记录 SAP邮件记录查询 SAP云平台 SAP运维 SAP-运维记录 SAP杂谈 SAP-杂谈 SAP杂项 SAP在采购和销售中的税务处理-增值税 sap增加事务代码权限 SAP增强 SAP战报 SAP战略中的机器学习 SAP知多少 SAP知识点 SAP制造集成和智能 SAP智能云ERP SAP中CK11N成本估算 sap中re凭证是什么意思 SAP中s_p99_41000062查询物料价格数据库表 SAP中报表清单导出的常用方法 SAP中的client SAP中的贷项凭证、借项凭证 SAP中的移动类型 SAP中方会计凭证解决方案 sap中国 sap中文使用手册 模块指南 SAP中销项税MWSI和MWST有什么区别? SAP中执行没有权限的事务 SAP中自动登出 SAP转储订单(STO) SAP咨询公司 SAP资讯 sap字段及描述底表 sap自带samples sap自动化 SAP自习室 SAP组连接 SAP最大用户数设置 sara SAST SAT SBO开发 SCA scala SCC4 Schema schema增强 scipy scm SCP SCP Cockpit scpi Screen SCRIPTFORM scripting Tracker SD sd bapi SD Module SDI SD常用表 SD模块 SD销售 se09 SE11索引 SE16N SE16和SE16N修改后台表数据方法 SE37 SE38 se91 SE93 Search search help security segw SELECT Select Screens select sql Selenium SEN SER01 Serial  Numbers SERVER Serverless service servlet Set SET Parameter setting SFW5 ShaderGraph sharepoint Sharepoint Or Online shell SLD SLT SM02 sm36 SM37 SM50 SM59 smartbi问题 Smartform smartforms SNOR SNP BLUEFIELD SNP 中国数据转型公司 SNUM SOA soamanager soap SoapUI 接口测试 socket SOD Software Development Notes Sort and Filter Sotap Source Scan spa Hana SPAD Spartacus标准开发 Spartacus二次开发 SPC SPED SPOOL打印 spring Spring Boot SpringBoot SPRO spss打开oracle SQL SQL server SQL Trace sqlite Sqlmap使用教程 sql-sap SQLSERVER SQLSERVER内部研究 SqlSugar sql笔记 SQL语法 sqoop SR2 sRFC srm SSCRFIELDS ssh SSIS ssl SSL证书 ST05 ST12 START STE stm32 STO Stock Type stocktransfer Stopwatch StorageLocationControl StorageType StorageUnitType StorLocControl streamsets string SU20 SU21 SU24 Submission SUBMIT sudoku SUM Suport SUSE SUSE 11 SP4 SUSE Linux SU号码 SXI_MONITOR SXMB_MONI SXMSPMAST Sybase Sybase迁移数据到Oracle Sybase数据库迁移数据到Oracle SYSAUX Sysbase system System_failure s云服务器 网站群服 T184L T681 table TABLE FUNCTION Tableau Tabstrip TCode T-Code tcp/ip TCP/UDP Socket TCPH TCP客户端显示服务器图片 TDSQL-C TeamViewer Tech 专栏 TechArt Teradata Test Automation test-tools Textbox TH_POPUP TiDB TikTok tim发文件服务器拒绝 TITLE TM TMS TODO tomcat tomcat报错 ToPrintControl Tough tp5部署虚拟机服务器 tp5服务器信息 tp5网站 服务器部署 tp5项目链接服务器数据库端口888 TR TR LIST Trace Transact-SQL transformer tree control tRFC trigger TryHackMe typescript T公司 T库存 u3d微信小游戏 u8信息服务器 UB UB STO ubuntu UD udp UD配置 uefi ugui ui UI5 Uibot Uipath UI开发 UI控件 UI自动化 unicode unity Unity 100个实用技能 Unity UGUI Unity3D Unity开发 Unity日常开发小功能 Unity微信小游戏 unity项目部署到服务器上 unity游戏开发 Unity坐标转换 unix Url URP user Userid usual UUID ux U盘 U盘文件拷贝到服务器 VALUE VARIANT VariantBOM vasp计算脚本放在服务器的位置 vb.net VBA VBA开发专栏 VBFA v-bind vbs Vendor CoA VendorCOA VendorRebate Verilog-HDL veth vhm在服务器上创建虚拟机 v-html VIEW vim visual studio visualstudio vite VKM3 VKM4 VL02N VL04 VL10B VL31N VL32N VMware VN VOFM v-on VS Code vscode v-show Vue vue.js vue2 Vue3 基础相关 vue项目如何放到服务器上 VulnHub渗透测试 WA01 WA21 WBS WCF WCN WDA WDA的配置 wdb WE20 WeAutomate Web web app Web Dynpro web gui Web IDE Web Service WebDispather WEBGUI WEBI webm webrtc WebService WEBSOCKET webvervice webview web安全 Web安全攻防 web渗透工具 WF 4.0 while Wifi热点java win10服务器系统数据库 win7系统创建ftp服务器地址 win7系统数据库服务器 Window windows windows服务 windows服务器版本系列 windows系统部署git服务器 Windows系统电脑操作 winform wireshark wlan WM WMS WM仓库管理 WM层面盘点 WM模块 WM配置 WM移动类型 Work Work Flow workflow wpf wps WR60 WRMO wsdl xaf xml xp系统怎么上传到ftp服务器 XS HANA XS Job xsdbool yara规则 yqv001-navigation Y企业信息化集成 Zabbix ZIP zk zookeeper zypper in 安装下载不了 阿里云 阿明观察 埃森哲 X SAP:智慧转型高手论剑 安鸾靶场 安全 安全分析 安全工具 安全架构 安全手册 安全与测试 安阳虚拟服务器 安装 安装报错 安装服务器系统数据库服务器 安装数据库服务器需要的文件 安装完数据库服务器为空 安卓 安卓服务器文件 案例 案卓盒子建立文件服务器 靶机 百度 办公自动化 包含服务器数据库的聊天系统 保护交货计划 保留空格 报表 报表优化 报错 报工 贝叶斯 备份及容灾 备份文件到内网服务器 被合并的公司 笔记 笔记本通过服务器提升性能 币别转换 编程 编程技术 编程世界 编程语言 编程语言排名 编辑器 编辑器转换 变更物料类型 变化 变式物料 标题 标准 标准成本历史清单 标准价 标准价和移动平均价 标准解决方案 表白网站怎么上传到服务器 表关系 表维护生成器 博弈论 补丁 补货监控 不常用 不能从服务器上获取视频文件格式 不同系统可以用一个数据库服务器吗 布局 部署 部署网页到华为云服务器 部署系统时访问服务器 财务报表 财务报表版本 财务管理 财务会计 财务科目导入 财务凭证行项目 财务增强 财务账期 采购 采购订单 采购订单和内部订单对应关系清单 采购订单价格与发票价格差异 采购订单审批 采购订单收货和订单收货区别 采购订单修改触发重新审批 采购订单增强 采购订单状态标准查询配置 采购附加费 采购附加数据 采购合同与采购计划协议关联性 采购价格 采购凭证模板 采购申请 采购审批 采购审批过程 采购收货及发票校验记录清单 采购退货 采购退货操作 采购退货测试 采购退货流程 采购退货业务 采购退货移动类型 采购信息记录 采购组 踩坑 踩坑日记 菜根发展 菜鸟日记 菜鸟之家 参数文件 参与MRP 仓库 苍穹ERP 操作符 操作系统 测绘程序 测试 测试工程师 测试工具 测试环境 策略组 层级查询 查看ftp服务器里的文件 查看服务器上文件命令 查询分析器 查询服务器系统类型有哪些 查找代码段 查找增强点 差异 差异分析 产品 产品成本估算 产品成本核算号 产品创新 产品经理 产品驱动增长 产品运营 常见端口 常见问题 常用bapi 常用sql 常用函数 常用数据类型 常用问题收集 常用自建函数 超自动化 成本对象 成本分割 成本估价历史清单 成本估算 成本估算的取价逻辑 成本核算表计算间接费用 成本核算结构 成本核算中BOM和工艺路线 成本收集器 成本要素 成本要素不可更改 成本中心标准报表 成本中心实际/计划/差异报表 成都最稳定的dns服务器地址 程序/PROGRAM 程序导出 程序人生 程序人生 ABAPer 程序人生和职场发展 程序设计 程序下载 程序员 程序员职业发展 持久类 持续集成 冲销扣料 初级成本要素 初阶 初学 初学者 处理外向交货单 触发器 传媒 传输 传输层 传输请求 传输日期 串口通信 创建服务器共享文件夹 创建物料主数据时的视图状态 创新 创新案例 创新战略 垂直居中 磁盘管理虚拟磁盘服务器 次级成本要素 从u盘引导进入linux6 存储 错误处理 错误解决 达梦 打印 打印次数 打印机 大厂面试 大庆服务器维修 大数据 大数据分析 大数据工程师 大数据可视化 大小写 大型服务器安装什么系统 代码规范 代码片段 代码在哪用到了 带格式的邮件附件 带你走进SAP项目 单片机 单片机系列 单位 单文件 单元测试 弹出框问题 弹性计算 导出电子表格问题 导出内表数据至Excel文件中 导出期末或指定日期库存 导入 导入license 导入数据库显示服务器发生意外 倒冲 到期发票清单VF04功能 登陆语言 登录oa系统输入服务器地址 登录日志怎么实现 低代码 低功耗文件服务器 地球 递归 第三方 第三期间 第一个ABAP程序 点击ftp服务器的文件弹出登录界面 电话 电商 调试 调试器 调用sap接口 调用接口 调用子屏幕修主屏幕 调优 调制与编码策略 鼎信诺显示连接服务器失败 订单 定价 定价过程 定价例程 定价值 定时采用ajax方式获得数据库 定时器 定时任务 定时同步文件到ftp服务器 定义 定义详解 动态安全库存 动态获取字段名 动态类 动态属性和事件绑定 冻结功能 冻结库存 冻结库存转库 读取文件内表数据 端口 队列 队列末尾 对象 对象不支持属性或方法dbzz.html 多扣料冲销 多流 多人共用 不能访问目录 多送或者少送 多线程 多引擎数据库管理系统 多源异构数据汇聚平台 多重科目分配 俄罗斯报表 二代增强 二级标题-003-Pacemaker 发票处理系统 发票冻结原因 发票冻结原因及解除冻结 发票小金额差异 发票自动化 翻译 反冲 反记账 反记账数据转换 返工 泛微OA调用SAPwebservice详解 泛微OA开发 方便小函数 方格子无盘服务器怎么用 访问后台接口 非技术区 非技术文章 非限制库存 分包后续调整 分布式 分类 分类账 分配表 分配分摊 分三个屏幕的OOALV 分析云 分享学习 服务 服务类采购订单的收货审批确认 服务器 服务器 文件类型 服务器 稳定 重要性 服务器1g内存装什么系统 服务器cpu只显示一个核 服务器host文件目录 服务器raid1做系统 服务器vos系统怎么装 服务器安全证书登陆失败怎么办 服务器安装系统sles系统 服务器安装系统如何选择网关 服务器安卓系统安装教程 服务器被攻击 文件被删除 服务器比对数据库差异文件 服务器标识信息 服务器部署的参数文档 服务器操作系统套什么定额 服务器操作系统用什么好 服务器操作系统与数据库 服务器查看操作系统类型 服务器查看数据库日志文件 服务器查文件 服务器出生点配置文件 服务器传送过来的是什么信息 服务器搭建网站方案500字 服务器大内存系统吗 服务器的ftp数据库信息 服务器的参数配置文件 服务器的地址信息 服务器的共享文件地址 服务器的系统文件怎么恢复出厂设置密码 服务器登录需要信息吗 服务器定时任务系统 服务器读取不了文件 服务器放文件 服务器故障修复费用需要摊销吗 服务器光纤存储系统 服务器接入协议是什么 服务器快照能代替网站备份吗 服务器扩容文档说明 服务器链接数据库配置文件 服务器两个网站公用一个数据库 服务器默认文档 服务器内存扩展板位置 服务器内存条的种类文档 服务器内存性能好 服务器内存在哪个位置 服务器内核文件在哪 服务器迁移操作系统 服务器迁移需要哪些操作系统 服务器如何查看文件个数据库文件夹 服务器如何分多个文件 服务器设计虚拟内存 服务器设置上传文件大小 服务器适合安装深度系统deepin 服务器数据库查看版本信息 服务器数据库查看版本信息失败 服务器数据库的文件读取数据库 服务器数据库系统 服务器数据库协议 服务器数据库用什么系统 服务器数据系统 服务器网站关联数据库 服务器微端位置 服务器维护 吸尘器 服务器维护费入什么科目 服务器文件地址 服务器无盘镜像导入 服务器物理机部署 服务器物理内存只增不降 服务器物理组成 服务器系统安全方案 服务器系统安装ansys 服务器系统安装oracle数据库 服务器系统安装报价 服务器系统版本选择 服务器系统方案 服务器系统和数据库的用处 服务器系统架构讲解 服务器系统盘50g什么意思 服务器系统盘大文件检测指令 服务器系统盘分多少 服务器系统数据库安装 服务器系统性能灯 服务器系统有多大 服务器系统与数据库 服务器系统怎么恢复出厂设置 服务器修改mime类型 服务器修改密码规则 服务器虚拟化与企业私有云 服务器虚拟机的c盘怎么加 服务器选择系统版本 服务器与本地文件共享 服务器怎么清除日志文件 服务器只读团体字信息 服务器中文档存储在哪 服务器主板坏了怎么维修 服务器主板维修电子书 服务器装系统快吗 服务器装系统无显示屏 服务器租赁文档 服装信息化 浮点运算 福建工程学院计算机网络技术期末考试试卷 辅助线框 付款 付款流程 付款条款 付款信息 负号前置 负库存的相关设定 复合角色 复制创建采购申请 复制控制 复制文件到服务器 内容不足 概念整理 感悟 高级退货管理 高阶 高可用架构 高斯坐标 高性能服务器一体机 高性能有限元计算服务器 个人经历 个人开发 个税系统代理服务器参数是什么 个性化定制 给标准报表添加字段 给一个oracle账号密码是什么 更改成本要素类别 更改物料类型 更新服务器数据库文件位置 工厂 工厂管理 工厂内库存转移 工厂日历 工具 工具集锦 工具类 工具使用 工具使用指南 工具手册 工具系列 工业软件 工艺路线 工资发放和结算 工资计提 工作 工作笔记 工作量法 工作流程自动化 工作流自动化解决方案 工作杂记 工作总结 公式计算 公司财务系统html 公司代码货币 公司服务器可以查询员工哪些信息 公司间STO 公司间STO‘ 公司间过账 公有云-华为 功能 功能测试 功能开发说明书 供应链 供应链管理 供应商 供应商采购冻结 供应商评估 供应商清单输出 供应商子范围 沟通能力 购买云服务器配置项目 估价容差测试 固定点算术 固定资产 固定资产会计 固定资产折旧 固定资产折旧码 顾问之路 挂微群发软件需要什么服务器信 关闭 关系模型 关于R/3 关于赛锐信息 关于信用管理--信用更新 管理 管理数据库 广播 消息 没有服务器 归档 规格说明书 国产器件 国产软件 国产数据库 国科大学习 国内服务器内存缓冲芯片 国外服务器显示数据库 哈希算法 海康4200服务器进不去系统 海口服务器系统租用 海纳百川 含税价 邯郸虚拟服务器 函数 函数/FUNCTION 函数技巧 函数模块 函数式编程 好书推荐 合作案例 合作伙伴 和车神哥一起学 核心主数据 黑盒测试 黑名单 恨ta就教ta  SAP 红蓝攻防篇 后端 后端开发 后鸿沟时代 后台Job 后台表 后台导出表数据 后台服务器 后台开发 后台作业 胡思乱想 湖仓一体 互联网-开源框架 华为 华为2012服务器系统安装教程 华为hana服务器型号齐全 华为服务器gpu芯片 华为服务器raid1装系统 华为服务器安装2012系统怎么分区 华为服务器安装nas系统 华为服务器扩容内存进不去系统 华为服务器修改root密码 华为无线局域网 华为云 华为云服务器更换操作系统 华为云服务器还需要确定位置吗 华为云服务器系统备份 华为云服务器自己维护吗 华为怎么安装服务器系统版本 环境搭建 缓存 汇率维护 汇率转换 汇总 会计 会计分录 会计基础资料 会计科目 会计科目表 会计科目删除 会计凭证批量导出 会计凭证清账 会计凭证替代 会计凭证中的注释项目 会用到的 绘图 绘图工具 惠普服务器G8系列做raid 活动 伙伴功能 货币过期 货币类型 货币停用 货源清单 获取窗体下的所有控件 获取汇率 机器人流程自动化 机器学习 鸡肋 积累 基本单位 基本配置 基础 基础模块 基础入门 基于收货的发票校验配置过程 基准日期 集成 集团货币 集中采购 己建立BOM清单 计划策略 计划策略40 计划订单 计划时界应用 计划时界应用测试 计划数量小于收货或发票数量 计划协议 计划行类别 计划行类别中请求/装配 计划行统计清单 计量单位 计入物料成本 计算步骤 计算机 计算机毕业设计 计算机基础 计算机基础知识 计算机科学分成什么模块 计算机体系 计算机图书 计算机网络 计算机网络 王道 计算机网络rip路由表题目 计算机网络理论概述 计算机网络原理(谢希仁第八版) 计算机网络远程管理作业答案 计算机维护 计算机信息管理自考-04741计算机网络原理 计算机自学考试 记录问题 记账冻结 记账码 技能 技巧 技术 技术分享 技术干货 技术交流 技术类 技术沙龙 技术渗透 技术文档 技术总结 寄售 寄售交货 寄售结算规则 寄售模式 加密 加密算法 加前导零 加速器 价格修改历史 架构 架构设计 架设企业文件服务器 假期日历 监控 监控服务器系统备份 监控服务器系统密码忘了怎么办 监控平台 监控事件 监控系统 监控系统里服务器 监控系统是否要服务器 减值准备 检验点 检验计划 检验类型 检验类型89 检验批 检验批系统状态 简单窗体实现 简单的数据库管理系统 用什么云服务器 简述客户 服务器系统的组成 建议组件分配到BOM 渐变色UI描边 将服务器上数据库复制到本地文件 将已有项目转移到云服务器 交互 交货单 交货计划固定 交货计划期间保护 角色 角色继承 角色设计 教程 教育电商 阶梯价格 接管日期 接口 接口测试 接口方式 接口问题处理 接口-银企直连 结算会计年度 截取年月日在hana中怎么写 解决方案 界面 借贷 金丹期 金蝶 金蝶 系统服务器繁忙 金蝶K3 金蝶二次开发好跳槽吗 金蝶服务器维护 金蝶云星空操作手册 金蝶中间件部署报栈溢出 金额转换 金税接口 仅在总账中过账 仅装配 仅组件 进口采购 进入文档服务器不能输入密码 进销存 进销存报表 进销存系统怎么部署到自己服务器 经历 经验 经验分享 经验总结 精诚MES 精诚智慧工厂 精选 境外服务器稳定 镜像 玖章算术 就是玩儿 矩阵 聚合函数 聚集函数 开发 开发笔记 开发工具 开发管理报表 开发环境 开发平台 开发语言 开发者 开发知识点 开源 开源ERP 开源-JDK-镜像 开源系列谈 开源项目 看板 考试 考试复习 考研 科技 科技公司 科目行项目不显示 可配置物料 客供料 客户 客户冻结 客户端往服务器写文件 客户端修改opc服务器的数据 客户服务 客户-服务器数据库系统举例 客户服务器系统的特点是 客户关系处理能力 客户关系管理 客户贸易伙伴 客户信贷管理解析 客户主数据 课程 课程笔记 课堂笔记 空调控制系统节点服务器 空间管路 口碑效应 库存地点MRP 库存地点权限控制 库存管理 库存决定 库存批次 库存需求天数关系 库龄 跨公司STO 跨国跨公司间转储 块设备驱动 快捷 快捷键 快手服务器协议 快速定制 框架 鲲鹏服务器系统重装 扩充存储地点 扩展 扩展知识 来也科技 蓝桥杯 蓝牙 蓝牙A2dp 浪点服务器芯片 乐鑫 类型强转 理解 历史库存sap 利润表 利用云服务器传递信息 连接 链表 良仓太炎共创 两步法拣配 料主数据中的屏幕字段 列表 列存索引 列存引擎 零基础快速学习 ABAP 零散知识 零售 零售行业 零碎(凑数)的算法[题] 零停机 流程自动化 流水号 流水码 流星的程序集 漏洞预警 录屏 录像机显示服务器 乱码 论文 论文阅读笔记 蚂蚁无线管理器服务器 买个服务器来挂协议 买了一个服务器修改密码 漫谈计算机网络 贸易伙伴的应用 没有MANDT字段 没有中间凭证冲销 媒体 每日摸鱼新闻 门店视图 门店主数据 免费流量获取 免关税 面试 面向对象编程 面向对象方法 敏捷 敏捷开发 命名规范 模板语法 模块 模块测试 莫队 莫队算法 目标跟踪 内表 内表类型 内表字段 内部订单 内部订单清单 内部订单删除问题 内部订单月结差异 内存管理 内存数据库 内存图片 内核 内核驱动 内核驱动开发记录 内嵌Excel 内容服务 内容服务平台 内容服务软件 内容库 内外码转换 内网 内网渗透 内向交货单 那个网站的服务器不限制内容 能不能用pe安装服务器系统安装系统 能力建设 能源 年结 爬虫 排行榜 排序算法 盘点 盘点流程 培训 配额协议 配置 配置SAP服务器外网登陆以及网络故障解决示例 配置笔记 配置高性能文件服务器方案 批次 批次拆分 批次管理 批次号 批次确定 批次特定单位 批次特性 批导程序模板 批导模板下载 批量采购冻结 批量导出表数据 批量更改会计凭证文本 批量维护 批量用户账户锁定 平行记账 凭证冲销的种类和处理逻辑 凭证打印 凭证流 凭证状态 凭证状态S 屏幕(Dialog)开发 屏幕SCREEN字段属性 屏幕程序 屏幕设计 破坏式创新 破解 期初库存金额 期初资产数据导入 期刊阅读 期末不挂科 期末复习 期末库存金额 其他 其他应付款-代扣代缴 其他知识点 奇技淫巧 麒麟服务器数据库协议 企业/办公/职场 企业安全 企业服务器文件管理 企业管理软件 企业级应用 企业解决方案 企业内部控制 企业内容管理 企业软件 企业微信 企业文件服务器备份 企业系统 企业信息化 企业信息化前沿 企业资源计划 启用WEBGUI服务 迁移驾驶舱 前端 前端基础练手小项目 前端架构 前端开发 前端开发相关 前端框架 前后端 前台操作 嵌入式 嵌入式开发 嵌入式学习--STM32 嵌入式硬件 清软英泰plm服务器安装文档 清帐 清账 清账凭证 请求 请求传输再还原 请求号 区块链 区块链技术 区域菜单 驱动开发 取价逻辑 取消审批 取样策略 取值相关 去前导零 全角半角转换 全球最大sap hana系统建立在以下哪个厂商的服务器产品上 全球最大的采购服务平台 权限 权限对象 权限管理 权限合规检查系统 权限控制 権限 缺料提醒及警报 热点开启 流程 人工智能 日常ABAP开发记录 日常Bug 日常工作 日常记录 日常学习工作经验分享 日常知识分享 日记 日历 日期 日期函数 容器 容器服务 容灾 如何安装华为服务器系统软件 如何把项目部署到内网服务器 如何传输本地文件到服务器 如何从服务器上更新文件 如何导出序时账 如何读取服务器文件数据 如何复制服务器数据库文件大小 如何将CRM系统上传到服务器 如何将hana数据同步到oracle 如何设置sap生产订单自动关闭 如何统计输出条目数量 如何修改服务器root密码 如何知道有哪些物料存在BOM 入后在服务器修改数据库 入库 入门 入侵一个网站的服务器拿数据 入行SAP咨询 入职甲方 软件 软件安全 软件部署 软件测试 软件测试知识 软件程序 软件工程 软件教程视频集合 软件开发 软件生态 软件下载 软件显示未找到服务器 软考 软实力 软硬件运维 赛锐信息 三代增强 扫描代码 删除 删除记录 商城小程序买哪种服务器 商品主数据 商务智能 商业软件 商业智能 上传 上传附件出错 上传图片 上传文件到云服务器存储路径 上架策略B 上架策略C 上架策略P 上线 上云 设备维修 设计模式 设计与维护类 设置参数缺省值 社保管理系统连接不上服务器 社区活动 深度学习 深度优先 深澜系统服务器架构 审计导出表数据 审计序时账 审批策略 审批代码 渗透 渗透笔记 渗透测试 渗透测试自学日志之基础原理篇 渗透工具之信息收集 升级 生产版本 生产版本排序规则 生产版本选择规则 生产版本选择逻辑 生产版本选择顺序 生产版本优先顺序 生产成本收集 生产排程 生产系统服务器主机名怎么看 生活 生活感悟 什么情况使用一次性供应商及客户 什么是BAPI 什么是序时账 时间比较 时间对象 时序数据库 实施 实施SAP 实施项目 实时集成变式 实时库存 实体服务器怎么配置文件 实习 实习生 实战SAP程序开发 使用感受 使用决策 事务代码 事务代码LX04 事务代码WRCR 事务技术名称的显示与隐藏 事务码/TCODE 视觉语言导航 视频 视频处理 视频监控选择服务器的配置文件 视图 收货冲销 收货处理 手动加载ICU库 手机主服务器怎么配置文件 售后管理 输入历史记录 暑假复习 树查询 树莓派 数独 数据安全 数据仓库 数据仓库学习分享 数据从hana倒回Oracle的方法 数据导入 数据导入和处理 数据分析 数据分析 + 机器学习 数据分页 数据服务器 操作系统 数据服务器什么系统软件 数据服务器文件夹 数据服务器与文件服务器 数据格式 数据湖 数据结构 数据结构与算法 数据科学入门 数据可视化 数据库 数据库备份到文件服务器 数据库表字段 数据库操作 数据库的文件服务器配置 数据库服务器部署文档 数据库服务器网页 数据库服务器系统 数据库服务器系统崩溃 数据库服务器系统的 研发 数据库服务器系统软件 数据库服务器压缩文件 数据库管理与维护 数据库规划、部署 数据库和服务器什么协议 数据库和服务器系统怎么安装 数据库技术 数据库架构 数据库监控 数据库监控软件 数据库开发 数据库文件共享服务器配置 数据库系统概论 数据库系统原理 数据库系统怎么与软件连接到服务器 数据库与服务器通讯协议 数据库最新排名 数据类型 数据链路层 数据浏览器的字段名称显示 数据迁移 数据迁移驾驶舱 数据迁移完整性检查 数据挖掘 数据治理 数据中台 数据中心IDC架构及容灾与备份 数据重置 数据字典 数学建模篇 数字化 数字化管理 数字化转型 数字货币 数字业务整合 双计量单位 双路服务器只显示一半内存 双碳 双网文件服务器 水晶报表 税改 税率 税友报税软件让修改服务器地址 私有云虚拟化服务器群 思爱普 思科里服务器的dns配置文件 死锁 四代增强 四元数 搜索帮助 搜索引擎 搜索引擎营销 速食 算法 随便看看 随机方向 随机数 损益表 所见即所得的打印功能 锁定 锁定事务代码 抬头文本被强制清空 探测服务器操作系统版本 特殊库存 特殊移动标记 特性 腾讯云 提升工作效率的工具 题解 替代 替代/校验/BTE 天正服务器不显示 添加列到指定位置 条件 条件表 条件类型 条码系统 跳槽 跳过代码 贴花 通过SQVI增加表格字段 通信协议 同步 同方服务器系统安装 统驭科目理解 透明表 图论 图像处理 吐槽 外币评估 外币评估记账 外部采购 外部断点 外贸管理软件 外贸软件 外向交货单 外协加工 外语能力 完美汽配管理系统v12服务器 完整的采购订单业务信息凭证流 玩转STM32 万彩录屏服务器不稳定 网吧无盘用华为服务器 网卡 网卡驱动 网络 网络安全 网络安全学习 网络存储服务器的系统 网络管理定时备份服务器网站文件 网络接口 网络配置 网络通信 网络拓扑仿真模拟 网络文件服务器有哪些 网络协议 网络协议栈 网络设备 网络规划 网络工具开发 网络营销 网页 服务器 数据库 网页如何从服务器获取数据 网页与服务器数据库 网易数帆精彩活动 网站服务器存储数据库吗 网站服务器没有安装数据库 网站服务器没有数据库备份 网站服务器与系统部署策略 网站跨域访问服务器数据库 网站上传到服务器需要上传数据库 网站数据库断连重启服务器 网站虚拟服务器1核1g速度 网站需要数据库服务器吗 网站与数据库不在同一服务器 网站云服务器需要数据库吗 往来余额结转 往年购置资产 微前端 微软 微软azure 微信 微信小程序 为服务器安装操作系统的流程图解 为什么文件上传不了服务器上 为资产分类定义折旧范围 维护视图 维护思路 委托加工 委托租赁云服务器协议 委外 委外加工 委外加工采购流程里副产品的收货 委外库存 委外销售订单库存 未能找到使用主机名称的服务器 未能注册模块 未清项管理 文本编辑器 文本表 文档管理 文档管理软件 文档协作 文档资料 文华软件登录显示请选择服务器 文件存储服务器 方案 文件服务器 华为 文件服务器 内存需求 文件服务器 内存需求大么 文件服务器报码表xls 文件服务器存储 文件服务器放在哪里 文件服务器和nas存储 文件服务器和数据库的区别 文件服务器可以存储的文件类型有 文件服务器内存 文件服务器内存要大吗 文件服务器网盘 文件服务器为何存不了大文件 文件服务器帐号切换 文件服务器属于固定资产吗 文件共享服务器所需虚拟机资源 文件名带中文上传ftp服务器变乱码 文件虚拟服务器 文件一般存在数据库还是服务器 问答 问题 问题处理 问题记录 问题解决 问题总结 我的SAP系统开发里程碑 我的问题 无代码 无代码开发 无法输入事务代码 无盘服务器工作流程 无盘服务器内存多大好 无盘服务器配置20台 无线监控设置smtp服务器 无值记账 物定工厂物料状态 物联网 物料 物料编号 物料编码 物料编码更改 物料变式 物料单位更改 物料分类账 物料管理 物料价格清单 物料库存/需求及供应天 物料凭证 物料凭证类型和交易/事件类型 物料帐 物料账 物料账期 物料主数据 物料主数据视图 物料主数据视图维护状态 物料组 物料组的分配规则 物流 习题 系统/网络/运维 系统安全 系统安装 系统服务器常见出厂密码有哪些 系统集成 系统架构 系统开发 系统未配置文件服务器是啥意思 系统相关 系统云端服务器 系统怎么访问数据库服务器 系统中的缺料情况及控制 下架策略A 下架策略M 下拉框 下载 下载程序 先后顺序 先进的数据库服务器操作系统 先进生产力工具大全 现金管理 现金流量表 线段树 线性规划 响应函数 向上取整 向下取整 项目 项目表 项目部署在服务器上的形式 项目管理 项目迁移 项目前端 项目实施经验贴 项目实战 消耗冲销 消息服务器待办事项数据库 消息控制采购订单 销售 销售(SD)凭证流 销售订单 销售订单冻结 销售订单库存 销售订单项目类别 销售订单信用冻结 销售订单中的条件类型 销售发货冻结 销售发货可用性检查 销售交货 销售开票冻结 销售税 销售项目开票 销售员 小白 小白的SAP问题积累 小程序 小程序云服务器磁盘怎么分区 小丁的blog 小记 小结 小项目(新手可做) 小型服务器的操作系统 小型企业网络存储服务器系统方案 效率 协议 心得感悟 新程序员 新基建 新建表维护程序SM30 新收入准则 新手时期 新闻 新语法 新增漏洞报告 新增移动类型科目确定配置 新总帐 薪酬核算 薪酬计提和发放 信贷 信息安全 信息安全顶会论文导读 信息化 信息化建设 信息记录 信息收集 信用额度 信用管理 行业 行业客户信息 行业趋势 性能测试 性能优化 修改,F4帮助,添加按钮 修改Q系统代码 修改表数据 修改服务器端的访问模式 修改服务器网络 修改服务器信息使密钥不过期 修改记录 修改交货单 修改历史 修改数据库安装的服务器 系统时间 修改物料组 虚拟服务器需要网关吗 虚拟服务器英文翻译 虚拟服务器资源 虚拟服务器资源配置 虚拟服务器最大磁盘2TB 虚拟化 虚拟机 虚拟机迁移后服务器无法启动 虚拟机如何做服务器系统 需求分析 需求类型 需要访问其他服务器信息吗 序列号 序列号管理 序列号清单 序时账导出方法 序时账核对 选型 选择屏幕 选择屏幕打开文件路径 学术前沿 学习 学习ABAP笔记 学习笔记 学习方法 学习人生 学习问题 学校三级项目 循环 压力测试 压力测试 闪存 亚马逊 亚马逊云科技 研发管理 研发效能 业财一体化 业务 业务处理 业务范围 业务分析 业务功能 业务顾问 业务顾问的小需求 业务伙伴 业务价值 一般总账科目数据转换 一次性供应商及客户 一次性供应商及客户应用经验 一个服务器 定时从各个系统取数据 一键还原服务器系统 一台服务器能存放几个系统 一台服务器如何部署多个项目 一套适合 SAP UI5 开发人员循序渐进的学习教程 医药行业 移动开发 移动类型 移动类型101/102 移动类型325 移动类型343 移动类型配置 移动平均价 异步Function 异常 异速联客户端未获取到服务器信息 音频编码解码 音视频 音视频开发 银企直连 银企直连接口 银企直联 银行 银行账户管理 隐式增强 印度 印资企业 应付职工薪酬 应收应付 应用设计 应用性能监控 英一 英语 硬件服务器搭建系统步骤 用户 用户定义的消息搜索配置 用友 优化 由于质量原因而冻结 邮件发送 邮件服务器及相关配置 邮件合并居中,框线 邮件预警 游戏 游戏服务器修改其他玩家数据 游戏开发 游戏引擎 有没有便宜一点的网站服务器 有限元模拟 余额不平 与SAP集成相关 语言 语言概览 语音 预留 预算管理 预制凭证 原创 原创项目 原力计划 源码 源码分析 月结 阅读分享 云 文件 服务器 文件怎么恢复出厂设置密码 云ERP 云安全 云备份 云财经服务器维护 云存储系统服务器版安装 云打印 云端 云服务 云服务器 云服务器 ftp上传文件大小 云服务器 选择什么系统版本 云服务器 重做系统软件 云服务器1和1g装什么系统好 云服务器cpu系列 云服务器ecs销售渠道 云服务器ubuntu修改密码 云服务器安装其他版本系统 云服务器部署mqtt协议通信 云服务器部署tomcat文件修改 云服务器磁盘怎么安装系统 云服务器存放位置 云服务器搭建推流系统 云服务器可以存放文件吗 云服务器免费suse系统 云服务器哪种系统好用 云服务器如何修改ssh密码是什么 云服务器软件文件管理 云服务器数据库密码修改zoc 云服务器网络配置信息查询 云服务器维护安全管理制度 云服务器物理部署位置 云服务器系统类别怎么选 云服务器系统租赁费用 云服务器修改ssh密码 云服务器需要装系统吗 云服务器怎么存文件大小 云服务器怎么多人进去编辑文档 云服务器怎么设置数据库文件 云服务器转租赁协议 云基础架构 云计算 云计算/大数据 云解决方案 云排产 云平台 云文档管理 云文档管理系统 云原生 云运维&&云架构 运算符 运维 运维开发 运维实施 运维系统 服务器监控 运维相关 运行效率 杂货铺 杂记 杂谈 杂项 再次冲销 在服务器删除的文件 恢复出厂设置密码 在服务器上建一个文件夹 在建工程 在建工程期初数据 在没有配置的dns服务器响应之后名称 在制品 怎么看系统服务器类型 怎么修改存储在服务器的数据 怎么修改服务器php版本信息 怎么在服务器上备份数据库文件在哪里 怎么在服务器上复制网站 怎么找到服务器的文档 怎样读取服务器上的数据库文件 怎样修改美国的服务器节点 增长策略 增长黑客 增强 增删改查 增值税 增值税调整 掌握物料库存,需求及供应情况 账号 账期设置 账期未开 折旧记账数据不在BSEG 正确使用一次性供应商及客户 正则表达式 证书 知识分享 知识管理 知识库 知识图谱 直线折旧法 职场 职场和发展 职业 职业发展 只存放文件的服务器 指纹识别 指纹字典 指针 制造 制造商物料 质量部门 质量管理 质量信息记录 质量证书 智慧企业 智能开发 智能运维 智能制造IT规划 智能制造执行系统 中国本地化内容 中间件 中阶 中维监控显示无法连接服务器失败怎么办 中文名称的文件传不到ftp服务器 中小企业 中小型网站服务器搭建方案 中转 重复打印 重复制造 重置期初数据 重置业务数据 重置主数据 重置资产会计数据 主检验特性 主批次 主数据 主数据导入 注册机 注解 注塑行业ERP 注意事项 转换Lookup功能 转义字符 转载 装服务器得时候选择系统版本 状态栏 咨询 资产 资产负债表 资产会计 资产接管 资产年初切换上线 资产折旧 资金 资料 资讯 子屏幕 字典 字段符号 字符操作 字符串 字符串拆分 字符串前导0 字节跳动 自动补货 自动创建交货单 自动登录SAPGUI 自动化 自动化测试 自动化工具 自动清账 自动邮件 自考 自然语言处理 自学成才 综合 综合资源 总结 总账 总账科目 总账行项目中凭证缺失 总账余额结转 租赁mt4虚拟服务器 组件 组织架构 组织结构 最大限制 最佳业务实践 最具性价比的方式 作业返冲 作业价格计算 坐标反算