SAP HANA Database - SQL Reference ManualSAP HANA Appliance Software SPS 05, Revision 45 Target Audi ence Consul tants Admi ni strators SAP Hardware Partner Others 1 2012-12-19 Copyright © Copyright 2012 SAP AG. All rights reserved SAP Library document classification: PUBLIC No part of this publication may be reproduced or transmitted in any form or for any purpose without the express permission of SAP AG. The information contained herein may be changed without prior notice. Some software products marketed by SAP AG and its distributors contain proprietary software components of other software vendors. Microsoft, Windows, Excel, Outlook, PowerPoint, Silverlight, and Visual Studio are registered trademarks of Microsoft Corporation. IBM, DB2, DB2 Universal Database, System i, System i5, System p, System p5, System x, System z, System z10, z10, z/VM, z/OS, OS/390, zEnterprise, PowerVM, Power Architecture, Power Systems, POWER7, POWER6+, POWER6, POWER, PowerHA, pureScale, PowerPC, BladeCenter, System Storage, Storwize, XIV, GPFS, HACMP, RETAIN, DB2 Connect, RACF, Redbooks, OS/2, AIX, Intelligent Miner, WebSphere, Tivoli, Informix, and Smarter Planet are trademarks or registered trademarks of IBM Corporation. Linux is the registered trademark of Linus Torvalds in the United States and other countries. Adobe, the Adobe logo, Acrobat, PostScript, and Reader are trademarks or registered trademarks of Adobe Systems Incorporated in the United States and other countries. Oracle and Java are registered trademarks of Oracle and its affiliates. UNIX, X/Open, OSF/1, and Motif are registered trademarks of the Open Group. Citrix, ICA, Program Neighborhood, MetaFrame, WinFrame, VideoFrame, and MultiWin are trademarks or registered trademarks of Citrix Systems Inc. HTML, XML, XHTML, and W3C are trademarks or registered trademarks of W3C®, World Wide Web Consortium, Massachusetts Institute of Technology. Apple, App Store, iBooks, iPad, iPhone, iPhoto, iPod, iTunes, Multi-Touch, Objective-C, Retina, Safari, Siri, and Xcode are trademarks or registered trademarks of Apple Inc. IOS is a registered trademark of Cisco Systems Inc. RIM, BlackBerry, BBM, BlackBerry Curve, BlackBerry Bold, BlackBerry Pearl, 2 2012-12-19 BlackBerry Torch, BlackBerry Storm, BlackBerry Storm2, BlackBerry PlayBook, and BlackBerry App World are trademarks or registered trademarks of Research in Motion Limited. Google App Engine, Google Apps, Google Checkout, Google Data API, Google Maps, Google Mobile Ads, Google Mobile Updater, Google Mobile, Google Store, Google Sync, Google Updater, Google Voice, Google Mail, Gmail, YouTube, Dalvik and Android are trademarks or registered trademarks of Google Inc. INTERMEC is a registered trademark of Intermec Technologies Corporation. Wi-Fi is a registered trademark of Wi-Fi Alliance. Bluetooth is a registered trademark of Bluetooth SIG Inc. Motorola is a registered trademark of Motorola Trademark Holdings LLC. Computop is a registered trademark of Computop Wirtschaftsinformatik GmbH. SAP, R/3, SAP NetWeaver, Duet, PartnerEdge, ByDesign, SAP BusinessObjects Explorer, StreamWork, SAP HANA, and other SAP products and services mentioned herein as well as their respective logos are trademarks or registered trademarks of SAP AG in Germany and other countries. Business Objects and the Business Objects logo, BusinessObjects, Crystal Reports, Crystal Decisions, Web Intelligence, Xcelsius, and other Business Objects products and services mentioned herein as well as their respective logos are trademarks or registered trademarks of Business Objects Software Ltd. Business Objects is an SAP company. Sybase and Adaptive Server, iAnywhere, Sybase 365, SQL Anywhere, and other Sybase products and services mentioned herein as well as their respective logos are trademarks or registered trademarks of Sybase Inc. Sybase is an SAP company. Crossgate, m@gic EDDY, B2B 360°, and B2B 360° Services are registered trademarks of Crossgate AG in Germany and other countries. Crossgate is an SAP company. All other product and service names mentioned are the trademarks of their respective companies. Data contained in this document serves informational purposes only. National product specifications may vary. These materials are subject to change without notice. These materials are provided by SAP AG and its affiliated companies ("SAP Group") for informational purposes only, without representation or warranty of any kind, and SAP Group shall not be liable for errors or omissions with respect to the materials. The only warranties for SAP Group products and services are those that are set forth in the express warranty statements accompanying such products and services, if any. Nothing herein should be construed as constituting an additional warranty. 3 2012-12-19 4 8 9 10 10 10 11 11 11 11 11 11 11 12 13 13 13 13 14 14 14 15 15 16 17 17 18 18 20 22 22 22 22 22 22 22 23 25 25 25 25 26 26 26 26 28 28 28 28 28 30 30 30 30 30 30 31 31 31 Table of Content Table of Content SAP HANA Database - SQL Reference Manual SQL Reference Manual Notati on Symbols used in BNF BNF Lowest Terms Representations I ntroducti on SQL Supported Languages and Code Pages Comment Identifiers Single Quotation Mark Double Quotation Mark SQL Reserved Words Data Types Classification of Data Types Datetime Types Date Formats Time Formats Timestamp Formats Additional Formats Supported Functions for Date/Time types Numeric Types Character String Types Binary Types Large Object (LOB) Types Mapping between SQL Data Type and Column Store Data Type Data Type Conversion Typed Constant Predi cates Comparison Predicates Range Predicate In Predicate Exists Predicate LIKE Predicate NULL Predicate CONTAINS Predicate Operators Unary and Binary Operators Operator Precedence Arithmetic Operators String Operators Comparsion Operators Logical Operators Set Operators Expressi ons Case Expressions Function Expressions Aggregate Expressions Subqueries in Expressions SQL Functi ons Introduction Data Type Conversion Functions CAST TO_ALPHANUM TO_BIGINT TO_BINARY TO_BLOB TO_CLOB Table of Content 4 2012-12-19 31 32 32 32 33 33 33 33 34 34 34 34 35 35 35 36 36 36 36 36 37 37 37 37 38 38 38 38 39 39 39 39 40 40 40 40 41 41 41 42 42 42 42 43 43 43 43 44 44 44 44 44 45 45 45 45 46 46 46 47 47 47 47 48 48 48 48 49 49 49 50 50 50 50 51 51 TO_DATE TO_DATS TO_DECIMAL TO_DOUBLE TO_INT TO_INTEGER TO_NCLOB TO_NVARCHAR TO_REAL TO_SECONDDATE TO_SMALLDECIMAL TO_SMALLINT TO_TIME TO_TIMESTAMP TO_TINYINT TO_VARCHAR DateTime Functions ADD_DAYS ADD_MONTHS ADD_SECONDS ADD_YEARS CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_UTCDATE CURRENT_UTCTIME CURRENT_UTCTIMESTAMP DAYNAME DAYOFMONTH DAYOFYEAR DAYS_BETWEEN EXTRACT HOUR ISOWEEK LAST_DAY LOCALTOUTC MINUTE MONTH MONTHNAME NEXT_DAY NOW QUARTER SECOND SECONDS_BETWEEN UTCTOLOCAL WEEK WEEKDAY YEAR Number Functions ABS ACOS ASIN ATAN ATAN2 BINTOHEX BITAND CEIL COS COSH COT EXP FLOOR GREATEST HEXTOBIN LEAST LN LOG MOD POWER RAND ROUND SIGN SIN SINH SQRT TAN Table of Content 5 2012-12-19 51 51 52 52 52 52 53 53 53 53 54 54 54 55 55 55 56 56 56 56 57 57 57 58 58 58 58 58 59 59 59 60 61 61 62 62 62 63 64 64 64 65 66 67 68 77 81 82 83 84 85 86 95 101 102 102 103 103 104 104 105 106 106 107 108 108 109 109 110 114 114 115 117 118 128 TANH UMINUS String Functions ASCII CHAR CONCAT LCASE LEFT LENGTH LOCATE LOWER LPAD LTRIM NCHAR REPLACE RIGHT RPAD RTRIM SUBSTR_AFTER SUBSTR_BEFORE SUBSTRING TRIM UCASE UNICODE UPPER Window Functions Miscellaneous Functions COALESCE CURRENT_CONNECTION CURRENT_SCHEMA CURRENT_USER GROUPING_ID IFNULL MAP NULLIF SESSION_CONTEXT SESSION_USER SYSUUID SQL Statements Data Definition Statements ALTER AUDIT POLICY ALTER FULLTEXT INDEX ALTER INDEX ALTER SEQUENCE ALTER TABLE CREATE AUDIT POLICY CREATE FULLTEXT INDEX CREATE INDEX CREATE SCHEMA CREATE SEQUENCE CREATE SYNONYM CREATE TABLE CREATE TRIGGER CREATE VIEW DROP AUDIT POLICY DROP FULLTEXT INDEX DROP INDEX DROP SCHEMA DROP SEQUENCE DROP SYNONYM DROP TABLE DROP TRIGGER DROP VIEW RENAME COLUMN RENAME INDEX RENAME TABLE Data Manipulation Statements DELETE EXPLAIN PLAN INSERT LOAD MERGE DELTA REPLACE | UPSERT SELECT TRUNCATE TABLE Table of Content 6 2012-12-19 129 129 130 130 132 132 133 134 134 135 135 136 137 137 138 138 139 140 140 141 141 142 142 143 143 144 144 144 145 146 147 147 147 147 148 149 150 150 151 153 155 155 157 157 158 159 165 166 167 168 169 172 173 173 173 174 176 178 179 180 180 182 184 185 UNLOAD UPDATE System Management Statements ALTER SYSTEM ALTER CONFIGURATION ALTER SYSTEM ALTER SESSION SET ALTER SYSTEM ALTER SESSION UNSET ALTER SYSTEM CANCEL [WORK IN] SESSION ALTER SYSTEM CLEAR SQL PLAN CACHE ALTER SYSTEM CLEAR TRACES ALTER SYSTEM DISCONNECT SESSION ALTER SYSTEM LOGGING ALTER SYSTEM PERSISTENCE ENCRYPTION ALTER SYSTEM RECLAIM DATAVOLUME ALTER SYSTEM RECLAIM LOG ALTER SYSTEM RECLAIM VERSION SPACE ALTER SYSTEM RECONFIGURE SERVICE ALTER SYSTEM REMOVE TRACES ALTER SYSTEM RESET MONITORING VIEW ALTER SYSTEM SAVE PERFTRACE ALTER SYSTEM SAVEPOINT ALTER SYSTEM START PERFTRACE ALTER SYSTEM STOP PERFTRACE ALTER SYSTEM STOP SERVICE SET SYSTEM LICENSE UNSET SYSTEM LICENSE ALL Session Management Statements CONNECT SET HISTORY SESSION SET SCHEMA SET [SESSION] UNSET [SESSION] Transaction Management Statements COMMIT LOCK TABLE ROLLBACK SET TRANSACTION Access Control Statements ALTER SAML PROVIDER ALTER USER CREATE ROLE CREATE SAML PROVIDER CREATE USER DROP ROLE DROP SAML PROVIDER DROP USER GRANT REVOKE Data Import Export Statements EXPORT IMPORT IMPORT FROM IMPORT SCAN Procedural Statements ALTER PROCEDURE RECOMPILE CALL CREATE FUNCTION CREATE PROCEDURE CREATE TYPE DROP FUNCTION DROP PROCEDURE DROP TYPE Restri cti ons for SQL Statements See Also SQL Error Codes Table of Content 7 2012-12-19 SAP HANA Database - SQL Reference Manual This guide describes SQL language supported by SAP HANA DB. SAP HANA Database - SQL Reference Manual 8 2012-12-19 SQL Reference Manual SAP HANA Database - SQL Reference Manual 9 2012-12-19 Notation This reference use BNF (Backus Naur Form) which is a notation technique used to define programming languages. BNF describes the syntax of a grammar using a set of production rules and a set of symbols. Symbols used in BNF Symbol Description < > Angl e brackets are used to surround the name of a syntacti c el ement (BNF nontermi nal ) of the SQL l anguage. ::= The defi ni ti on operator i s used to provi de defi ni ti ons of the el ement appeared on the l eft si de of the operator i n a producti on rul e. [ ] Square brackets are used to i ndi cate opti onal el ements i n a formul a. Opti onal el ements may be speci fi ed or omi tted. { } Braces group el ements i n a formul a. Repeti ti ve el ements (zero or more el ements) can be speci fi ed wi thi n brace symbol s. | The al ternati ve operator i ndi cates that the porti on of the formul a fol l owi ng the bar i s an al ternati ve to the porti on precedi ng the bar. ... The el l i psi s i ndi cates that the el ement may be repeated any number of ti mes. I f el l i psi s appears after grouped el ements speci fyi ng that the grouped el ements encl osed wi th braces are repeated. I f el l i psi s appears after a si ngl e el ement, onl y that el ement i s repeated. !! I ntroduces normal Engl i sh text. Thi s i s used when the defi ni ti on of a syntacti c el ement i s not expressed i n BNF. BNF Lowest Terms Representations Throughout the BNF used in this manual each syntax term will be defined to one of the lowest term representations shown below. <digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 <letter> ::= a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z <string_literal> ::= <double_quote><string_content><double_quote> | <single_quote><s tring_content><single _quote> <string_content> = { <letter> | <digit> }... <identifier> ::= <letter> { <letter> | <digit> }... <password> ::= [{ <letter> | <digit> }...] <sign> ::= + | - <period> ::= . <unsigned_integer> ::= <digit>... <signed_integer> ::= [<sign>] <unsigned_integer> <signed_numeric_literal> ::= [<sign>] <unsigned_numeric_literal> <unsigned_numeric_literal> ::= <exact_numeric_literal> | <approximate_numeric_litera l> <exact_numeric_literal> ::= <unsigned_integer> [<period> [<unsigned_integer>]] | <period> <unsigned_integer> <approximate_numeric_literal> ::= <mantissa> E <exponent> <mantissa> ::= <exact_numeric_literal> <exponent> ::= <signed_integer> SAP HANA Database - SQL Reference Manual 10 2012-12-19 Introduction This chapter describes the SAP HANA Database implementation of Structured Query Language (SQL). It explains the characteristics of SQL, also how to manage comments and reserve words. SQL SQL stands for Structured Query Language. It is a standardized language for communicating with a relational database. SQL is used to retrieve, store or manipulate information in the database. SQL statements perform the following tasks: Schema definition and manipulation Data manipulation System management Session management Transaction management Supported Languages and Code Pages The SAP HANA Database supports Unicode to allow the use of all languages in the Unicode Standard and 7 Bit ASCII code page without restriction. Comment You can add comments to improve readability and maintainability of your SQL statements. Comments are delimited in SQL statements as follows: Double hyphens "--". Everything after the double hyphen until the end of a line is considered by the SQL parser to be a comment "/*" and "*\/". This style of commenting is used to place comments on multiple lines. All text between the opening "/*" and closing "*\/" is ignored by the SQL parser. Identifiers Syntax: <identifier> ::= <simple_identifier> | <double_quotes><special_identifier><double_qu otes> <simple_identifier> ::= <letter> [{<letter_or_digit>|<underscore>}, ...] <double_quotes> ::= " <special_identifier> ::= any character <letter> ::= A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z <digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 <letter_or_digit> ::= <letter> | <digit> <underscore> ::= _ Identifiers are used to represent names used in SQL statement including table name, view name, synonym name, column name, index name, function name, procedure name, user name, role name, and so on. There are two kinds of identifiers; undelimited identifiers and delimited identifiers. Undelimited table and column names must start with a letter and cannot contain any symbols other than digits or an underscore "_". Delimited identifiers are enclosed in the delimiter, double quotes, then the identifier can contain any character including special characters. For example, "AB$%CD" is a valid identifier name. Limitations: "_SYS_" is reserved exclusively for database engine, hence not allowed at the beginning of schema object names. Role name and user name must be specified as undelimited identifiers. Maximum length for the identifiers is 127 characters. Single Quotation Mark Single quotation marks are used to delimit string literals and single quotation mark itself can be represented using two single quotation marks. Double Quotation Mark SAP HANA Database - SQL Reference Manual 11 2012-12-19 Double quotation marks are used to delimit identifiers and double quotation mark itself can be represented using two double quotation marks. SQL Reserved Words Reserved words are words which have a special meaning to the SQL parser in the SAP HANA Database that cannot be used as a user-defined name. Reserved words should not be used in SQL statements for schema object names. If necessary, you can work around this limitation by delimiting a table or column name with double quotation marks. The following table lists all the current and future reserved words for the SAP HANA Database. Table 1. Reserved Words ALL ALTER AS BEFORE BEGI N BOTH CASE CHAR CONDI TI ON CONNECT CROSS CUBE CURRENT_CONNECTI ON CURRENT_DATE CURRENT_SCHEMA CURRENT_TI ME CURRENT_TI MESTAMP CURRENT_USER CURRENT_UTCDATE CURRENT_UTCTI ME CURRENT_UTCTI MESTAMP CURRVAL CURSOR DECLARE DI STI NCT ELSE ELSEI F ELSI F END EXCEPT EXCEPTI ON EXEC FOR FROM FULL GROUP HAVI NG I F I N I NNER I NOUT I NTERSECT I NTO I S JOI N LEADI NG LEFT LI MI T LOOP MI NUS NATURAL NEXTVAL NULL ON ORDER OUT PRI OR RETURN RETURNS REVERSE RI GHT ROLLUP ROWI D SELECT SET SQL START SYSDATE SYSTI ME SYSTI MESTAMP SYSUUI D TOP TRAI LI NG UNI ON USI NG UTCDATE UTCTI ME UTCTI MESTAMP VALUES WHEN WHERE WHI LE WI TH SAP HANA Database - SQL Reference Manual 12 2012-12-19 Data Types This section describes the data types used in the SAP HANA Database. Data type specifies the characteristics of a data value. A special value of NULL is included in every data type to indicate the absence of a value. The following table shows the built-in data types available in the SAP HANA Database. Classification of Data Types In the SAP HANA Database each data type can be classified by its characteristic as follows: Table 2: Classification of data types Classification Data Type Dateti me types DATE, TI ME, SECONDDATE, TI MESTAMP Numeri c types TI NYI NT, SMALLI NT, I NTEGER, BI GI NT, SMALLDECI MAL, DECI MAL, REAL, DOUBLE Character stri ng types VARCHAR, NVARCHAR, ALPHANUM, SHORTTEXT Bi nary types VARBI NARY Large Object types BLOB, CLOB, NCLOB, TEXT Datetime Types DATE The DATE data type consists of year, month, and day information to represent a date value. The default format for the DATE data type is 'YYYY-MM-DD'. YYYY represents the year, MM represents the month, and DD represents the day. The range of date value is 0001-01-01 through 9999-12-31. TIME The TIME data type consists of hour, minute, and second to represent a time value. The default format for the TIME data type is 'HH24:MI:SS'. HH24 represents the hour from 0 to 24, MI represents the minute from 0 to 59, SS represents the second from 0 to 59. SECONDDATE The SECONDDATE data type consists of year, month, day, hour, minute and second information to represent a date with time value. The default format for the SECONDDATE data type is 'YYYY-MM-DD HH24:MI:SS'. YYYY represents the year, MM represents the month, DD represents the day, HH24 represents hour, MI represents minute, and SS represents seconds. The range of date value is 0001- 01-01 00:00:01 through 9999-12-31 24:00:00. TIMESTAMP The TIMESTAMP data type consists of date and time information. Its default format is 'YYYY-MM-DD HH24:MI:SS.FF7'. FFn represents the fractional seconds where n indicates the number of digits in fractional part. . The range of the timestamp value is 0001-01-01 00:00:00.0000000 through 9999-12- 31 23:59:59.9999999. For details on supported formats for datetime types, refer to Table 4, Table 5, Table 6 and Table 7 below. Date Formats The following date/time formats can be used when parsing a string into a date/time type and converting a date/time type value into a string value. Please note that format for Timestamp is the combination of Date and Time with the additional support for fractional seconds. SAP HANA Database - SQL Reference Manual 13 2012-12-19 Table 4: Supported formats for Date Format Description Examples YYYY-MM-DD Defaul t format I NSERT I NTO my_tbl VALUES ('1957-06-13'); YYYY/MM/DD YYYY/MM-DD YYYY-MM/DD YYYY from 0001 to 9999, MM from 1 to 12, DD from 1 to 31. I f year has l ess than four di gi ts, month has l ess than two di gi ts, or day has l ess than two di gi ts, then val ues wi l l be padded by one or more zeros. For exampl e, a two di gi t year 45 wi l l be saved as year 0045, a one di gi t month 9 wi l l be saved as 09, and a one di gi t day 2 wi l l be saved as 02. I NSERT I NTO my_tbl VALUES ('1957-06-13'); I NSERT I NTO my_tbl VALUES ('1957/06/13'); I NSERT I NTO my_tbl VALUES ('1957/06-13'); I NSERT I NTO my_tbl VALUES ('1957-06/13'); YYYYMMDD ABAP Data Type, DATS format. I NSERT I NTO my_tbl VALUES ('19570613'); MON Abbrevi ated name of month. (JAN. ~ DEC.) I NSERT I NTO my_tbl VALUES (TO_DATE('2040-Jan-10', 'YYYY-MON-DD')); I NSERT I NTO my_tbl VALUES (TO_DATE('Jan-10', 'MON-DD')); MONTH Name of month. (JANUARY - DECEMBER). I NSERT I NTO my_tbl VALUES (TO_DATE('2040-January-10', 'YYYY-MONTH- DD')); I NSERT I NTO my_tbl VALUES (TO_DATE('January-10', 'MONTH-DD')); RM Roman numeral month (I -XI I ; JAN = I ). I NSERT I NTO my_tbl VALUES (TO_DATE('2040-I -10', 'YYYY-RM-DD')); I NSERT I NTO my_tbl VALUES (TO_DATE('I - 10', 'RM-DD')); DDD Day of year (1-366). I NSERT I NTO my_tbl VALUES (TO_DATE('204', 'DDD')); I NSERT I NTO my_tbl VALUES (TO_DATE('2001-204','YYYY-DDD')); Time Formats Table 5: Supported formats for Time Format Description Examples HH24:MI :SS Defaul t format HH:MI [:SS][AM|PM] HH12:MI [:SS][AM|PM] HH24:MI [:SS] HH from 0 to 23. MI from 0 to 59. SS from 0 to 59. FFF from 0 to 999. I f one di gi t hour, mi nute, second i s speci fi ed, then 0 wi l l be i nserted i nto the val ue. For exampl e, 9:9:9 wi l l be saved as 09:09:09. HH12 i ndi cates 12 hour cl ock and HH24 i ndi cates 24 hour cl ock. AM or PM can be speci fi ed as a suffi x to i ndi cate the ti me val ue i s before or after noon. I NSERT I NTO my_tbl VALUES ('23:59:59'); I NSERT I NTO my_tbl VALUES ('3:47:39 AM'); I NSERT I NTO my_tbl VALUES ('9:9:9 AM'); I NSERT I NTO my_tbl VALUES (TO_TI ME('11:59:59','HH12:MI :SS'); SSSSS Seconds past mi dni ght (0-86399). I NSERT I NTO my_tbl VALUES (TO_TI ME('12345', 'SSSSS')); Timestamp Formats Table 6: Supported formats for Timestamp Format Description Examples YYYY-MM-DD HH24:MI :SS.FF7 Defaul t format FF [1..7] Fracti onal seconds has the range 1 to 7 after the FF parameter to speci fy the number of di gi ts i n the fracti onal second porti on of the date ti me val ue returned. I f a di gi t i s not speci fi ed, the defaul t val ue i s used. I NSERT I NTO my_tbl VALUES (TO_TI MESTAMP('2011-05-11 12:59.999','YYYY-MM-DD HH:SS.FF3')); Additional Formats SAP HANA Database - SQL Reference Manual 14 2012-12-19 Table 7: Additional formats for Datetime Format Description Example D Day of week (1-7). TO_CHAR(CURRENT_TI MESTAMP,'D') DAY Name of day (MONDAY - SUNDAY). TO_CHAR(CURRENT_TI MESTAMP,'DAY') DY Abbrevi ated name of day (MON - SUN). TO_CHAR(CURRENT_TI MESTAMP,'DY') MON Abbrevi ated month name (JAN - DEC) TO_CHAR(CURRENT_TI MESTAMP,'MON') MONTH Ful l month name (JANUARY - DECEMBER) TO_CHAR(CURRENT_TI MESTAMP,'MONTH') RM Roman numeral month (I - XI I ; I i s for January) TO_CHAR(CURRENT_TI MESTAMP,'RM') Q Quarter of year (1, 2, 3, 4) TO_CHAR(CURRENT_TI MESTAMP,'Q') W Week of month (1-5). TO_CHAR(CURRENT_TI MESTAMP,'W') WW Week of year (1-53). TO_CHAR(CURRENT_TI MESTAMP,'WW') Supported Functions for Date/Time types ADD_DAYS ADD_MONTHS ADD_SECONDS ADD_YEARS COALESCE CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_UTCDATE CURRENT_UTCTIME CURRENT_UTCTIMESTAMP DAYNAME DAYOFMONTH DAYOFYEAR DAYS_BETWEEN EXTRACT GREATEST GREATEST HOUR IFNULL ISOWEEK LAST_DAY LEAST LOCALTOUTC MINUTE MONTH MONTHNAME NEXT_DAY NULLIF QUARTER SECOND SECONDS_BETWEEN TO_DATE TO_DATS TO_TIME TO_TIMESTAMP UTCTOLOCAL WEEK WEEKDAY YEAR Numeric Types TINYINT The TINYINT data type stores an 8-bit unsigned integer. The minimum value is 0 and the maximum value is 255 for TINYINT. SMALLINT The SMALLINT data type stores a 16-bit signed integer. The minimum value is -32,768 and the maximum value is 32,767 for SMALLINT. INTEGER The INTEGER data type stores a 32-bit signed integer. The minimum value is -2,147,483,648 and the SAP HANA Database - SQL Reference Manual 15 2012-12-19 maximum value is 2,147,483,647 for INTEGER. BIGINT The BIGINT data type stores a 64-bit signed integer. The minimum value is - 9,223,372,036,854,775,808 and the maximum value is 9,223,372,036,854,775,807 for BIGINT. DECIMAL(precision, scale) or DEC(p,s) DECIMAL(p, s) is the SQL standard notation for fixed-point decimal. "p" specifies precision or the number of total digits (the sum of whole digits and fractional digits). "s" denotes scale or the number of fractional digits. For example, if a column is defined as DECIMAL(5, 4), the numbers 3.14, 3.1415, 3.141592 are stored in the column as 3.1400, 3.1415, 3.1416, respectively keeping the specified precision(5) and scale(4). The precision p, can range from 1 to 34. The scale can range from 0 to p. If the scale is not specified, it defaults to 0. When precision and scale are not specified, DECIMAL becomes a floating-point decimal number. In this case, precision and scale can vary within the range 1 to 34 for precision and -6,111 to 6,176 for scale depending on the stored value. Examples: 0.0000001234 (1234 x 10-10) has the precision 4 and the scale 10. 1.0000001234 (10000001234 x 10-10) has the precision 11 and scale 10. 1234000000 (1234x106) has the precision 4 and scale -6. When precision and scale are not specified, DECIMAL becomes a floating-point decimal number. In this case, precision and scale can vary within the range described above, 1~34 for precision and - 6,111~6,176 for scale depending on the stored value. SMALLDECIMAL The SMALLDECIMAL is a floating-point decimal number. The precision and scale can vary within the range, 1~16 for precision and -369~368 for scale depending on the stored value. SMALLDECIMAL is supported only on column store. DECIMAL and SMALLDECIMAL are floating-point types. For instance, a decimal column can store any of 3.14, 3.1415, 3.141592 whilst maintaining their precision. DECIMAL(p, s) is the SQL standard notation for fixed-point decimal. For instance, 3.14, 3.1415, 3.141592 are stored in a decimal(5, 4) column as 3.1400, 3.1415, 3.1416, respectively keeping the specified precision(5) and scale(4). REAL The REAL data type specifies a single-precision 32-bit floating-point number. DOUBLE The DOUBLE data type specifies a single-precision 64-bit floating-point number. The minimum value is -1.79769 x 10308 and the maximum value is 1.79769x10308 . The smallest positive DOUBLE value is 2.2207x10-308 and the largest negative DOUBLE value is -2.2207x10-308. FLOAT(n) The FLOAT(n) data type specifies a 32-bit or 64-bit real number, where n specifies the number of significant bits and can range between 1 and 53. When you use the FLOAT(n) data type, if n is smaller than 25, it becomes a 32-bit REAL data type. If n is greater than or equal to 25, it then becomes a 64-bit DOUBLE data type. If n is not declared, it becomes a 64-bit double data type by default. Character String Types The character string data types are used to store values that contain character strings. While VARCHAR data types contain ASCII character strings, NVARCHAR are used for storing Unicode character strings. VARCHAR The VARCHAR(n) data type specifies a variable-length ASCII character string, where n indicates the maximum length and is an integer between 1 and 5000. NVARCHAR The NVARCHAR(n) data type specifies a variable-length Unicode character set string, where n indicates the maximum length and is an integer between 1 and 5000. ALPHANUM The ALPHANUM(n) data type specifies a variable-length character string which contains alpha- numeric characters, where n indicates the maximum length and is an integer between 1 and 127. SAP HANA Database - SQL Reference Manual 16 2012-12-19 SHORTTEXT The SHORTTEXT(n) data type specifies veriable-length character string which supports textsearch- features and stringsearch-features. This is not a standalone sql-type. Selecting a SHORTTEXT(n)- column yields a column of type NVARCHAR(n). <shorttext_type> ::= SHORTTEXT '(' int_const ')' <elem_list_shorttext> <elem_list_shorttext> ::= <elem_shorttext> [... ',' <elem_shorttext>] <elem_shorttext> ::= <fulltext_elem> | SYNC[HRONOUS] Binary Types Binary types are used to store bytes of binary data. VARBINARY The VARBINARY(n) data type is used to store binary data of a specified maximum length in bytes, where n indicates the maximum length and is an integer between 1 and 5000. Large Object (LOB) Types LOB (large objects) data types, CLOB, NCLOB and BLOB, are used to store a large amount of data such as text documents and images. The maximum size of an LOB is 2 GB. BLOB The BLOB data type is used to store large binary data. CLOB The CLOB data type is used to store large ASCII character data. NCLOB The NCLOB data type is used to store a large Unicode character object. TEXT The TEXT data type specifies which supports textsearch-features. This is not a standalone sql-type. Selecting a TEXT-column yields a column of type NCLOB. <text_type> ::= TEXT <opt_fulltext_elem_list_text> <opt_fulltext_elem_list_text> ::= <fulltext_elem_text> [... ',' <fulltext_elem_text>] <fulltext_elem_text> ::= <fulltext_elem> | [SYNC[HRONOUS] | [ASYNC[HRONOUS] FLUSH [QUEUE] EVERY <n> MINUTES [[OR] AFTER <m> DOCUMENTS] ] Syntax-rules common to TEXT and SHORTTEXT <fulltext_elem> ::= LANGUAGE COLUMN <column_name> | LANGUAGE DETECTION '(' <str_const_list> ')' | MIME TYPE COLUMN <column_name> | FUZZY SEARCH INDEX [ON|OFF] | PHRASE INDEX RATIO [ON|OFF] | CONFIGURATION <str_const> | SEARCH ONLY [ON|OFF] | FAST PREPROCESS [ON|OFF] LOB types are provided for storing and retrieving such large data. LOB types support the following operations. The length() function returns the LOB length in bytes. LIKE can be used to search LOB columns. The LOB types have the following restrictions: LOB columns cannot appear in ORDER BY or GROUP BY clauses. LOB columns cannot appear in FROM clauses as a join predicate. LOB columns cannot appear in WHERE clauses as a predicate except LIKE, CONTAINS, =, or <>. LOB columns cannot appear in SELECT clauses as an aggregate function argument. LOB columns cannot appear in SELECT DISTINCT clauses. LOB columns cannot be used in set operations such as EXCEPT. UNION ALL is an exception. LOB columns cannot be used as a primary key. SAP HANA Database - SQL Reference Manual 17 2012-12-19 LOB columns cannot be used in CREATE INDEX statements. LOB columns cannot be used in statistics update statements. Mapping between SQL Data Type and Column Store Data Type SQL Type Column Store Type I nteger Types TI NYI NT, SMALLI NT, I NT CS_I NT BI GI NT CS_FI XED(18,0) Approxi mate Types REAL CS_FLOAT DOUBLE CS_DOUBLE FLOAT CS_DOUBLE FLOAT(p) CS_FLOAT, CS_DOUBLE Deci mal Types DECI MAL CS_DECI MAL_FLOAT DECI MAL(p,s) CS_FI XED(p-s,s) SMALLDECI MAL CS_SDFLOAT Character Types VARCHAR CS_STRI NG NVARCHAR CS_STRI NG CLOB, NCLOB CS_STRI NG ALPHANUM CS_ALPHANUM Bi nary Types BLOB CS_RAW VARBI NARY CS_RAW Date/Ti me Types DATE CS_DAYDATE TI ME CS_SECONDTI ME TI MESTAMP CS_LONGDATE SECONDDATE CS_SECONDDATE Data Type Conversion This section describes the data type conversion allowed in SAP HANA Database. Explicit type conversion The type of an expression result, for example a field reference, a function on fields, or literals can be converted using the following functions: 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. Implicit type conversion When a given set of operand/argument types does not match what an operator/function expects, a type conversion is carried out by the SAP HANA Database. This conversion only occurs if a relevant conversion is available and if it makes the operation/function executable. For instance, a comparison of BIGINT and VARCHAR is performed by implicitly converting VARCHAR to BIGINT. The entire explicit conversions can be used for implicit conversion except for the TIME and TIMESTAMP data types. TIME and TIMESTAMP can be converted to each other using TO_TIME(TIMESTAMP) and TO_TIMESTAMP(TIME). Examples Table 8: Implicit Type conversion Examples Input Expression Transformed Expression with Implicit Conversion BI GI NT > VARCHAR BI GI NT > BI GI NT(VARCHAR) BI GI NT > DECI MAL DECI MAL(BI GI NT) > DECI MAL TI MESTAMP > DATE TI MESTAMP > TI MESTAMP(DATE) DATE > TI ME Error because there i s no conversi on avai l abl e between DATE and TI ME In the tables below, Boxes with "OK" means data type conversions are allowed without any checks. Boxes with "CHK" means the data type can be converted if the data is valid for the target type. Boxes with "-" indicates that data type conversion is not allowed. SAP HANA Database - SQL Reference Manual 18 2012-12-19 The rules shown are applicable to both implicit and explicit conversion except for Time to Timestamp conversion. Only explicit conversions are allowed for converting the Time data type to Timestamp using the TO_TIMESTAMP or CAST functions. Table 9a: Data type conversion table Target/ Source tinyint - OK OK OK OK OK OK OK OK OK OK smallint CHK - OK OK OK OK OK OK OK OK OK integer CHK CHK - OK OK OK OK OK OK OK OK bigint CHK CHK CHK - OK CHK CHK CHK OK OK OK decimal CHK CHK CHK CHK - CHK CHK CHK OK OK OK decimal(p,s) CHK CHK CHK CHK CHK CHK CHK CHK CHK CHK OK smalldecimal CHK CHK CHK CHK OK CHK - CHK CHK OK OK real CHK CHK CHK CHK OK CHK CHK - OK OK OK double CHK CHK CHK CHK CHK CHK CHK CHK - OK OK varchar CHK CHK CHK CHK CHK CHK CHK CHK CHK - OK nvarchar CHK CHK CHK CHK CHK CHK CHK CHK CHK CHK - Table 9b: Data type conversion table Target/ Source time date seconddate timestamp varchar nvarchar time - - - - OK OK date - - OK OK OK OK seconddate ti me date - ti mestamp OK OK timestamp ti me date seconddate - OK OK varchar CHK CHK CHK CHK - OK nvarchar CHK CHK CHK CHK CHK - Table 9c: Data type conversion table Target/ Source varbinary alphanum varchar nvarchar varbinary - - - - alphanum - - OK OK varchar OK OK - OK nvarchar OK OK CHK - Data Type Precedence This section describes the data type precedence implemented by the SAP HANA Database. Data type precedence specifies that the data type with lower precedence is converted to the data type with higher precedence. t i n y i n t s m a l l i n t i n t e g e r b i g i n t d e c i m a l d e c i m a l ( p , s ) s m a l l d e c i m a l r e a l d o u b l e v a r c h a r n v a r c h a r SAP HANA Database - SQL Reference Manual 19 2012-12-19 Highest TI MESTAMP SECONDDATE DATE TI ME DOUBLE REAL DECI MAL SMALLDECI MAL BI GI NT I NTEGER SMALLI NT TI NYI NT NCLOB NVARCHAR CLOB VARCHAR BLOB Lowest VARBI NARY Typed Constant A constant is a symbol that represents a specific fixed data value. Character string contant A character string constant is enclosed in single quotation marks. 'Brian' '100' Unicode string has a similar format to character string but is preceded by an N identifier (N stands for National Language in the SQL-92 standard). The N prefix must be uppercase. N'abc' SELECT 'Brian' "character string 1", '100' "character string 2", N'abc' "unicode st ring" FROM DUMMY; character string 1, character string 2, unicode string Brian, 100, abc Number constant A number constant is represented by a string of numbers that are not enclosed in quotation marks. Numbers may contain a decimal point or scientific notation. 123 123.4 1.234e2 A hexadecimal number constant is a string of hexadecimal numbers and has the prefix 0x. 0x0abc SELECT 123 "integer", 123.4 "decimal1", 1.234e2 "decimal2", 0x0abc "hexadecimal" FR OM DUMMY; integer, decimal1, decimal2, hexadecimal 123, 123.4, 123.4, 2748 Binary string constant A binary string has the prefix X and is a string of hexadecimal numbers that are enclosed in quotation marks. X'00abcd' x'dcba00' SELECT X'00abcd' "binary string 1", x'dcba00' "binary string 2" FROM DUMMY; binary string 1, binary string 2 SAP HANA Database - SQL Reference Manual 20 2012-12-19 00ABCD, DCBA00 Date/Time/Timestamp constant Date, Time and Timestamp each have the following prefixes. date'2010-01-01' time'11:00:00.001' 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; date, time, timestamp 2010-01-01, 11:00:00, 2011-12-31 23:59:59.0 SAP HANA Database - SQL Reference Manual 21 2012-12-19 Predicates A predicate is specified by combining one or more expressions, or logical operators, and returns one of the following logical/truth values: TRUE, FALSE, or UNKNOWN. Comparison Predicates Two values are compared using comparison predicates and the comparison returns true, false, or unknown. Syntax: <comparison_predicate> ::= <expression> { = | != | <> | > | < | >= | <= } [ ANY | SOME| ALL ] { <expression_li st> | <subquery> } <expression_list> ::= <expression>, ... Expressions can be a simple expression such as a character, date, or number. An expression can also be a scalar subquery. ANY, SOME - When ANY or SOME are specified, the comparison returns true if at least one value returned by the subquery or expression_list is true. ALL - When ALL is specified, the comparison returns true if the comparison of all values returned by the subquery or expression_list is true. Range Predicate A value is compared with a list of values within the provided range. Syntax: <range_predicate> ::= <expression1> [NOT] BETWEEN <expression2> AND <expression3> BETWEEN ... AND ... - When a range predicate is used, it returns true if expression1 is within the range specified by expression2 and expression3. True will only be returned if expression2 has a lesser value than expression3. In Predicate A value is compared with a specified set of values. True will be returned if the value of expression1 is found in the expression_list (or subquery). Syntax: <in_predicate> ::= <expression> [NOT] IN { <expression_list> | <subquery> } Exists Predicate Returns true if the subquery returns a result set that is not empty and returns false if the subquery returns an empty result set. Syntax: <exists_predicate> ::= [NOT] EXISTS ( <subquery> ) LIKE Predicate The LIKE predicate is used for string comparisons. Expression1 is tested for a pattern contained in expression2. Wildcard characters ( % ) and ( _ ) may be used in the comparison string expression2. LIKE returns true if the pattern specified by expression2 is found. The percentage sign (%) matches zero or more characters and underscore (_) matches exactly one character. To match a percent sign or underscore in the LIKE predicate, an escape character must be used. Using the optional argument, ESCAPE expression3, you can specify the escape character that will be used allowing the underscore (_) or percentage sign (%) to be matched. Syntax: <like_predicate> ::= <expression1> [NOT] LIKE <expression2> [ESCAPE <expression3>] NULL Predicate SAP HANA Database - SQL Reference Manual 22 2012-12-19 When the IS NULL predicate is specified, a value can be compared with NULL. IS NULL returns true if the expression value is NULL. If the IS NOT NULL predicate is specified, it returns true if a value is not NULL. Syntax: <null_predicate> ::= <expression> IS [NOT] NULL CONTAINS Predicate The CONTAINS predicate is used to search for text-matches to a search string in subqueries. Syntax: <contains_function> ::= CONTAINS '(' <contains_columns> ',' <search_string>')' | CONTAINS '(' <contains_columns> ',' <search_string> ',' <se arch_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 The freestyle-search-string format is used (eg. Peter "Palo Alto" OR Berlin -"SAP LABS" ) search_specifier If the search_specifier clause is not specified EXACT is taken as default EXACT EXACT returns true for those records where exact matches of the searchterms are found in the search- attributes FUZZY FUZZY returns true for those records where words similar to the searchterms are found in the search- attributes (e.g. spelling errors will be ignored to a certain extent) float_const If float_const is omitted, then 0.8 is the default. This default can be overridden by defining parameter FUZZINESSTHRESHOLD supported by columnstore join-views WEIGHT If a weights list is specified, it must be the same size as the number of (expanded) columns in <contains_columns> LANGUAGE SAP HANA Database - SQL Reference Manual 23 2012-12-19 LANGUAGE is used during preprocessing of the search string and as a pre-search filter. Only documents which match the search string and the language specified are returned. LINGUISTIC LINGUISTIC returns true for those records where word-variants of the searchterms are found in the search- attributes (e.g. searching for 'cats' will also return records which contain 'cat') Limitations: If there are multiple CONTAINS predicates specified in the where clause of a select statement, then only one of the predicates may consist of more than one column in the <contains_columns> list The CONTAINS-predicate works only on column store tables (simple tables and join-views) Examples: Exact search 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 Fuzzy search select * from T where contains(column1, 'catz', FUZZY(0.8)) Linguistic search: select * from T where contains(column1, 'catz', LINGUISTIC) Freestyle search: The freestyle-search is a search mulitple columns. 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)) SAP HANA Database - SQL Reference Manual 24 2012-12-19 Operators You can perform arithmetic operations in expressions by using operators. Operators can be used for calculation, value comparison or to assign values. Unary and Binary Operators Table 10. Unary and binary operators Operator Operation Format Description Unary A unary operator appl i es to one operand or a si ngl e val ue expressi on. operator operand unary pl us operator(+) unary negati on operator(-) l ogi cal negati on(NOT) Bi nary Bi nary A bi nary operator appl i es to two operands or two val ue expressi ons. operand1 operator operand2 mul ti pl i cati ve operators ( *, / ) addi ti ve operators ( +,- ) compari son operators ( =,!=,<,>,<=,>=) l ogi cal operators ( AND, OR ) Operator Precedence An expression can use several operators. If the number of operators is greater than one then the SAP HANA Database will evaluate them in order of operator precedence. You can change the order of evaluation by using parentheses, as expressions contained within parentheses are always evaluated first. If parentheses are not used, the operators have the precedence indicated by the table below. Please note, the SAP HANA Database will evaluate operators with equal precedence from left to right within an expression. Table 11. SQL operator precedence Precedence Operator Operation Hi ghest () parentheses +, - unary posi ti ve and negati ve operati on *, / mul ti pl i cati on, di vi si on +, - addi ti on, subtracti on || concatenati on =, !=, <, >, <=, >=, I S NULL, LI KE, BETWEEN comparsi on NOT l ogi cal negati on AND conjuncti on Lowest OR di sjuncti on Arithmetic Operators You use arithmetic operators to perform mathematical operations such as adding, subtracting, multiplying, dividing and negation of numeric values. SAP HANA Database - SQL Reference Manual 25 2012-12-19 Table 12. Arithmetic operators Operator Description -<expressi on> Negati on. I f the expressi on i s the NULL val ue, the resul t i s NULL. <expressi on> + <expressi on> Addi ti on. I f ei ther expressi on i s the NULL val ue, the resul t i s NULL. <expressi on> - <expressi on> Subtracti on. I f ei ther expressi on i s the NULL val ue, the resul t i s NULL. <expressi on> * <expressi on> Mul ti pl i cati on. I f ei ther expressi on i s NULL, the resul t i s NULL. <expressi on> / <expressi on> Di vi si on. I f ei ther expressi on i s NULL, or i f the second expressi on i s 0, an error i s returned. String Operators A concatenation operator combines two items such as strings, expressions or constants into one. Table 13. Concatenation operators Operator Description <expressi on> || <expressi on> Stri ng concatenati on (two verti cal bars). I f ei ther stri ng i s NULL, i t returns NULL. For VARCHAR or NVARCHAR type strings, leading or trailing spaces are kept. If either string is of data type NVARCHAR, the result has data type NVARCHAR and is limited to 5000 characters. The maximum length for VARCHAR concatenation is also limited to 5000 characters. Comparsion Operators Syntax: <comparison_operation> ::= <expression1> <comparison_operator> <expression2> Table 14. Comparison operators Operator Description Example = Equal to SELECT * FROM students WHERE i d = 25; > Greater than SELECT * FROM students WHERE i d > 25; < Less than SELECT * FROM students WHERE i d < 25; >= Greater than or equal to SELECT * FROM students WHERE i d >= 25; <= Less than or equal to SELECT * FROM students WHERE i d <= 25; !=, <> Not equal SELECT * FROM students WHERE i d != 25; SELECT * FROM students WHERE i d <> 25; Logical Operators Search conditions can be combined using AND or OR operators. You can also negate them using the NOT operator. Table 15. Logical operators Operator Syntax Description AND WHERE condi ti on1 AND condi ti on2 When usi ng AND, the combi ned condi ti on i s TRUE i f both condi ti ons are TRUE, FALSE i f ei ther condi ti on i s FALSE, and UNKNOWN otherwi se. OR WHERE condi ti on1 OR condi ti on2 When usi ng OR, the combi ned condi ti on i s TRUE i f ei ther condi ti on i s TRUE, FALSE i f both condi ti ons are FALSE, and UNKNOWN otherwi se. NOT WHERE NOT condi ti on The NOT operator i s pl aced before a condi ti on to negate the condi ti on. The NOT condi ti on i s TRUE i f condi ti on i s FALSE, FALSE i f condi ti on i s TRUE, and UNKNOWN i f condi ti on i s UNKNOWN. Set Operators The operators described in this section perform set operations on the results of two or more queries. SAP HANA Database - SQL Reference Manual 26 2012-12-19 Table 16. Set operators Operator Returned Value UNI ON Combi nes the resul ts of two or more sel ect statements or query expressi ons UNI ON ALL Combi nes the resul ts of two or more sel ect statements or query expressi ons, i ncl udi ng al l dupl i cate rows. I NTERSECT Combi nes the resul ts of two or more sel ect statements or query expressi ons, and returns al l common rows. EXCEPT Takes output from the fi rst query and then removes rows sel ected by the second query. SAP HANA Database - SQL Reference Manual 27 2012-12-19 Expressions An expression is a clause that can be evaluated to return values. Syntax: <expression> ::= <case_expression> | <function_expression> | <aggregate_expression> | (<expression> ) | ( <subquery> ) | - <expression> | <expression> <operator> <expression> | <variable_name> | <constant> | [<correlation_name>.]<column_name> Case Expressions A case expression allows the user to use IF ... THEN ... ELSE logic without using procedures in SQL statements. Syntax: <case_expression> ::= CASE <expression> WHEN <expression> THEN <expression> ... [ ELSE <expression>] { END } If the expression following the CASE statement is equal to the expression following the WHEN statement, then the expression following the THEN statement is returned. Otherwise the expression following the ELSE statement is returned if it exists. Function Expressions SQL built-in functions can be used as an expression. Syntax: <function_expression> ::= <function_name> ( <expression>, ... ) Aggregate Expressions An aggregate expression uses an aggregate function to calculate a single value from the values of multiple rows in a column. Syntax: <aggregate_expression> ::= COUNT(*) | <agg_name> ( [ ALL | DISTINCT ] <expression> ) <agg_name> ::= COUNT | MIN | MAX | SUM | AVG | STDDEV | VAR Aggregate name Description COUNT Counts the number of rows returned by a query. COUNT(*) returns the number of rows, regardl ess of the val ue of those rows and i ncl udi ng dupl i cate val ues. COUNT(<expressi on>) returns the number of non-NULL val ues for that expressi on returned by the query. MI N Returns the mi ni mum val ue of expressi on. MAX Returns the maxi mum val ue of expressi on. SUM Returns the sum of expressi on. AVG Returns the ari thmeti cal mean of expressi on. STDDEV Returns the standard devi ati on of gi ven expressi on as the square root of VARI ANCE functi on. VAR Returns the vari ance of expressi on as the square of standard devi ati on. Subqueries in Expressions SAP HANA Database - SQL Reference Manual 28 2012-12-19 A subquery is a SELECT statement enclosed in parentheses. The SELECT statement can contain one and only one select list item. When used as an expression a scalar subquery is allowed to return only zero or one value. Syntax: <scalar_subquery_expression> ::= (<subquery>) Within the SELECT list of the top level SELECT, or in the SET clause of an UPDATE statement, you can use a scalar subquery anywhere that you can use a column name. However, scalar_subquery cannot be used inside GROUP BY clause. Example: For example, the following statement returns the number of employees in each department, grouped by department name: SELECT DepartmentName, COUNT(*), 'out of', (SELECT COUNT(*) FROM Employees) FROM Departments AS D, Employees AS E WHERE D.DepartmentID = E.DepartmentID GROUP BY DepartmentName; SAP HANA Database - SQL Reference Manual 29 2012-12-19 SQL Functions Introduction This chapter describes SQL Functions that are provided by SAP HANA Database. Data Type Conversion Functions DateTime Functions Number Functions String Functions Window Functions Miscellaneous Functions Data Type Conversion Functions Data type conversion functions are used to convert arguments from one data type to another, or to test whether a conversion is possible. CAST Syntax CAST (expression AS data_type) Syntax Elements expression - The expression to be converted. data type - The target data type. TINYINT | SMALLINT | INTEGER | BIGINT | DECIMAL | SMALLDECIMAL | REAL | DOUBLE | ALPHANUM | VARCHAR | NVARCHAR | DAYDATE | DATE | TIME | SECONDDATE | TIMESTAMP Description Returns the value of an expression converted to a supplied data type. Example SELECT CAST (7 AS VARCHAR) "cast" FROM DUMMY; cast 7 TO_ALPHANUM Syntax TO_ALPHANUM (value) Description Converts a given value to an ALPHANUM data type. Example SELECT TO_ALPHANUM ('10') "to alphanum" FROM DUMMY; to alphanum 10 TO_BIGINT Syntax TO_BIGINT (value) Description Converts a value to a BIGINT data type. SAP HANA Database - SQL Reference Manual 30 2012-12-19 Example SELECT TO_BIGINT ('10') "to bigint" FROM DUMMY; to bigint 10 TO_BINARY Syntax TO_BINARY (value) Description Converts a value to a BINARY data type. Example SELECT TO_BINARY ('abc') "to binary" FROM DUMMY; to binary 616263 TO_BLOB Syntax TO_BLOB (value) Description Converts a value to a BLOB data type. The argument value must be a binary string. Example SELECT TO_BLOB (TO_BINARY('abcde')) "to blob" FROM DUMMY; to blob abcde TO_CLOB Syntax TO_CLOB (value) Description Converts a value to a CLOB data type. Example SELECT TO_CLOB ('TO_CLOB converts the value to a CLOB data type') "to clob" FROM DU MMY; to clob TO_CLOB converts the value to a CLOB data type TO_DATE Syntax TO_DATE (d [, format]) Description SAP HANA Database - SQL Reference Manual 31 2012-12-19 Converts a date string d into a DATE data type. If the format specifier is omitted, the conversion is performed using the date format model as explained in Date Formats. Example SELECT TO_DATE('2010-01-12', 'YYYY-MM-DD') "to date" FROM DUMMY; to date 2010-01-12 TO_DATS Syntax TO_DATS (d) Description Converts a date string d into an ABAP DATE string with format 'YYYYMMDD'. Example SELECT TO_DATS ('2010-01-12') "abap date" FROM DUMMY; abap date 20100112 TO_DECIMAL Syntax TO_DECIMAL (value [, precision, scale]) Description Converts the value to a DECIMAL data type. The precision is the total number of significant digits and can range from 1 to 34. The scale is the number of digits from the decimal point to the least significant digit and can range from - 6,111 to 6,176. This means that the scale specifies the range of the exponent in the decimal number from 10 - 6111 to 10 6176 . If the scale is not specified, it defaults to 0. Scale is positive when the number has significant digits to the right of the decimal point, and negative when the number has significant digits to the left of the decimal point. When precision and scale are not specified, DECIMAL becomes a floating-point decimal number. In this case, precision and scale can vary within the range described above, 1~34 for precision and -6,111~6,176 for scale depending on the stored value. Example SELECT TO_DECIMAL(7654321.888888, 10, 3) "to decimal" FROM DUMMY to decimal 7654321.889 TO_DOUBLE Syntax TO_DOUBLE (value) Description Converts a value to a DOUBLE (double precision) data type. SAP HANA Database - SQL Reference Manual 32 2012-12-19 Example SELECT 3*TO_DOUBLE ('15.12') "to double" FROM DUMMY; to double 45.36 TO_INT Syntax TO_INT (value) Description Converts the value to an INTEGER data type. Example SELECT TO_INT('10') "to int" FROM DUMMY; to int 10 TO_INTEGER Syntax TO_INTEGER (value) Description Converts the value to an INTEGER data type. Example SELECT TO_INTEGER ('10') "to int" FROM DUMMY; to int 10 TO_NCLOB Syntax TO_NCLOB (value) Description Converts a value to a NCLOB data type. Example SELECT TO_NCLOB ('TO_NCLOB converts the value to a NCLOB data type') "to nclob" FRO M DUMMY; to nclob TO_NCLOB converts the value to a NCLOB data type TO_NVARCHAR Syntax TO_NVARCHAR (value [,format]) Description SAP HANA Database - SQL Reference Manual 33 2012-12-19 Converts the value to a NVARCHAR unicode character data type. If the format specifier is omitted, the conversion is performed using the date format model as explained in Date Formats. Example SELECT TO_NVARCHAR(TO_DATE('2009/12/31'), 'YY-MM-DD') "to nchar" FROM DUMMY; to nchar 09-12-31 TO_REAL Syntax TO_REAL (value) Description Converts a value to a REAL (single precision) data type. Example SELECT 3*TO_REAL ('15.12') "to real" FROM DUMMY; to real 45.36000061035156 TO_SECONDDATE Syntax TO_SECONDDATE (d [, format]) Description Converts a date string d into a SECONDDATE data type. If the format specifier is omitted, the conversion is performed using the date format model as explained in Date Formats. Example SELECT TO_SECONDDATE ('2010-01-11 13:30:00', 'YYYY-MM-DD HH24:MI:SS') "to seconddat e" FROM DUMMY; to seconddate 2010-01-11 13:30:00.0 TO_SMALLDECIMAL Syntax TO_SMALLDECIMAL (value) Description Converts the value to a SMALLDECIMAL data type. Example SELECT TO_SMALLDECIMAL(7654321.89) "to smalldecimal" FROM DUMMY; to smalldecimal 7654321.89 TO_SMALLINT Syntax SAP HANA Database - SQL Reference Manual 34 2012-12-19 TO_SMALLINT (value) Description Converts the value to a SMALLINT data type. Example SELECT TO_SMALLINT ('10') "to smallint" FROM DUMMY; to smallint 10 TO_TIME Syntax TO_TIME (t [, format]) Description Converts a time string t into the TIME data type. If the format specifier is omitted, the conversion is performed using the time format model as explained in Time Formats. Example SELECT TO_TIME ('08:30 AM', 'HH:MI AM') "to time" FROM DUMMY; to time 08:30:00 TO_TIMESTAMP Syntax TO_TIMESTAMP (d [, format]) Description Converts a date string d into the TIMESTAMP data type. If the format specifier is omitted, the conversion is performed using the date format model as explained in Date Formats. Example SELECT TO_TIMESTAMP ('2010-01-11 13:30:00', 'YYYY-MM-DD HH24:MI:SS') "to timestamp" FROM DUMMY; to timestamp 2010-01-11 13:30:00.0 TO_TINYINT Syntax TO_TINYINT (value) Description Converts the value to a TINYINT data type. Example SELECT TO_TINYINT ('10') "to tinyint" FROM DUMMY; to tinyint 10 SAP HANA Database - SQL Reference Manual 35 2012-12-19 TO_VARCHAR Syntax TO_VARCHAR (value [, format]) Description Converts a given value to a VARCHAR character data type. If the format specifier is omitted, the conversion is performed using the date format model as explained in Date Formats. Example SELECT TO_VARCHAR (TO_DATE('2009-12-31'), 'YYYY/MM/DD') "to char" FROM DUMMY; to char 2009/12/31 DateTime Functions ADD_DAYS Syntax ADD_DAYS (d, n) Description Computes the date d plus n days. Example SELECT ADD_DAYS (TO_DATE ('2009-12-05', 'YYYY-MM-DD'), 30) "add days" FROM DUMMY; add days 2010-01-04 ADD_MONTHS Syntax ADD_MONTHS (d, n) Description Computes the date d plus n months. Example SELECT ADD_MONTHS (TO_DATE ('2009-12-05', 'YYYY-MM-DD'), 1) "add months" FROM DUMMY ; add months 2010-01-05 ADD_SECONDS Syntax ADD_SECONDS (t, n) Description Computes the time t plus n seconds. Example SAP HANA Database - SQL Reference Manual 36 2012-12-19 SELECT ADD_SECONDS (TO_TIMESTAMP ('2012-01-01 23:30:45'), 60*30) "add seconds" FROM DUMMY; add seconds 2012-01-02 00:00:45.0 ADD_YEARS Syntax ADD_YEARS (d, n) Description Computes the date d plus n years. Example SELECT ADD_YEARS (TO_DATE ('2009-12-05', 'YYYY-MM-DD'), 1) "add years" FROM DUMMY; add years 2010-12-05 CURRENT_DATE Syntax CURRENT_DATE Description Returns the current local system date. Example SELECT CURRENT_DATE "current date" FROM DUMMY; current date 2010-01-11 CURRENT_TIME Syntax CURRENT_TIME Description Returns the current local system time. Example SELECT CURRENT_TIME "current time" FROM DUMMY; current time 17:37:37 CURRENT_TIMESTAMP Syntax CURRENT_TIMESTAMP Description Returns the current local system timestamp information. SAP HANA Database - SQL Reference Manual 37 2012-12-19 Example SELECT CURRENT_TIMESTAMP "current timestamp" FROM DUMMY; current timestamp 2010-01-11 17:38:48.802 CURRENT_UTCDATE Syntax CURRENT_UTCDATE Description Returns the current UTC date. The UTC stands for Coordinated Universal Time, also known as Greenwich Mean Time (GMT). Example SELECT CURRENT_UTCDATE "Coordinated Universal Date" FROM DUMMY; Coordinated Universal Time 2010-01-11 CURRENT_UTCTIME Syntax CURRENT_UTCTIME Description Returns the current UTC time. Example SELECT CURRENT_UTCTIME "Coordinated Universal Time" FROM DUMMY; Coordinated Universal Time 08:41:19 CURRENT_UTCTIMESTAMP Syntax CURRENT_UTCTIMESTAMP Description Returns the current UTC timestamp. Example SELECT CURRENT_UTCTIMESTAMP "Coordinated Universal Timestamp" FROM DUMMY; Coordinated Universal Timestamp 2010-01-11 08:41:42.484 DAYNAME Syntax DAYNAME (d) Description SAP HANA Database - SQL Reference Manual 38 2012-12-19 Returns the weekday in English for date d. Example SELECT DAYNAME ('2011-05-30') "dayname" FROM DUMMY; dayname MONDAY DAYOFMONTH Syntax DAYOFMONTH (d) Description Returns an integer the day of the month for date d. Example SELECT DAYOFMONTH ('2011-05-30') "dayofmonth" FROM DUMMY; dayofmonth 30 DAYOFYEAR Syntax DAYOFYEAR (d) Description Returns an integer representation of the day of the year for date d. Example SELECT DAYOFYEAR ('2011-05-30') "dayofyear" FROM DUMMY; dayofyear 150 DAYS_BETWEEN Syntax DAYS_BETWEEN (d1, d2) Description Computes the number of days between d1 and d2. Example SELECT DAYS_BETWEEN (TO_DATE ('2009-12-05', 'YYYY-MM-DD'), TO_DATE('2010-01-05', 'Y YYY-MM-DD')) "days between" FROM DUMMY; days between 31 EXTRACT Syntax EXTRACT ({YEAR | MONTH | DAY | HOUR | MINUTE | SECOND} FROM d) SAP HANA Database - SQL Reference Manual 39 2012-12-19 Description Finds and returns the value of a specified datetime field from date d. Example SELECT EXTRACT (YEAR FROM TO_DATE ('2010-01-04', 'YYYY-MM-DD')) "extract" FROM DUM MY; extract 2010 HOUR Syntax HOUR (t) Description Returns an integer representation of the hour for time t. Example SELECT HOUR ('12:34:56') "hour" FROM DUMMY; hour 12 ISOWEEK Syntax ISOWEEK (d) Description Returns the ISO year and week numbers of date d. The week number is prefixed by the letter W. Please also see WEEK Example SELECT ISOWEEK (TO_DATE('2011-05-30', 'YYYY-MM-DD')) "isoweek" FROM DUMMY; isoweek 2011-W22 LAST_DAY Syntax LAST_DAY (d) Description Returns the date of the last day of the month that contains the date d. Example SELECT LAST_DAY (TO_DATE('2010-01-04', 'YYYY-MM-DD')) "last day" FROM DUMMY; last day 2010-01-31 LOCALTOUTC SAP HANA Database - SQL Reference Manual 40 2012-12-19 Syntax LOCALTOUTC (t, timezone) Description Convert the local time t from a timezone to the UTC(GMT) time Example SELECT LOCALTOUTC (TO_TIMESTAMP('2012-01-01 01:00:00', 'YYYY-MM-DD HH24:MI:SS'), ' EST') "localtoutc" FROM DUMMY; localtoutc 2012-01-01 06:00:00.0 MINUTE Syntax MINUTE (t) Description Returns an integer representation of the minute for time t. Example SELECT MINUTE ('12:34:56') "minute" FROM DUMMY; minute 34 MONTH Syntax MONTH(d) Description Returns the number of the month from date d. Example SELECT MONTH ('2011-05-30') "month" FROM DUMMY; month 5 MONTHNAME Syntax MONTHNAME(d) Description Returns the name of the month in English for date d. Example SELECT MONTHNAME ('2011-05-30') "monthname" FROM DUMMY; monthname MAY SAP HANA Database - SQL Reference Manual 41 2012-12-19 NEXT_DAY Syntax NEXT_DAY (d) Description Returns the date of the next day after date d. Example SELECT NEXT_DAY (TO_DATE ('2009-12-31', 'YYYY-MM-DD')) "next day" FROM DUMMY; next day 2010-01-01 NOW Syntax NOW () Description Returns the current timestamp. Example SELECT NOW () "now" FROM DUMMY; now 2010-01-01 16:34:19.894 QUARTER Syntax QUARTER (d, [, start_month ]) Description Returns the numerical year quarter of date d. The first quarter starts in the month specified by start_month. If start_month is not specified the first quarter is assumed to begin in January. Example SELECT QUARTER (TO_DATE('2012-01-01', 'YYYY-MM-DD'), 2) "quarter" FROM DUMMY; quarter 2011-Q4 SECOND Syntax SECOND (t) Description Returns an integer representation of the second for time t. Example SELECT SECOND ('12:34:56') "second" FROM DUMMY; second SAP HANA Database - SQL Reference Manual 42 2012-12-19 second 56 SECONDS_BETWEEN Syntax SECONDS_BETWEEN (d1, d2) Description Computes the number of seconds between date arguments d1 and d2, which is semantically equal to d2 - d1. Example SELECT SECONDS_BETWEEN ('2009-12-05', '2010-01-05') "seconds between" FROM DUMMY; Seconds between 2678400 UTCTOLOCAL Syntax UTCTOLOCAL (t, timezone) Description Convert the UTC(GMT) time t to the local time in a timezone Example SELECT UTCTOLOCAL (TO_TIMESTAMP('2012-01-01 01:00:00', 'YYYY-MM-DD HH24:MI:SS'), ' EST') "utctolocal" FROM DUMMY; utctolocal 2011-12-31 20:00:00.0 WEEK Syntax WEEK (d) Description Returns the week number of date d. Please also see ISOWEEK Example SELECT WEEK (TO_DATE('2011-05-30', 'YYYY-MM-DD')) "week" FROM DUMMY; week 23 WEEKDAY Syntax WEEKDAY (d) Description Returns an integer representation of the day of the week for date d. The return value ranges from 0 to 6, representing Monday(0) through to Sunday(6). SAP HANA Database - SQL Reference Manual 43 2012-12-19 Example SELECT WEEKDAY (TO_DATE ('2010-12-31', 'YYYY-MM-DD')) "week day" FROM DUMMY; week day 4 YEAR Syntax YEAR (d) Description Returns the year number of date d. Example SELECT YEAR (TO_DATE ('2011-05-30', 'YYYY-MM-DD')) "year" FROM DUMMY; year 2011 Number Functions Number functions take numeric values, or strings with numeric characters, as inputs and return numeric values. When strings with numeric characters are provided as inputs implicit conversion from a string to a number is performed automatically before results are computed. ABS Syntax ABS (n) Description Returns the absolute value of the numeric argument n. Example SELECT ABS (-1) "absolute" FROM DUMMY; absolute 1 ACOS Syntax ACOS (n) Description Returns the arc-cosine, in radians, of the numeric argument n between -1 and 1. Example SELECT ACOS (0.5) "acos" FROM DUMMY; acos 1.0471975511965979 ASIN Syntax SAP HANA Database - SQL Reference Manual 44 2012-12-19 ASIN (n) Description Returns the arc-sine, in radians, of the numeric argument n between -1 and 1. Example SELECT ASIN (0.5) "asin" FROM DUMMY; asin 0.5235987755982989 ATAN Syntax ATAN (n) Description Returns the arc-tangent, in radians, of the numeric argument n. The range of n is unlimited. Example SELECT ATAN (0.5) "atan" FROM DUMMY; atan 0.4636476090008061 ATAN2 Syntax ATAN2 (n, m) Description Returns the arc-tangent, in radians, of the ratio of two numbers n and m. This produces the same result as ATAN(n/m). Example SELECT ATAN2 (1.0, 2.0) "atan2" FROM DUMMY; atan2 0.4636476090008061 BINTOHEX Syntax BINTOHEX (expression) Description Converts a binary value to a hexadecimal value. Example SELECT BINTOHEX('AB') "bintohex" FROM DUMMY; bintohex 4142 BITAND SAP HANA Database - SQL Reference Manual 45 2012-12-19 Syntax BITAND (n, m) Description Performs an AND operation on the bits of the arguments n and m. Both n and m must be non-negative integers. The BITAND function returns a result with BIGINT type. Example SELECT BITAND (255, 123) "bitand" FROM DUMMY; bitand 123 CEIL Syntax CEIL (n) Description Returns the first integer that is greater or equal to the value n. Example SELECT CEIL (14.5) "ceiling" FROM DUMMY; ceiling 15 COS Syntax COS (n) Description Returns the cosine of the angle, in radians, of the argument n. Example SELECT COS (0.0) "cos" FROM DUMMY; cos 1.0 COSH Syntax COSH (n) Description Computes the hyperbolic cosine of the argument n. Example SELECT COSH (0.5) "cosh" FROM DUMMY; cosh 1.1276259652063807 SAP HANA Database - SQL Reference Manual 46 2012-12-19 COT Syntax COT (n) Description Computes the cotangent of a number n, where the argument is an angle expressed in radians. Example SELECT COT (40) "cot" FROM DUMMY; cot -0.8950829176379128 EXP Syntax EXP (n) Description Returns the result of the base of natural logarithms e raised to the power of the argument n. Example SELECT EXP (1.0) "exp" FROM DUMMY; exp 2.718281828459045 FLOOR Syntax FLOOR (n) Description Returns the largest integer not greater than the numeric argument n. Example SELECT FLOOR (14.5) "floor" FROM DUMMY; floor 14 GREATEST Syntax GREATEST (n1 [, n2]...) Description Returns the greatest value among the arguments: n1, n2, ... Example SELECT GREATEST ('aa', 'ab', 'ba', 'bb') "greatest" FROM DUMMY; SAP HANA Database - SQL Reference Manual 47 2012-12-19 greatest bb HEXTOBIN Syntax HEXTOBIN (value) Description Converts a hexadecimal value to a binary value. Example SELECT HEXTOBIN ('1a') "hextobin" FROM DUMMY; hextobin 1A LEAST Syntax LEAST (n1 [, n2]...) Description Returns the least value among the arguments: n1, n2... Example SELECT LEAST('aa', 'ab', 'ba', 'bb') "least" FROM DUMMY; least aa LN Syntax LN (n) Description Returns the natural logarithm of the argument n. Example SELECT LN (9) "ln" FROM DUMMY; ln 2.1972245773362196 LOG Syntax LOG (b, n) Description Returns the natural logarithm of a number n base b. Base b must be a positive value greater than 1 and n must be any positive value. Example SAP HANA Database - SQL Reference Manual 48 2012-12-19 SELECT LOG (10, 2) "log" FROM DUMMY; log 0.30102999566398114 MOD Syntax MOD (n, d) Description Returns the remainder of a number n divided by a divisor d. When n is negative this function acts differently to the standard computational modulo operation. The following explains example of what the MOD function returns as the result. If d is zero, then n is returned. If n is greater than 0 and n is less than d, then n is returned. If n is less than 0 and n is greater than d, then n is returned. In other case that those mentioned above, remainder of the absolute value of n divided by the absolute value of d is used to calculate remainder. If n is less than 0, then the returned remainder from MOD is a negative number, and if n is greater than 0, then the returned remainder from MOD is a positive number. Example SELECT MOD (15, 4) "modulus" FROM DUMMY; modulus 3 SELECT MOD (-15, 4) "modulus" FROM DUMMY; modulus -3 POWER Syntax POWER (b, e) Description Calculates the base number b raised to the power of an exponent e. Example SELECT POWER (2, 10) "power" FROM DUMMY; power 1024.0 RAND Syntax DOUBLE RAND() Description Returns a pseudo-random value in the range of [0, 1.0). Its return value type is DOUBLE. Example SAP HANA Database - SQL Reference Manual 49 2012-12-19 SELECT RAND() FROM DUMMY; RAND 3.907985046680551e-14 ROUND Syntax ROUND (n [, pos]) Description Rounds argument n to the specified pos amount of places after the decimal point. Example SELECT ROUND (16.16, 1) "round" FROM DUMMY; round 16.2 SELECT ROUND (16.16, -1) "round" FROM DUMMY; round 20 SIGN Syntax SIGN (n) Description Returns the sign (positive or negative) of the numeric argument n. Returns 1 if n is a positive value,-1 if n is a negative value, and 0 if n is equal to zero. Example SELECT SIGN (-15) "sign" FROM DUMMY; sign -1 SIN Syntax SIN (n) Description Returns the sine of n, where the argument is an angle expressed in radians. Example SELECT SIN ( 3.141592653589793/2) "sine" FROM DUMMY; sine 1.0 SINH Syntax SINH (n) SAP HANA Database - SQL Reference Manual 50 2012-12-19 Description Returns the hyperbolic sine of n, where the argument is an angle expressed in radians. Example SELECT SINH (0.0) "sinh" FROM DUMMY; sinh 0.0 SQRT Syntax SQRT (n) Description Returns the square root of the argument n. Example SELECT SQRT (2) "sqrt" FROM DUMMY; sqrt 1.4142135623730951 TAN Syntax TAN (n) Description Returns the tangent of n, where the argument is an angle expressed in radians. Example SELECT TAN (0.0) "tan" FROM DUMMY; tan 0.0 TANH Syntax TANH (n) Description Returns the hyperbolic tangent of the numeric argument n. Example SELECT TANH (1.0) "tanh" FROM DUMMY; tanh 0.7615941559557649 UMINUS Syntax UMINUS (n) SAP HANA Database - SQL Reference Manual 51 2012-12-19 UMINUS (n) Description Returns the negated value of the numeric argument n. Example SELECT UMINUS(-765) "uminus" FROM DUMMY; uminus 765 String Functions ASCII Syntax ASCII(c) Description Returns the integer ASCII value of the first byte in a string c. Example SELECT ASCII('Ant') "ascii" FROM DUMMY; ascii 65 CHAR Syntax CHAR (n) Description Returns the character with the ASCII value of a number n. Example SELECT CHAR (65) || CHAR (110) || CHAR (116) "character" FROM DUMMY; character Ant CONCAT Syntax CONCAT (str1, str2) Description Returns a combined string consisting of str1 followed by str2. The concatenation operator (||) is identical to this function. Example SELECT CONCAT ('C', 'at') "concat" FROM DUMMY; concat Cat SAP HANA Database - SQL Reference Manual 52 2012-12-19 LCASE Syntax LCASE(str) Description Converts all characters in string str to lowercase. Note: The LCASE function is identical to the LOWER function. Example SELECT LCASE ('TesT') "lcase" FROM DUMMY; lcase test LEFT Syntax LEFT (str, n) Description Returns the first n characters/bytes from the beginning of string str. Example SELECT LEFT ('Hello', 3) "left" FROM DUMMY; left Hel LENGTH Syntax LENGTH(str) Description Returns the number of characters in string str. Note: Supplementary plane Unicode characters, each of which occupies 6 bytes in CESU-8 encoding, are counted as two characters. Example SELECT LENGTH ('length in char') "length" FROM DUMMY; length 14 LOCATE Syntax LOCATE (haystack, needle) Description Returns the position of a substring needle within a string haystack. Returns 0 if needle is not found within SAP HANA Database - SQL Reference Manual 53 2012-12-19 haystack. Returns NULL if haystack or needle is NULL, or if haystack is an empty string. Example SELECT LOCATE ('length in char', 'char') "locate" FROM DUMMY; Locate 11 SELECT LOCATE ('length in char', 'length') "locate" FROM DUMMY; Locate 1 SELECT LOCATE ('length in char', 'zchar') "locate" FROM DUMMY; Locate 0 LOWER Syntax LOWER(str) Description Converts all characters in string str to lowercase. Note: The LOWER function is identical to the LCASE function. Example SELECT LOWER ('AnT') "lower" FROM DUMMY; lower ant LPAD Syntax LPAD (str, n [, pattern]) Description Pads the start of string str with spaces to make a string of n characters in length. If the pattern argument is provided string str will be padded using sequences of these characters until the required length is met. Example SELECT LPAD ('end', 15, '12345') "lpad" FROM DUMMY; lpad 123451234512end LTRIM Syntax LTRIM (str [, remove_set]) Description Returns string str, trimmed of all leading spaces. If remove_set is specified, LTRIM removes all the characters contained in this set from the start of string str. This process continues until a character not the in remove_set is reached. SAP HANA Database - SQL Reference Manual 54 2012-12-19 Note: remove_set is treated as a set of characters and not as a search string. Example SELECT LTRIM ('babababAabend','ab') "ltrim" FROM DUMMY; ltrim Aabend NCHAR Syntax NCHAR (n) Description Returns the Unicode character with the integer code number n. Example SELECT NCHAR (65) "nchar" FROM DUMMY; nchar A REPLACE Syntax REPLACE (original_string, search_string, replace_string) Description Searches in original_string for all occurrences of search_string and replaces them with replace_string. If original_string is an empty string, then the result will be an empty string. If two overlapping substrings match the search_string in the original_string, then only the first occurrence will be replaced. If original_string does not contain any occurrence of search_string, then original_string will be returned unchanged. If original_string, search_string, or replace_string are NULL then NULL is returned. Example SELECT REPLACE ('DOWNGRADE DOWNWARD','DOWN', 'UP') "replace" FROM DUMMY; replace UPGRADE UPWARD RIGHT Syntax RIGHT(str, n) Description Returns the rightmost n characters/bytes of string str. Example SELECT RIGHT('HI0123456789', 3) "right" FROM DUMMY; right 789 SAP HANA Database - SQL Reference Manual 55 2012-12-19 RPAD Syntax RPAD (str, n [, pattern]) Description Pads the end of string str with spaces to make a string of n characters in length. If the pattern argument is provided string str will be padded using sequences of these characters until the required length is met. Example SELECT RPAD ('end', 15, '12345') "right padded" FROM DUMMY; right padded end123451234512 RTRIM Syntax RTRIM (str [,remove_set ]) Description Returns string str, trimmed of all trailing spaces. If remove_set is specified, RTRIM removes all the characters contained in this set from the end of string str. This process continues until a character not the in remove_set is reached. Note: remove_set is treated as a set of characters and not as a search string. Example SELECT RTRIM ('endabAabbabab','ab') "rtrim" FROM DUMMY; rtrim endabA SUBSTR_AFTER Syntax SUBSTR_AFTER (str, pattern) Description Returns a substring of string str that follows the first occurrence of the pattern argument. If str does not contain the pattern substring, then an empty string is returned. If pattern is an empty string, then str is returned. If str or pattern is NULL, then NULL is returned. Example SELECT SUBSTR_AFTER ('Hello My Friend','My ') "substr after" FROM DUMMY; substr after Friend SUBSTR_BEFORE Syntax SUBSTR_BEFORE (str, pattern) SAP HANA Database - SQL Reference Manual 56 2012-12-19 Description Returns a substring of string str before the first occurrence of the pattern argument in the target string. If str does not contain the pattern substring, then an empty string is returned. If pattern is an empty string, then str is returned. If str or pattern is NULL, then NULL is returned. Example SELECT SUBSTR_BEFORE ('Hello My Friend','My') "substr before" FROM DUMMY; substr before Hello SUBSTRING Syntax SUBSTRING (str, start_position [, string_length]) Description Returns a substring of string str starting from start_position within the string. SUBSTRING can return the remaining part of a string from the start_position or optionally, a number of characters set by the string_length parameter. If start_position is less than 0, then it is considered as 1. If string_length is less than 1, then an empty string is returned. Example SELECT SUBSTRING ('1234567890',4,2) "substring" FROM DUMMY; substring 45 TRIM Syntax TRIM ([[LEADING | TRAILING | BOTH] trim_char FROM] str ) Description Returns string str after removing leading and trailing spaces. The trimming operation is carried out either from the start (LEADING), end (TRAILING) or both(BOTH) ends of string str. If either str or trim_char are a null values, then a NULL is returned. If no options are specified, TRIM removes both the leading and trailing substring trim_char from string str. If trim_char is not specified, then a single blank space is used. Example SELECT TRIM ('a' FROM 'aaa123456789aa') "trim both" FROM DUMMY; trim both 123456789 SELECT TRIM (LEADING 'a' FROM 'aaa123456789aa') "trim leading" FROM DUMMY; trim leading 123456789aa UCASE Syntax UCASE (str) SAP HANA Database - SQL Reference Manual 57 2012-12-19 Description Converts all characters in string str to uppercase. Note: The UCASE function is identical to the UPPER function. Example SELECT UCASE ('Ant') "ucase" FROM DUMMY; ucase ANT UNICODE Syntax UNICODE(c) Description Returns an integer containing the Unicode code point of the first character in the string, or NULL if the first character is not a valid encoding. Example SELECT UNICODE ('#') "unicode" FROM DUMMY; unicode 35 UPPER Syntax UPPER (str) Description Converts all characters in string str to uppercase. Note: The UPPER function is identical to the UCASE function. Example SELECT UPPER ('Ant') "uppercase" FROM DUMMY; uppercase ANT Window Functions Miscellaneous Functions COALESCE Syntax COALESCE (expression_list) Description Returns the first non-NULL expression from a list. At least two expressions must be contained in expression_list, and all expressions must be comparable. The result will be NULL if all the arguments are SAP HANA Database - SQL Reference Manual 58 2012-12-19 NULL. Example CREATE TABLE coalesce_example (ID INT PRIMARY KEY, A REAL, B REAL); INSERT INTO coalesce_example VALUES(1, 100, 80); INSERT INTO coalesce_example VALUES(2, NULL, 63); INSERT INTO coalesce_example VALUES(3, NULL, NULL); SELECT id, a, b, COALESCE (a, b*1.1, 50.0) "coalesce" FROM coalesce_example; ID A B coalesce 1 100.0 80.0 100.0 2 NULL 63.0 69.30000305175781 3 NULL NULL 50.0 CURRENT_CONNECTION Syntax CURRENT_CONNECTION Description Returns the id of the current connection. Example SELECT CURRENT_CONNECTION "current connection" FROM DUMMY; current connection 2 CURRENT_SCHEMA Syntax CURRENT_SCHEMA Description Returns a string containing the current schema name. Example SELECT CURRENT_SCHEMA "current schema" FROM DUMMY; current schema SYSTEM CURRENT_USER Syntax CURRENT_USER Description Returns the current user name at the current statement context. This will be user name which is currently at the top of authorization stack. Example -- example showing basic function operation using SYSTEM user SELECT CURRENT_USER "current user" FROM DUMMY; SAP HANA Database - SQL Reference Manual 59 2012-12-19 SELECT CURRENT_USER "current user" FROM DUMMY; current user SYSTEM -- definer-mode procedure declared by USER_A CREATE PROCEDURE USER_A.PROC1 LANGUAGE SQLSCRIPT SQL SECURITY DEFINER AS BEGIN SELECT CURRENT_USER "current user" FROM DUMMY; END; -- USER_B executing USER_A.PROC1 CALL USER_A.PROC1; current user USER_A -- invoker-mode procedure declared by USER_A CREATE PROCEDURE USER_A.PROC2 LANGUAGE SQLSCRIPT SQL SECURITY INVOKER AS BEGIN SELECT CURRENT_USER "current user" FROM DUMMY; END; -- USER_B is executing USER_A.PROC CALL USER_A.PROC2; current user USER_B GROUPING_ID Syntax GROUPING_ID(column_name_list) Description GROUPING_ID function can be used with GROUPING SETS to return multiple levels of aggregations in a single result set. GROUPING_ID returns an integer value to identify which grouping set each row belongs to. Each column in GROUPING_ID must be an element of the GROUPING SETS. GROUPING_ID is assigned by converting the bit vector generated from GROUPING SETS to a decimal number by treating the bit vector as a binary number. When a bit vector is composed, 0 is assigned to each column specified in the GROUPING SETS and 1 otherwise in the order it appears in the GROUPING SETS. By treating the bit vector as a binary number, this function returns an integer value as the output. Example SELECT customer, year, product, SUM(sales), GROUPING_ID(customer, year, product) FROM guided_navi_tab GROUP BY GROUPING 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 SAP HANA Database - SQL Reference Manual 60 2012-12-19 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 IFNULL Syntax IFNULL (expression1, expression2) Description Returns the first not NULL input expression. Returns expression1 if expression1 is not NULL. Returns expression2 if expression1 is NULL. Returns NULL if both input expressions are NULL. Example SELECT IFNULL ('diff', 'same') "ifnull" FROM DUMMY; ifnull diff SELECT IFNULL (NULL, 'same') "ifnull" FROM DUMMY; ifnull same SELECT IFNULL (NULL, NULL) "ifnull" FROM DUMMY; ifnull NULL MAP Syntax MAP (expression, search1, result1 [, search2, result2] ... [, default_result]) Description Searches for an expression within a set of search values and returns the corresponding result. If the expression value is not found and default_result is defined, MAP returns default_result. If the expression value is not found and default_result is not defined, MAP returns NULL. Note: Search values and corresponding results are always provided in search-result pairs. Example SELECT MAP(2, 0, 'Zero', 1, 'One', 2, 'Two', 3, 'Three', 'Default') "map" FROM DUMM Y; map Two SELECT MAP(99, 0, 'Zero', 1, 'One', 2, 'Two', 3, 'Three', 'Default') "map" FROM DUM MY; SAP HANA Database - SQL Reference Manual 61 2012-12-19 map Default SELECT MAP(99, 0, 'Zero', 1, 'One', 2, 'Two', 3, 'Three') "map" FROM DUMMY; map NULL NULLIF Syntax NULLIF (expression1, expression2) Description NULLIF compares the values of two input expressions. If the first expression equals the second expression, NULLIF returns NULL. If expression1 does not equal expression2, NULLIF returns expression1. If expression2 is NULL, NULLIF returns expression1. Example SELECT NULLIF ('diff', 'same') "nullif" FROM DUMMY; nullif diff SELECT NULLIF('same', 'same') "nullif" FROM DUMMY; nullif NULL SESSION_CONTEXT Syntax SESSION_CONTEXT(session_variable) Description Returns the value of session_variable assigned to the current user. The session_variable accessed can either be predefined or user-defined. Predefined session variables that can be set by the client are 'APPLICATION', 'APPLICATIONUSER', and 'TRACEPROFILE'. Session variables can be defined or modified using SET [SESSION] <variable_name> = <value> command, and unset using UNSET [SESSION] <variable_name>. SESSION_CONTEXT returns an NVARCHAR with a maximum length of 512 characters. Example To read session variables use: SELECT SESSION_CONTEXT('APPLICATION') "session context" FROM DUMMY; session context HDBStudio SESSION_USER Syntax SESSION_USER Description SAP HANA Database - SQL Reference Manual 62 2012-12-19 Returns the user name of the current session. Example -- example showing basic function operation using SYSTEM user SELECT SESSION_USER "session user" FROM DUMMY; session user SYSTEM -- definer-mode procedure declared by USER_A CREATE PROCEDURE USER_A.PROC1 LANGUAGE SQLSCRIPT SQL SECURITY DEFINER AS BEGIN SELECT SESSION_USER "session user" FROM DUMMY; END; -- USER_B is executing USER_A.PROC CALL USER_A.PROC1; session user USER_B -- invoker-mode procedure declared by USER_A CREATE PROCEDURE USER_A.PROC2 LANGUAGE SQLSCRIPT SQL SECURITY INVOKER AS BEGIN SELECT SESSION_USER "session user" FROM DUMMY; END; -- USER_B is executing USER_A.PROC CALL USER_A.PROC2; session user USER_B SYSUUID SYSUUID SYSUUID Description Returns a new universally unique identifier, generated by the connected SAP HANA instance. Each call of SYSUUID returns a new UUID value. SYSUUID calls from multiple connections are internally serialized to guarantee unique value generation. Example SELECT SYSUUID FROM DUMMY; SYSUUID 4DE3CD576C79511BE10000000A3C2220 SAP HANA Database - SQL Reference Manual 63 2012-12-19 SQL Statements This chapter describes the SQL statements that are supported by the SAP HANA Database. Data Definition Statements Data Manipulation Statements System Management Statements Session Management Statements Transaction Management Statements Access Control Statements Data Import Export Statements Procedural Statements Data Definition Statements ALTER AUDIT POLICY Syntax ALTER AUDIT POLICY <policy_name> <audit_mode> Syntax Elements <policy_name> ::= <identifier> The name of the audit policy to be altered. <audit_mode> ::= ENABLE | DISABLE The audit mode enables or disables the audit policy. ENABLE Enables the audit policy. DISABLE Disables the audit policy. Description The ALTER AUDIT POLICY statement enables or disables an audit policy. <policy_name> must specify an existing audit policy. Only database users with the system privilege AUDIT ADMIN are allowed to alter an audit policy. Users with this privilege can alter any audit policy, regardless of if they are the creator of the policy. When an audit policy is created, it is created in the disabled state. Therefore the audit policy has to be enabled to make its audit actions take effect. An audit policy can be disabled and enabled as often as required. Configuration Parameters The following configuration parameters for auditing are stored in global.ini, in the section auditing configuration: global_auditing_state ( 'true' / 'false' ) Regardless of the number of enabled audit policies, auditing will only occur if the global_auditing_state configuration parameter is set to true. The default is 'false'. default_audit_trail_type ( 'SYSLOGPROTOCOL' / 'CSVTEXTFILE' ) Specifies how auditing results will be stored. SYSLOGPROTOCOL: uses the system syslog. CSVTEXTFILE: stores audit information as comma-separated values in a text file. SAP HANA Database - SQL Reference Manual 64 2012-12-19 default_audit_trail_path Specifies the file path where the CSVTEXTFILE should be stored. The parameters above can be selected in the M_INIFILE_CONTENTS monitoring view if the user has the required system privileges. The parameters can only be observed in a monitoring view when they have been explicitly defined. System Tables and Monitoring Views AUDIT_POLICY: shows all audit policies and their states. M_INIFILE_CONTENTS: shows the database system configuration parameters. Only users with system privilege CATALOG READ, DATA ADMIN or INIFILE ADMIN can view the content of the M_INIFILE_CONTENTS view. For all other database users this view will be empty. Example For this example you need to first create an audit policy called priv_audit using the following statement: CREATE AUDIT POLICY priv_audit AUDITING SUCCESSFUL GRANT PRIVILEGE, REVOKE PRIVILEG E, GRANT ROLE, REVOKE ROLE LEVEL CRITICAL; Now you can enable this audit policy with: ALTER AUDIT POLICY priv_audit ENABLE; You can also disable the same audit policy with: ALTER AUDIT POLICY priv_audit DISABLE; ALTER FULLTEXT INDEX Syntax ALTER FULLTEXT INDEX <index_name> <alter_fulltext_index_option> Syntax Elements <index_name> ::= <identifier> The identifier of the fulltext index to be altered. <alter_fulltext_index_option> ::= <fulltext_parameter_list> | <queue_command> QUEUE Specifies whether the parameters of the fulltext index or the state of the fulltext index queue should be changed. The latter is only possible for an asynchronous explicit fulltext index. <fulltext_parameter_list> ::= <fulltext_parameter> [{, <fulltext_parameter>} ...] A list of fulltext index parameters that are to be changed. <fulltext_parameter> ::= FUZZY SEARCH INDEX <on_off> | PHRASE INDEX RATIO <index_ratio> Fulltext index parameters. FUZZY SEARCH INDEX <on_off> <on_off> ::= ON | OFF Defines if a fuzzy search index will be used. ON switches on the fuzzy seach index, and OFF turns the fuzzy search index off. PHRASE INDEX RATIO <index_ratio> Specifies the phrase index ratio. SAP HANA Database - SQL Reference Manual 65 2012-12-19 <index_ratio> ::= <exact_numeric_literal> Specifies the percentage of the phrase index ratio, the value used must be between 0.0 and 1.0 <queue_command> ::= FLUSH | SUSPEND | ACTIVATE Specifies an action to be performed on the index queue. FLUSH Updates the fulltext index with the documents in the queue that have already been processed. SUSPEND Suspends the fulltext index processing queue. ACTIVATE Activates the fulltext index processing queue. Description The ALTER FULLTEXT INDEX command either change the parameters of a fulltext index or the state of an index processing queue. The queue is a mechanism used to enable a fulltext index to operate in asynchronous manner, i.e. inserts will not block until a document is processed. Examples You create table T and then add two indices i1 and i2. Index i1 is a synchronous fulltext index, i2 is an asynchronous fulltext index. CREATE COLUMN TABLE T (c1 NVARCHAR(1000), c2 NVARCHAR(1000)); CREATE FULLTEXT INDEX i1 ON T (c1) SYNC; CREATE FULLTEXT INDEX i2 ON T (c2) ASYNC; You alter the phrase index to 30 percent and turn on the fuzzy search index for indexes i1 and i2. ALTER FULLTEXT INDEX i1 PHRASE INDEX RATIO 0.3 FUZZY SEARCH INDEX ON; ALTER FULLTEXT INDEX i2 PHRASE INDEX RATIO 0.3 FUZZY SEARCH INDEX ON; You suspend the queue for fulltext index i2. ALTER FULLTEXT INDEX i2 SUSPEND QUEUE; You update the fulltext index with the documents in the queue that have already been processed. ALTER FULLTEXT INDEX i2 FLUSH QUEUE; ALTER INDEX Syntax ALTER INDEX <index_name> REBUILD Syntax Elements <index_name>::= <identifier> Specifies the name of the index to be rebuilt. Description The ALTER INDEX statement rebuilds an index. Example You create table A and an index i on column b of table A. SAP HANA Database - SQL Reference Manual 66 2012-12-19 CREATE TABLE A (a INT, b NVARCHAR(10), c NVARCHAR(20)); CREATE INDEX i ON A(b); You rebuild index i. ALTER INDEX i REBUILD; ALTER SEQUENCE Syntax ALTER SEQUENCE <sequence_name> [<restart_with>] [<parameter_list>] [RESET BY <reset _by_subquery>] Syntax Elements <sequence_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> The name of the sequence to be altered with optional schema name. <sequence_parameter_restart_with> ::= RESTART WITH <restart_value> The starting value of the sequence. If you do not specify a value for the RESTART WITH clause, the current value of the sequence is used. <restart_value> ::= <unsigned_integer> An integer value between 0 and 4611686018427387903 which will be the first value provided by the sequence generator. <parameter_list> ::= <sequence_parameter>[{, <sequence_parameter>}...] Defines the paramter list. <sequence_parameter>::= INCREMENT BY <increment_value> | MAXVALUE <maximum_value> | NO MAXVALUE | MINVALUE <minimum_value> | NO MINVALUE | CYCLE | NO CYCLE A set of parameters that can be used with ALTER SEQUENCE. For parameter details see below. INCREMENT BY <increment_value> The sequence increment. <increment_value> ::= <signed_integer> An integer value which will be used to increment or decrement the sequence value. MAXVALUE <maximum_value> Defines the maximum value that can be generated by the sequence. <maximum_value> ::= <unsigned_integer> A positive integer which defines the maximum value generated by the sequence. The maximum value must be between 0 and 4611686018427387903. NO MAXVALUE When the NO MAXVALUE directive is used the maximum value for an ascending sequence will be 4611686018427387903 and the maximum value for a descending sequences will be -1. MINVALUE <minimum_value> SAP HANA Database - SQL Reference Manual 67 2012-12-19 Defines the minimum value that can be generated by the sequence. <minimum_value> ::= <unsigned_integer> A positive integer which defines the minimum value generated by the sequence. The minimum value must be between 0 and 4611686018427387903. NO MINVALUE When the NO MINVALUE directive is used, the minimum value for an ascending sequence is 1 and the minimum value for a descending is -4611686018427387903. CYCLE When the CYCLE directive is used the sequence number will be restarted after it reaches its maximum or minimum value. NO CYCLE When the NO CYCLE directive is used the sequence number will not be restarted after it reaches its maximum or minimum value. <reset_by_subquery> ::= <subquery> During a restart of the database, the system automatically executes the RESET BY statement and the sequence value is restarted with the value determined from the RESET BY subquery. For details about subqueries please see Subquery Description The ALTER SEQUENCE statement is used to alter the parameters of a sequence generator. Examples Example 1 You create table A and a sequence seq. Sequence seq, when reset, will start from the value of the select statement shown. CREATE TABLE A (a INT); CREATE SEQUENCE seq RESET BY SELECT IFNULL(MAX(a), 0) + 1 FROM A; You change the starting sequence value of sequence seq to 2. ALTER SEQUENCE seq RESTART WITH 2; You change the maximum value of sequence s to 100, and specify that it does not have a minimum value. ALTER SEQUENCE seq MAXVALUE 100 NO MINVALUE; You change the incremental value of sequence seq to 3, and specify that the sequence will not restart upon reaching its maximum or minimum value. ALTER SEQUENCE seq INCREMENT BY 3 NO CYCLE; Example 2 You create table B, with column a. You create a sequence s1 with a reset-by subquery based on table B. CREATE TABLE B (a INT); CREATE SEQUENCE s1 RESET BY SELECT IFNULL(MAX(a), 0) + 1 FROM B; You change the reset-by subquery of sequence s1 to the maximum value contained in column a of table B. ALTER SEQUENCE s1 RESET BY SELECT MAX(a) FROM B; ALTER TABLE SAP HANA Database - SQL Reference Manual 68 2012-12-19 Syntax ALTER TABLE <table_name> [<add_column_clause>] [<drop_column_clause>] [<alter_colum n_clause>] [<add_constraint_clause>] [<drop_primary_key_clause>][<drop_constraint_clause>] [<pr eload_clause>] [<table_conversion_clause>] [<move_clause>] [<add_range_partition_clause>] [<drop_rang e_partition_clause>] [<partition_clause>] [<persistent_merge_option>] [<delta_log_option>] [<auto_me rge_option>] [<unload_priority>] [<schema_flexibility_option>] Syntax elements: <table_name> <add_column_clause> <drop_column_clause> <alter_column_clause> <add_constraint_clause> <drop_primary_key_clause> <drop_constraint_clause> <preload_clause> <table_conversion_clause> <add_range_partition_clause> <drop_range_partition_clause> <partition_clause> <persistent_merge_option> <delta_log_option> <auto_merge_option> <unload_priority> <schema_flexibility_option> Syntax Elements <table_name> <table_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> The identifier of the table to be altered, with optional schema name. <add_column_clause> <add_column_clause> ::= ADD ( {<column_definition> [<column_constraint>]} [{, <colu mn_definition> [<column_constraint>]}...] ) Adds one or more columns to the specified table. <drop_column_clause> <drop_column_clause> ::= DROP ( <column_name>[{, <column_name>} ...] ) Removes one or more columns from the specified table. <alter_column_clause> <alter_column_clause> ::= ALTER ( <column_definition> [<column_constraint>] [{, <co lumn_definition> [<column_constraint>]}...] ) Alters one or more column definitions. Restrictions: To prevent data loss, only increasing the size of a column data type is allowed. For example, changing from nvarchar(20) to nvarchar(10) or from integer to tinyint will raise an error. ALTER does not currently follow data type conversion rules. Adding NOT NULL constraint to an existing column is allowed if either of the following cases are true: The table is empty. The default value is specified when the table contains data. <column_definition> ::= <column_name> {<data_type> | <lob_data_type>} [<column_stor e_data_type>] [<ddic_data_type>] [DEFAULT <default_value>] SAP HANA Database - SQL Reference Manual 69 2012-12-19 [GENERATED ALWAYS AS <expression>] [<schema_flexibility>] [ <fuzzy_search_index>] [<fuzzy_search_mode>] Defines a table column. <column_name> ::= <identifier> The table column name. <data_type> ::= DATE | TIME | SECONDDATE | TIMESTAMP | TINYINT | SMALLINT | INTEGER | BIGINT | SMALLDECIMAL | DECIMAL | REAL | DOUBLE | VARCHAR | NVARCHAR | ALPHANUM | SHORTTEXT | VARBINA RY | TEXT <lob_data_type> ::= <lob_type_name> [MEMORY THRESHOLD <memory_threshold_value>] <lob_type_name> ::= BLOB | CLOB | NCLOB <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_SECONDDA TE <ddic_data_type> ::= DDIC_ACCP | DDIC_ALNM | DDIC_CHAR | DDIC_CDAY | DDIC_CLNT | DD IC_CUKY | DDIC_CURR | DDIC_D16D | DDIC_D34D | DDIC_D16R | DDIC_D34R | DDIC_D16S | DDIC_D34S | DD IC_DATS | DDIC_DAY | DDIC_DEC | DDIC_FLTP | DDIC_GUID | DDIC_INT1 | DDIC_INT2 | DDIC_INT4 | DD IC_INT8 | DDIC_LANG | DDIC_LCHR | DDIC_MIN | DDIC_MON | DDIC_LRAW | DDIC_NUMC | DDIC_PREC | DD IC_QUAN | DDIC_RAW | DDIC_RSTR | DDIC_SEC | DDIC_SRST | DDIC_SSTR | DDIC_STRG | DDIC_STXT | DD IC_TIMS | DDIC_UNIT | DDIC_UTCM | DDIC_UTCL | DDIC_UTCS | DDIC_TEXT | DDIC_VARC | DDIC_WEEK The available data types. Please see Data Types. <memory_threshold_value> ::= <unsigned_integer> | NULL Controls if LOB data should be stored in memory or not according to the following conditions: If <memory_threshold_value> is not provided, lob is stored in memory by default. If <memory_threshold_value> is provided and its LOB size is bigger than memory threshold value, LOB data is stored on disk. If <memory_threshold_value> is provided and its LOB size is equal or less than memory threshold value, LOB data is stored in memory. If <memory_threshold_value> is NULL, all LOB data is stored in memory. If <memory_threshold_value> is 0, all LOB data is stored in disk. DEFAULT <default_value> ::= NULL | <string_literal> | <signed_numeric_literal> | <u nsigned_numeric_literal> Specifies a value to be assigned to the column if an INSERT statement does not provide a value for the column GENERATED ALWAYS AS <expression> Specifies the expression to generate the column value in runtime. <schema_flexibility> ::= [ENABLE | DISABLE] SCHEMA FLEXIBILITY Specifies the column is dynamic: ENABLE produces a dynamic column. DISABLE (default value) produces a static column. <fuzzy_search_index> ::= FUZZY SEARCH INDEX [ON | OFF] Turns a fuzzy search index on or off. OFF is the default. <fuzzy_search_mode> ::= FUZZY SEARCH MODE [<string_literal> | NULL] Sets the fuzzy search mode with the value of <string_literal>. If NULL is specified, the fuzzy search mode is SAP HANA Database - SQL Reference Manual 70 2012-12-19 reset. <column_constraint> ::= NULL | NOT NULL | <unique_specification> | <references_specification> The column constraint rules. For NULL, NOT NULL and <unique_specification>, see below. For <references_specification>, see References Specification NULL If NULL is specified it is not considered a constraint, it represents that a column that may contain a null value. The default is NULL. NOT NULL The NOT NULL constraint prohibits a column value from being NULL. <unique_specification> ::= UNIQUE [<unique_tree_type_index>] | PRIMARY KEY [<unique_tree_type_index>] Specifies unique constraints. If the index type is omitted, the SAP HANA database chooses the appropriate index by considering the column data type. If the index type is not specified, the SAP HANA database will automatically select an index type as follows: Index type Criteria CPBTREE - character stri ng types. - bi nary stri ng types. - deci mal types. - when the constrai nt i s a composi te key. - when the constrai nt i s a non-uni que constrai nt BTREE Al l other cases than speci fi ed for CPBTREE UNIQUE Specifies a column as a unique key. A composite unique key enables the specification of multiple columns as a unique key. With a unique constraint, multiple rows cannot have the same value in the same column. PRIMARY KEY A primary key constraint is a combination of a NOT NULL constraint and a UNIQUE constraint. It prohibits multiple rows from having the same value in the same column. <unique_tree_type_index> ::= BTREE | CPBTREE; Specifies the index type. BTREE BTREE specifies a B+-tree index. B+-tree is a tree that maintains sorted data which performs efficient insertion, deletion and search of records. CPBTREE CPBTREE specifies a CPB+-tree index. CPB+-tree stands for Compressed Prefix B+-Tree, which is based on pkB- tree. CPB+-tree is a very small index because it uses 'partial key' that is only part of full key in index nodes. CPB+-tree shows better performance than B+-Tree for larger keys. <add_constraint_clause> <add_constraint_clause> ::= ADD [CONSTRAINT <constraint_name>] <table_constraint> <constraint_name> ::= <identifier> SAP HANA Database - SQL Reference Manual 71 2012-12-19 Adds a table constraint. <table_constraint> ::= <unique_constraint_definition> | <referential_constraint_def inition> The table constraint can be either a unique constraint or a referential constraint. <unique_constraint_definition> ::= <unique_specification> (<unique_column_name_list >) The unique specification see Unique specifcation <unique_column_name_list> ::= <unique_column_name>[{, <unique_column_name>}...] Speicfies the unique column name list which can have one or more column names. <unique_column_name> ::= <identifier> A column name identifier. <referential_constraint_definition> ::= FOREIGN KEY (<referencing_column_name_list> ) <references_specification> Specifies a referential constraint. <referencing_column_name_list> ::= <referencing_column_name>[{, <referencing_column _name>}...] Specifies the referencing column name list which can have one or more column names. <referencing_column_name> ::= <identifier> The identifier of a referencing column. <references_specification> ::= REFERENCES <referenced_table> [(<referenced_column_n ame_list>)] [<referential_triggered_action>] Specifies the referenced table, with optional column name list and trigger action. If <referenced_column_name_list> is specified, there will be one-to-one correspondence between <column_name> of <column_definition> (see column definition) and <referenced_column_name>. If it is not specified, there will be one-to-one correspondence between <column_name> of <column_definition> and the column name of the referenced table's primary key. <referenced_column_name_list> ::= <referenced_column_name>[{, <referenced_column_na me>}...] Specifies the referenced column name list, which can have one or more column names. <referenced_table> ::= <identifier> The identifier of a table to be referenced. <referenced_column_name> ::= <identifier> The identifier of the column name to be referenced. <referential_triggered_action> ::= <update_rule> [<delete_rule>] | <delete_rule> [<update_rule>] Specifies an update rule with optional delete rule or a delete rule with optional update rule. The order in which they are provided provides an order of precedence for execution. <update_rule> ::= ON UPDATE <referential_action> <referential_action> ::= CASCADE | RESTRICT | SET DEFAULT | SET NULL The following UPDATE referential actions are possible: SAP HANA Database - SQL Reference Manual 72 2012-12-19 Action Name Update Action RESTRI CT Any updates to a referenced tabl e are prohi bi ted i f there are any matched records i n the referenci ng tabl e. Thi s i s the defaul t acti on. CASCADE I f a record i s updated i n the referenced tabl e, the correspondi ng records i n the referenci ng tabl e are al so updated wi th the same val ues. SET NULL I f a record i s updated i n the referenced tabl e, the correspondi ng records i n the referenci ng tabl e are al so updated wi th nul l val ues. SET DEFAULT I f a record i s updated i n the referenced tabl e, the correspondi ng records i n the referenci ng tabl e are al so updated wi th thei r defaul t val ues <delete_rule> ::= ON DELETE <referential_action> The following DELETE referential actions are possible: Action Name Delete Action RESTRI CT Any del eti ons to a referenced tabl e are prohi bi ted i f there are any matched records i n the referenci ng tabl e. Thi s i s the defaul t acti on. CASCADE I f a record i n the referenced tabl e i s del eted, the correspondi ng records i n the referenci ng tabl e are al so del eted. SET NULL I f a record i n the referenced tabl e i s del eted, the correspondi ng records i n the referenci ng tabl e are set to nul l . SET DEFAULT I f a record i n the referenced tabl e i s del eted, the correspondi ng records i n the referenci ng tabl e are set to thei r defaul t val ues. <drop_primary_key_clause> <drop_primary_key_clause> ::= DROP PRIMARY KEY Drops the primary key constraint. <drop_constraint_clause> <drop_constraint_clause> ::= DROP CONSTRAINT <constraint_name> <constraint_name> ::= <identifier> Drops a unique or referential constraint. <preload_clause> <preload_clause> ::= PRELOAD ALL | PRELOAD ( <column_name> ) | PRELOAD NONE Sets or removes the preload flag of the given tables or columns. When the preload flag is set tables are automatically loaded into memory after an index server start. The current status of the preload flag is visible in the system table TABLES in the PRELOAD column. Possible values are 'FULL', 'PARTIALLY' and 'NO'. Also in system table TABLE_COLUMNS in column PRELOAD with possible values being 'TRUE' or 'FALSE'. PRELOAD ALL Sets preload flags of all columns in the table. PRELOAD ( <column_name> ) Sets the flags of the specified column. PRELOAD NONE Removes the preload flag from all columns. <table_conversion_clause> SAP HANA Database - SQL Reference Manual 73 2012-12-19 <table_conversion_clause> ::= [ALTER TYPE] {ROW [THREADS <number_of_threads>] | COL UMN [THREADS <number_of_threads> [BATCH <batch_size>]]} Converts the table storage from ROW to COLUMN or from COLUMN to ROW. ROW Converts the table to ROW storage. COLUMN Converts the table to COUMN storage. THREADS <number_of_threads> <number_of_threads> ::= <unsigned_integer> Specifies how many parallel execution threads should be used for the table conversion. The optimal value for the number of threads is the number of available CPU cores. If THREADS is not provided the default value of the number of CPU cores specified in the indexserver.ini file will be used. BATCH <batch_size> <batch_size> ::= <unsigned_integer> Specifies the number of rows to be inserted in a batch. If BATCH is not specified the default value of 2,000,000 will be used. Inserts into column tables will be immediately committed after every <batch_size> records have been inserted. BATCH option can be used only when a table is converted from ROW to COLUMN storage. <move_clause> <move_clause> ::= MOVE [PARTITION <partition_number>] TO <indexserver_host_port> [P HYSICAL] | MOVE [PARTITION <partition_number>] PHYSICAL Moves a table to another location in a distributed environment. PARTITION <partition_number> <partition_number> ::= <unsigned_integer> For partitioned tables, specifies the partition to be moved. If you attempt to move a partitioned table without specifying a <partition_number> an error is returned. <indexserver_host_port> ::= <unsigned_integer> The internal indexserver port number where the table is to be moved. PHYSICAL Specifies that a column store tables persistence storage is moved immediately to the target host. If the PHYSICAL option is not specified the table move will create a link inside the new host persistence pointing to the old host persistence. The link will be removed on the next merge or upon execution of another move operation not using the TO <indexserver_host_port> clause. The PHYSICAL keyword is only for column store tables. Row store tables are always moved immediately. <add_range_partition_clause> <add_range_partition_clause> ::= ADD <range_partition_clause> Adds a partition for tables partitioned with RANGE, HASH RANGE, ROUNDROBIN RANGE. <range_partition_clause> ::= {<from_to_spec> | <single_spec>} [, PARTITION OTHERS] The range specifier for a new partition. For syntax details please see partition range specifier below. <drop_range_partition_clause> SAP HANA Database - SQL Reference Manual 74 2012-12-19 <drop_range_partition_clause> ::= DROP <range_partition_clause> Drops a partition for tables partitioned with RANGE, HASH RANGE, ROUNDROBIN RANGE. <partition_clause> <partition_clause> ::= PARTITION BY <hash_partition> [, <range_partition> | , <hash _partition>] | PARTITION BY <range_partition> | PARTITION BY <roundrobin_partition> [,<range_partition>] The PARTITION BY option partitions a table using the selected rules. For more information about partitioning please see the "Table Partitioning in the SAP HANA database" section in the "SAP HANA Administration guide" available from the SAP HANA Appliance page. <hash_partition> ::= HASH (<partition_expression> [{<partition_expression>,}...]) P ARTITIONS {<num_partitions> | GET_NUM_SERVERS()} Partitions the created table using a hash partitioning scheme. <range_partition> ::= RANGE (<partition_expression>) (<range_spec>, ...) Partitions the created table using a range partitioning scheme. <roundrobin_partition> ::= ROUNDROBIN PARTITIONS {<num_partitions> | GET_NUM_SERVER S()} [, <range_partition>] Partitions the created table using a round robin partitioning scheme. GET_NUM_SERVERS() Returns the number of servers available in the partitioning cluster. <range_spec> ::= {<from_to_spec> | <single_spec>} [{{<from_to_spec> | <single_spec> },} ...] [, PARTITION OTHERS] The range specifier for a partition. <from_to_spec> ::= PARTITION <lower_value> <= VALUES < <upper_value> Specifies a partition using lower and upper values of a <partition_expression>. <single_spec> ::= PARTITION VALUE = <target_value> Specifies a partition using a single value of a <partition_expression>. PARTITION OTHERS Specifies that all other values that are not covered by the partition specification will be gathered into one partition. <partition_expression> ::= <column_name> | YEAR(<column_name>) | MONTH(<column_name >) The specifier used to segregate data into partitions. <lower_value> ::= <string_literal> | <numeric_literal> The lower value of a partition specifier. <upper_value> ::= <string_literal> | <numeric_literal> The upper value of a partition specifier. <target_value> ::= <string_literal> | <numeric_literal> The target value of a single partition specifier. <num_partitions> ::= <unsigned_integer> SAP HANA Database - SQL Reference Manual 75 2012-12-19 The number of partitions to be created for the table. <merge_partition_clause> ::= MERGE PARTITIONS Merges all parts of a partitioned table into a non-partitioned table. <persistent_merge_option> <persistent_merge_option> ::= {ENABLE | DISABLE} PERSISTENT MERGE Enables or disables persistent merging. When enabled the merge-manager uses persistent merges for the given table. This is the default behaviour. When disabled the merge-manager uses main-memory merges instead of persistent merges for the given table. <delta_log_option> <delta_log_option> ::= {ENABLE | DISABLE} DELTA LOG Enables or disables delta logging for table. After enabling, you have to perform a savepoint to be certain that all data is persisted. Also you have to perform a data backup, otherwise it will not be possible to recover this data. If logging is disabled, log entries will not be persisted for this table. Changes to this table will only be written to the data store when a savepoint is carried out. This can cause loss of committed transaction should the indexserver terminate. In the case of a termination, you have to truncate this table and insert all data again. Note: You should only use this option during initial load. <auto_merge_option> <auto_merge_option> ::= {ENABLE | DISABLE} AUTOMERGE Enables or disables automatic delta merge on the specified table. <unload_priority> <unload_priority_option> ::= UNLOAD PRIORITY <unload_priority> UNLOAD PRIORITY specifies that priority of table to be unloaded from memory. <unload_priority> ::= <digit> Sets the priority of table to be unloaded from memory. It can be 0 ~ 9, where 0 means not-unloadable and 9 means earliest unload. <schema_flexibility_option> <schema_flexibility_option> ::= {ENABLE | DISABLE} SCHEMA FLEXIBILITY Enables or disables schema flexibility for the specified table. Description The ALTER TABLE statement changes the definition of a table. Examples You create Table t, and then alter default value of column b to 10. CREATE TABLE t (a INT, b INT); ALTER TABLE t ALTER (b INT DEFAULT 10); You alter table t adding a new column c. SAP HANA Database - SQL Reference Manual 76 2012-12-19 ALTER TABLE t ADD (c NVARCHAR(10) DEFAULT 'NCHAR'); You create a primary key constraint, prim_key, on columns a and b of table t. ALTER TABLE t ADD CONSTRAINT prim_key PRIMARY KEY (a, b); You change the table type of table t to COLUMN storage. ALTER TABLE t COLUMN; You set the preload flags of column b and c on table t. ALTER TABLE t PRELOAD (b, c); You partition table t with a RANGE partition, and then add an additional partition. ALTER TABLE t PARTITION BY RANGE (a) (PARTITION VALUE = 1, PARTITION OTHERS); ALTER TABLE t ADD PARTITION 2 <= VALUES < 10; You disable delta logging of table t. ALTER TABLE t DISABLE DELTA LOG; You change the unload priority of table t to 2: ALTER TABLE t UNLOAD PRIORITY 2; You create table R. Then you alter table R adding a unique constraint UK. CREATE TABLE R (A INT PRIMARY KEY, B NVARCHAR(10)); ALTER TABLE R ADD CONSTRAINT UK UNIQUE (B); You drop the unique constraint UK from table R. ALTER TABLE R DROP CONSTRAINT UK; You create table S. You add a referential constraint FK to table S that references column A of table R with delete cascade option. CREATE TABLE S (FA INT, B NVARCHAR(10)); ALTER TABLE S ADD CONSTRAINT FK FOREIGN KEY(FA) REFERENCES R(A) ON DELETE CASCADE; You create table T1 and then turn on the schema flexibility of the table. You test the schema flexibility of table T1 by inserting a new record. A new column F is automatically created and a record is inserted: CREATE COLUMN TABLE T1 (C INT); ALTER TABLE T1 ENABLE SCHEMA FLEXIBILITY; INSERT INTO T1 (C, F) VALUES (1, 'NVAR1'); You create table T2 with a fuzzy search index and fuzzy search mode. You then switch off the fuzzy search index of COL1 and finally reset fuzzy search mode of COL2. CREATE COLUMN TABLE T2 (KEY INT, COL1 VARCHAR(10) FUZZY SEARCH INDEX ON, COL2 NVARC HAR(10) FUZZY SEARCH MODE 'postcode'); ALTER TABLE T2 ALTER (COL1 VARCHAR(10) FUZZY SEARCH INDEX OFF); ALTER TABLE T2 ALTER (COL2 NVARCHAR(10) FUZZY SEARCH MODE NULL); CREATE AUDIT POLICY Syntax CREATE AUDIT POLICY <policy_name> AUDITING <audit_status_clause> <audit_actions> LEVEL <audit_level> Syntax Elements <policy_name> ::= <identifier> SAP HANA Database - SQL Reference Manual 77 2012-12-19 The name of the audit policy to be created. <audit_status_clause> ::= SUCCESSFUL | UNSUCCESSFUL | ALL Defines whether successful, unsuccessful or all executions of the specified audit actions will be audited. <audit_actions> ::= <actions_for_user_clause> | <audit_action_list_clause> | <target_audit_action_list_clause> The audit actions for the audit policy. <user_name> ::= <identifier> The username of the user to be audited by the audit policy. <actions_for_user_clause> ::= ACTIONS FOR <user_name>[{, <user_name>}...] Audits actions for a user or a set of users. <audit_action_list_clause> ::= <audit_action_list> [FOR <user_name>[{, <user_name>} ...] <audit_action_list> ::= <audit_action_name>[{, <audit_action_name>}...] <audit_action_name> ::= GRANT PRIVILEGE | REVOKE PRIVILEGE | GRANT STRUCTURED PRIVILEGE | REVOKE STRUCTURED PRIVI LEGE | GRANT APPLICATION PRIVILEGE | REVOKE APPLICATION PRIV ILEGE | 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 PRIVILE GE | ALTER STRUCTURED PRIVILEGE | CONNECT | SYSTEM CONFIGURATION CHANGE | SET SYSTEM LICENSE | UNSET SYSTEM LICENSE | ALTER USER | REPOSITORY_ACTIVATE | DROP TABLE Audits specific system actions, optionally limited to a user or a set of users. For more information on audit actions see Audit Action Table. <target_audit_action_list> ::= <target_audit_action_list> [FOR <user_name>[{, <user _name>}...] <target_audit_action_list> ::= <target_audit_action_name>[{, <target_audit_action_n ame>}...] ON <object_name>[{, <object_name>}...] <target_audit_action_name> ::= INSERT | UPDATE | DELETE | SELECT | EXECUTE Audits actions on a database object or set of objects. Optionally this auditing can be limited to a user or a set of users. Only objects of type table, view, and procedure can be specified in the <target_audit_action_list>. Synonyms and sequences cannot be selected as objects for audit policies. Furthermore only these <target_audit_action_name>s can be combined with an object. The following table shows an overview of auditable actions on objects. Action Table View Procedure DELETE YES YES --- I NSERT YES YES --- SELECT YES YES --- UPDATE YES YES --- EXECUTE --- --- YES <object_name> ::= <table_name> | <view_name> | <procedure_name> <table_name> ::= [<schema_name>.]<identifier> <view_name> ::= [<schema_name>.]<identifier> <procedure_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> Specifies a database object for the target audit action. SAP HANA Database - SQL Reference Manual 78 2012-12-19 <audit_level> ::= EMERGENCY | ALERT | CRITICAL | WARNING | INFO Assigns an audit policy to an audit level. Possible levels, in decreasing order of importance, are: EMERGENCY. ALERT. CRITICAL. WARNING. INFO. Description The CREATE AUDIT POLICY statement creates a new audit policy. This audit policy can then be enabled and will cause the auditing of the specified audit actions to occur. Only database users having the system privilege AUDIT ADMIN are allowed to create an audit policy. The specified audit policy name must be unique not match the name of an existing audit policy. An audit policy defines which audit actions will be audited. Audit policies need to be enabled for auditing to occur. One audit policy can contain one of the following: non-restricted auditing for n (>=1) users auditing for actions not restricted to objects auditing for actions which are restricted to objects. For the last two alternatives listed, an optional restriction for user(s) is available. For auditing to occur, audit policies have to be created and enabled. Also the configuration parameter global_auditing_state (see below) has to be set to true. Audit Actions The table below contains the available audit actions. Each of the audit actions are in a specific group, audit actions in the same group can be combined into one audit policy. SAP HANA Database - SQL Reference Manual 79 2012-12-19 Audit Action Name Group Number Audit Operation Comment GRANT PRI VI LEGE 1 granti ng of pri vi l eges to users or rol es REVOKE PRI VI LEGE 1 revoki ng of pri vi l eges from users or rol es GRANT STRUCTURED PRI VI LEGE 1 granti ng of structured/anal yti cal pri vi l eges to users or rol es REVOKE STRUCTURED PRI VI LEGE 1 revoki ng of structured/anal yti cal pri vi l eges from users or rol es GRANT APPLI CATI ON PRI VI LEGE 1 granti ng of appl i cati on pri vi l eges to users or rol es REVOKE APPLI CATI ON PRI VI LEGE 1 revoki ng of appl i cati on pri vi l eges from users or rol es GRANT ROLE 1 granti ng of rol es to users or rol es REVOKE ROLE 1 revoki ng of rol es from users or rol es GRANT ANY 1 granti ng of pri vi l eges, structured pri vi l eges or rol es to users or rol es REVOKE ANY 1 revoki ng of pri vi l eges, structured pri vi l eges or rol es from users or rol es CREATE USER 2 creati on of users DROP USER 2 droppi ng of users ALTER USER 2 al teri ng of users CREATE ROLE 2 creati on of rol es DROP ROLE 2 droppi ng of rol es CONNECT 3 creati on of a user connecti on to the database SYSTEM CONFI GURATI ON CHANGE 4 changes to the system confi gurati on (e.g. I NI FI LE) ENABLE AUDI T POLI CY 5 acti vati on of audi t pol i ci es DI SABLE AUDI T POLI CY 5 deacti vati on of audi t pol i ci es CREATE STRUCTURED PRI VI LEGE 6 creati on of structured/anal yti cal pri vi l eges DROP STRUCTURED PRI VI LEGE 6 destructi on of structured/anal yti cal pri vi l ege ALTER STRUCTURED PRI VI LEGE 6 change of structured/anal yti cal pri vi l ege SET SYSTEM LI CENSE 7 i nstal l ati on of a system l i cense UNSET SYSTEM LI CENSE 7 del eti on of l i censes DROP TABLE 7 del eti on of database tabl es REPOSI TORY ACTI VATE 7 acti vati on of reposi tory desi gn ti me objects I NSERT 7 use of i nsert/repl ace/upsert statements on tabl es and vi ews al l ows speci fi cati on of target objects UPDATE 7 use of update/repl ace/upsert statements on tabl es and vi ews al l ows speci fi cati on of target objects DELETE 7 del eti on of rows from tabl es/vi ews and truncati on of tabl es al l ows speci fi cati on of target objects SELECT 7 use of sel ect statements on tabl es and vi ews al l ows speci fi cati on of target objects EXECUTE 7 procedure cal l s al l ows speci fi cati on of target objects ALL 7 al l acti ons above typi cal l y used for speci fi c users Configuration Parameter Currently the configuration parameter for auditing are stored in global.ini configuration file, in the auditing configuration section. global_auditing_state ( 'true' / 'false' ) Activates / deactivates auditing globally, regardless of the enabled state of the audit policies. The default is SAP HANA Database - SQL Reference Manual 80 2012-12-19 false, meaning: no auditing will occur. default_audit_trail_type ( 'SYSLOGPROTOCOL' / 'CSVTEXTFILE' ) Specifies how to store the auditing results. SYSLOGPROTOCOL is the default. CSVTEXTFILE should be used only for testing purposes. default_audit_trail_path Specifies the audit file storage location for the CSVTEXTFILE audit trail type. As for all configuration parameters, these parameters can be selected in view M_INIFILE_CONTENTS, assuming that the current user has the required privileges. Note: These parameters can only be seen if they have been explicitly set. System and Monitoring Views AUDIT_POLICY: shows all audit policies and their states M_INIFILE_CONTENTS: shows the configuration parameter concerning auditing Only database users with system privilege CATALOG READ, DATA ADMIN or INIFILE ADMIN can view information in the M_INIFILE_CONTENTS view. For other database users this view will be empty. Example Your create a new audit policy named priv_audit that will audit successful granting and revoking of privileges and roles. The audit policy has the medium audit level CRITICAL. This policy has to be enabled explicity (see ALTER AUDIT POLICY) to make the auditing of the audit policy occur. CREATE AUDIT POLICY priv_audit AUDITING SUCCESSFUL GRANT PRIVILEGE, REVOKE PRIVILEG E, GRANT ROLE, REVOKE ROLE LEVEL CRITICAL; You create a new audit policy named object_audit that will audit the inserts into the existing table MY_SCHEMA.MY_TABLE. This policy has to be enabled explicity (see ALTER AUDIT POLICY) to make the auditing of the audit policy occur. This policy is restricted to user FRED and uses the audit level INFO. CREATE USER FRED PASSWORD Initial_1; CREATE SCHEMA MY_SCHEMA OWNED BY system; CREATE TABLE MY_SCHEMA.MY_TABLE (first_col int); GRANT INSERT ON MY_SCHEMA.MY_TABLE to FRED; CREATE AUDIT POLICY OBJECT_AUDIT AUDITING SUCCESSFUL INSERT ON MY_SCHEMA.MY_TABLE F OR FRED LEVEL INFO CREATE FULLTEXT INDEX Syntax CREATE FULLTEXT INDEX <index_name> ON <tableref> '(' <column_name> ')' [<fulltext_p arameter_list>] Syntax <index_name> ::= <string_literal> Specifies the name of the fulltext index. <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> SAP HANA Database - SQL Reference Manual 81 2012-12-19 <on_off> ::= ON | OFF LANGUAGE COLUMN Column where the language of a document is specified. LANGUAGE DETECTION Set of languages to be considered for language detection. MIME TYPE COLUMN Column where the mime-type of a document is specified. FUZZY SEARCH INDEX Specifies whether the fuzzy search index should be used. PHRASE INDEX RATIO Specifies the percentage of the phrase index. Value must be between 0.0 and 1.0 CONFIGURATION Path to a custom configuration file for text analysis. SEARCH ONLY If set to ON the original document content is not stored. FAST PREPROCESS If set to ON, fast preprocessing is used, i.e. linguistic searches are not possible. <change_tracking_elem> ::= SYNC[HRONOUS] | ASYNC[HRONOUS] [FLUSH [QUEUE] <flush_queue_elem>] SYNC If specified a synchronous fulltext index is created. ASYNC If specified an asynchronous fulltext index is created. <flush_queue_elem> ::= EVERY <integer_literal> MINUTES | AFTER <integer_literal> DOCUMENTS | EVERY <integer_literal> MINUTES OR AFTER <int eger_literal> DOCUMENTS Specifies when to update the fulltext index if an asynchronous index is used. Description The CREATE FULLTEXT INDEX statement creates an explicit fulltext index on the given table column. Example You create table A. CREATE COLUMN TABLE A (A VARCHAR(10) PRIMARY KEY, B VARCHAR(10)); You create synchronous fulltext index named 'i'. Index i is on column 'A' of table 'A', where the fuzzy search index is not used and the set of languages for language detection consists of 'EN','DE' and 'KR'. CREATE FULLTEXT INDEX i ON A(A) FUZZY SEARCH INDEX OFF SYNC LANGUAGE DETECTION ('EN','DE','KR') CREATE INDEX Syntax CREATE [UNIQUE] [BTREE | CPBTREE] INDEX <index_name> ON <table_name> (<column_name_ order>, ...) [ASC | DESC] Syntax Elements <index_name> ::= [<schema_name>.]<identifier> <column_name_order> ::= <column_name> [ASC | DESC] SAP HANA Database - SQL Reference Manual 82 2012-12-19 UNIQUE Used to create unique indexes. Check for duplicates will occur when an index is created and when a record is added to the table. BTREE | CPBTREE Used to select the kind of index to use. BTREE keyword has to be used in order to use B+-tree index and the CPBTREE keyword has to be used for the CPB+-tree index. B+-tree is a tree which maintains sorted data that performs efficient insertion, deletion and search of records. CPB+-tree stands for Compressed Prefix B+-Tree, which is based on pkB-tree. CPB+-tree is a very small index because it uses 'partial key' that is only part of full key in index nodes. CPB+-tree shows better performance than B+-Tree for larger keys. When column data types are character string types, binary string types, decimal types, or when the constraint is a composite key, or a non-unique constraint, the default index type is CPBTREE; otherwise, BTREE is used. If neither BTREE nor CPBTREE keyword is specified, then SAP HANA database chooses the appropriate index type. ASC | DESC Specifies whether the index should be created in ascending or descending order. These keywords can be only used in the btree index, and can be specified only once for each column. Description The CREATE INDEX statement creates an index. Example Table t is created, then CPBTREE index idx is created on column b of table t with ascending order: CREATE TABLE t (a INT, b NVARCHAR(10), c NVARCHAR(20)); CREATE INDEX idx ON t(b); CPBTREE index idx1 is created on column a of table t with ascending order and column b with desceding order: CREATE CPBTREE INDEX idx1 ON t(a, b DESC); CPBTREE index idx2 is created on column a and c of table t with desceding order: CREATE INDEX idx2 ON t(a, c) DESC; UNIQUE CPBTREE index idx3 is created on column b and c of table t with ascending order: CREATE UNIQUE INDEX idx3 ON t(b, c); UNIQUE BTREE index idx4 is created on column a of table t with ascending order: CREATE UNIQUE INDEX idx4 ON t(a); CREATE SCHEMA Syntax CREATE SCHEMA <schema_name> [OWNED BY <user_name>] Syntax Elements <schema_name> ::= <identifier> <user_name> ::= <simple_identifier> OWNED BY Specifies the name of the schema owner. If omitted, the current user will be the owner of the schema. Description The CREATE SCHEMA statement creates a schema in the current database. SAP HANA Database - SQL Reference Manual 83 2012-12-19 The CREATE SCHEMA statement creates a schema in the current database. Example CREATE SCHEMA my_schema OWNED BY system; CREATE SEQUENCE Syntax CREATE SEQUENCE <sequence_name> [<common_sequence_parameter_list>] [RESET BY <subqu ery>] Syntax Elements <sequence_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> <common_sequence_parameter_list> ::= <common_sequence_parameter>, ... <common_sequence_parameter> ::= <sequence_parameter_start_with> | <basic_sequence_parameter> <basic_sequence_parameter> ::= INCREMENT BY n | MAXVALUE n | NO MAXVALUE | MINVALUE n | NO MINVALUE | CYCLE | NO CYCLE <sequence_parameter_start_with> ::= START WITH n INCREMENT BY Defines the amount the next sequence value is incremented from the last value assigned. The default is 1. Specify a negative value to generate a descending sequence. An error is returned if the INCREMENT BY value is 0 START WITH Defines the starting sequence value. If you do not specify a value for the START WITH clause, MINVALUE is used for ascending sequences and MAXVALUE is used for descending sequences. MAXVALUE Defines the largest value generated by the sequence and must be between 0 and 4611686018427387903. NO MAXVALUE When MAXVALUE is not specified, the maximum value for an ascending sequence is 4611686018427387903 and the maximum value for a descending sequences is -1. MINVALUE The minimum value of a sequence can be specified after MINVALUE and is between 0 and 4611686018427387903. NO MINVALUE When MINVALUE is not specified, the minimum value for an ascending sequence is 1 and the minimum value for a descending is -4611686018427387903. CYCLE The sequence number will be reused after it reaches its maximum or minimum value. NO CYCLE Default option. The sequence number will not be reused after it reaches its maximum or minimum value. RESET BY During the restart of the database, database automatically executes the RESET BY statement and the sequence value is restarted with the specified value from the statement after RESET BY. If RESET BY is not specified, the sequence value is stored persistently in database. During the restart of the database, the next value of the sequence is generated from the saved sequence value. Description The CREATE SEQUENCE statement is used to create a sequence. A sequence is used to generate unique integers by multiple users. CURRVAL is used to get the current value of the sequence and NEXTVAL is used to get the next value of the sequence. CURRVAL is only valid after calling NEXTVAL in a session. SAP HANA Database - SQL Reference Manual 84 2012-12-19 Example Example 1: Sequence seq is created, then CURRVAL and NEXTVAL are used to get the values from the sequence: CREATE SEQUENCE seq START WITH 11; NEXTVAL returns 11: SELECT seq.NEXTVAL FROM DUMMY; CURRVAL returns 11: SELECT seq.CURRVAL FROM DUMMY; Example 2: If the sequence s is used to create a unique key on column A in the table R, then after a database is restarted, a UNIQUE key value can be created by automatically assigning the maximum value of column A to the sequence value using a RESET BY statement as follows: CREATE TABLE r (a INT); CREATE SEQUENCE s RESET BY SELECT IFNULL(MAX(a), 0) + 1 FROM r; SELECT s.NEXTVAL FROM DUMMY; CREATE SYNONYM Syntax CREATE [PUBLIC] SYNONYM <synonym_name> FOR <object_name> Syntax Elements <synonym_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> The name of the synonym to be created, with optional schema name. <object_name> ::= <table_name> | <view_name> | <procedure_name> | <sequence_name> <table_name> ::= [<schema_name>.]<identifier> <view_name> ::= [<schema_name>.]<identifier> <sequence_name> ::= [<schema_name>.]<identifier> <procedure_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> Description The CREATE SYNONYM creates an alternate name for a table, view, procedure or sequence. You can use a synonym to re-point functions and stored procedures to differing tables, views or sequences without needing to re-write the function or stored procedure. The optional PUBLIC element allows for the creation of a public synonym. A public synonym can be accessed by any users, but the users that have proper privilege on its base object can access the base object. Example You create table A. CREATE TABLE A (A INT PRIMARY KEY, B INT); You create a synonym for table A, a_synonym. CREATE SYNONYM a_synonym FOR A; SAP HANA Database - SQL Reference Manual 85 2012-12-19 CREATE TABLE Syntax CREATE [<table_type>] TABLE <table_name> <table_contents_source> [<logging_option>] [<auto_merge_option>] [<unload_priority_clause>] [<schema_flexibility_option>] [<partition_clause> ] [<location_clause>] Syntax elements: <table_type> <table_contents_source> <logging_option> <auto_merge_option> <unload_priority_clause> <schema_flexibility_option> <partition_clause> <location_clause> Syntax Elements <table_type> <table_type> ::= COLUMN | ROW | HISTORY COLUMN | GLOBAL TEMPORARY | LOCAL TEMPORARY Defines the type of table storage organization. The default value is ROW. ROW, COLUMN If the majority of table access will be through a large number of tuples, with only a few selected attributes, COLUMN-based storage should be used. If the majority of table access involves selecting a few records, with all attributes selected, ROW-based storage is preferable. The SAP HANA database uses a combination of table types to enable storage and interpretation in both ROW and COLUMN forms. HISTORY COLUMN Creates a table with a particular transaction session type called 'HISTORY'. Tables with session type HISTORY support time travel queries. Time travel queries are queries against historical states of the database. For more information on utilizing history time travel please see: HISTORY time travel GLOBAL TEMPORARY Table definition is globally available while data is visible only to the current session. The table is truncated at the end of the session. Metadata in a global temporary table is persistent meaning the metadata exists until the table is dropped and the metadata is shared across sessions. Data in a global temporary table is session-specific meaning only the owner session of the global temporary table is allowed to insert/read/truncate the data, exists for the duration of the session and data from the global temporary table is automatically dropped when the session is terminated. Global temporary table can be dropped only when the table does not have any record in it. Supported operations on Global Temporary Table: 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 SAP HANA Database - SQL Reference Manual 86 2012-12-19 LOCAL TEMPORARY The table definition and data is visible only to the current session. The table is truncated at the end of the session. Metadata exists for the duration of the session and is session-specific meaning only the owner session of the local temporary table is allowed to see. Data in a local temporary table is session-specific meaning only the owner session of the local temporary table is allowed to insert/read/truncate the data, exists for the duration of the session and data from the local temporary table is automatically dropped when the session is terminated. Supported operations on Local Temporary Table: 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_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> For descriptions on schema name and identifier, please refer to Identifiers. <table_contents_source> <table_contents_source> ::= (<table_element>, ...) | <like_table_clause> | [(<column_name>, ...)] <as_table_subquery> You can create a table in the following ways: Describing the table elements, see below. Basing the new table like an existing table, see CREATE TABLE LIKE. From the result of a subquery, see CREATE TABLE AS <subquery>. <table_element> ::= <column_definition> [<column_constraint>] | <table_constraint> Defines a table column with associated column or table constraint. For column constraint please see column constraint. For table constraint please see table constraint. <column_definition> ::= <column_name> {<data_type> | <lob_data_type>} [<column_stor e_data_type>] [<ddic_data_type>] [DEFAULT <default_value>] [GENERATED ALWAYS AS <expression>] [<schema_flexibility>] [ <fuzzy_search_index>] [<fuzzy_search_mode>] Defines a table column. <column_name> ::= <identifier> The table column name. <data_type> ::= DATE | TIME | SECONDDATE | TIMESTAMP | TINYINT | SMALLINT | INTEGER | BIGINT | SMALLDECIMAL | DECIMAL | REAL | DOUBLE | VARCHAR | NVARCHAR | ALPHANUM | SHORTTEXT | VARBINA RY | TEXT <lob_data_type> ::= <lob_type_name> [MEMORY THRESHOLD <memory_threshold_value>] <lob_type_name> ::= BLOB | CLOB | NCLOB <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_SECONDDA TE <ddic_data_type> ::= DDIC_ACCP | DDIC_ALNM | DDIC_CHAR | DDIC_CDAY | DDIC_CLNT | DD SAP HANA Database - SQL Reference Manual 87 2012-12-19 IC_CUKY | DDIC_CURR | DDIC_D16D | DDIC_D34D | DDIC_D16R | DDIC_D34R | DDIC_D16S | DDIC_D34S | DD IC_DATS | DDIC_DAY | DDIC_DEC | DDIC_FLTP | DDIC_GUID | DDIC_INT1 | DDIC_INT2 | DDIC_INT4 | DD IC_INT8 | DDIC_LANG | DDIC_LCHR | DDIC_MIN | DDIC_MON | DDIC_LRAW | DDIC_NUMC | DDIC_PREC | DD IC_QUAN | DDIC_RAW | DDIC_RSTR | DDIC_SEC | DDIC_SRST | DDIC_SSTR | DDIC_STRG | DDIC_STXT | DD IC_TIMS | DDIC_UNIT | DDIC_UTCM | DDIC_UTCL | DDIC_UTCS | DDIC_TEXT | DDIC_VARC | DDIC_WEEK The available data types. Please see Data Types. <memory_threshold_value> ::= <unsigned_integer> | NULL Controls if LOB data should be stored in memory or not according to the following conditions: If <memory_threshold_value> is not provided, lob is stored in memory by default. If <memory_threshold_value> is provided and its LOB size is bigger than memory threshold value, LOB data is stored on disk. If <memory_threshold_value> is provided and its LOB size is equal or less than memory threshold value, LOB data is stored in memory. If <memory_threshold_value> is NULL, all LOB data is stored in memory. If <memory_threshold_value> is 0, all LOB data is stored in disk. DEFAULT <default_value> ::= NULL | <string_literal> | <signed_numeric_literal> | <u nsigned_numeric_literal> Specifies a value to be assigned to the column if an INSERT statement does not provide a value for the column. GENERATED ALWAYS AS <expression> Specifies the expression to generate the column value in runtime. LOB DATA TYPE in column definition Avaliable lob data types are BLOB, CLOB and NCLOB. If MEMORY THRESHOLD option is not given, lob is stored in memory as default. If MEMORY THRESHOLD is given and its LOB size is bigger than memory threshold value, LOB data is stored in disk. If MEMORY THRESHOLD is given and its LOB size is equal or less than memory threshold value, LOB data is stored in memory. If memory threshold is NULL, all LOB data is stored in memory. If memory threshold is 0, all LOB data is stored in disk. <schema_flexibility> ::= {ENABLE | DISABLE} SCHEMA FLEXIBILITY Specifies the column is dynamic: ENABLE produces a dynamic column. DISABLE (default value) produces a static column. <fuzzy_search_index> ::= FUZZY SEARCH INDEX {ON | OFF} Turns a fuzzy search index on or off. OFF is the default. <fuzzy_search_mode> ::= FUZZY SEARCH MODE [<string_literal> | NULL] Sets the fuzzy search mode with the value of <string_literal>. If NULL is specified, the fuzzy search mode is reset. <column_constraint> ::= NULL | NOT NULL | <unique_specification> | <references_specification> The column constraint rules. For NULL, NOT NULL and <unique_specification>, see below. For <references_specification>, see References Specification NULL If NULL is specified it is not considered a constraint, it represents that a column that may contain a null value. SAP HANA Database - SQL Reference Manual 88 2012-12-19 The default is NULL. NOT NULL The NOT NULL constraint prohibits a column value from being NULL. <unique_specification> ::= UNIQUE [<unique_tree_type_index>] | PRIMARY KEY [<unique_tree_type_index>] Specifies unique constraints. If the index type is omitted, the SAP HANA database chooses the appropriate index by considering the column data type. If the index type is not specified, the SAP HANA database will automatically select an index type as follows: Index type Criteria CPBTREE - character stri ng types. - bi nary stri ng types. - deci mal types. - when the constrai nt i s a composi te key. - when the constrai nt i s a non-uni que constrai nt BTREE Al l other cases than speci fi ed for CPBTREE UNIQUE Specifies a column as a unique key. A composite unique key enables the specification of multiple columns as a unique key. With a unique constraint, multiple rows cannot have the same value in the same column. PRIMARY KEY A primary key constraint is a combination of a NOT NULL constraint and a UNIQUE constraint. It prohibits multiple rows from having the same value in the same column. <unique_tree_type_index> ::= BTREE | CPBTREE; Specifies the index type. BTREE BTREE specifies a B+-tree index. B+-tree is a tree that maintains sorted data which performs efficient insertion, deletion and search of records. CPBTREE CPBTREE specifies a CPB+-tree index. CPB+-tree stands for Compressed Prefix B+-Tree, which is based on pkB- tree. CPB+-tree is a very small index because it uses 'partial key' that is only part of full key in index nodes. CPB+-tree shows better performance than B+-Tree for larger keys. <table_constraint> ::= <unique_constraint_definition> | <referential_constraint_def inition> The table constraint can be either a unique constraint or a referential constraint. <unique_constraint_definition> ::= <unique_specification> (<unique_column_name_list >) The unique specification see Unique specifcation <unique_column_name_list> ::= <unique_column_name>[{, <unique_column_name>}...] Speicfies the unique column name list which can have one or more column names. <unique_column_name> ::= <identifier> A column name identifier. <referential_constraint_definition> ::= FOREIGN KEY (<referencing_column_name_list> ) <references_specification> Specifies a referential constraint. SAP HANA Database - SQL Reference Manual 89 2012-12-19 Specifies a referential constraint. <referencing_column_name_list> ::= <referencing_column_name>[{, <referencing_column _name>}...] Specifies the referencing column name list which can have one or more column names. <referencing_column_name> ::= <identifier> The identifier of a referencing column. <references_specification> ::= REFERENCES <referenced_table> [(<referenced_column_n ame_list>)] [<referential_triggered_action>] Specifies the referenced table, with optional column name list and trigger action. If <referenced_column_name_list> is specified, there will be one-to-one correspondence between <column_name> of <column_definition> (see column defintion) and <referenced_column_name>. If it is not specified, there will be one-to-one correspondence between <column_name> of <column_definition> and the column name of the referenced table's primary key. <referenced_column_name_list> ::= <referenced_column_name>[{, <referenced_column_na me>}...] Specifies the referenced column name list, which can have one or more column names. <referenced_table> ::= <identifier> The indentifier of a table to be referenced. <referenced_column_name> ::= <identifier> The identifier of the column name to be referenced. <referential_triggered_action> ::= <update_rule> [<delete_rule>] | <delete_rule> [<update_rule>] Specifies an update rule with optional delete rule or a delete rule with optional update rule. The order in which they are provided provides an order of precedence for execution. <update_rule> ::= ON UPDATE <referential_action> <referential_action> ::= CASCADE | RESTRICT | SET DEFAULT | SET NULL The following UPDATE referential actions are possible: Action Name Update Action RESTRI CT Any updates to a referenced tabl e are prohi bi ted i f there are any matched records i n the referenci ng tabl e. Thi s i s the defaul t acti on. CASCADE I f a record i s updated i n the referenced tabl e, the correspondi ng records i n the referenci ng tabl e are al so updated wi th the same val ues. SET NULL I f a record i s updated i n the referenced tabl e, the correspondi ng records i n the referenci ng tabl e are al so updated wi th nul l val ues. SET DEFAULT I f a record i s updated i n the referenced tabl e, the correspondi ng records i n the referenci ng tabl e are al so updated wi th thei r defaul t val ues <delete_rule> ::= ON DELETE <referential_action> The following DELETE referential actions are possible: SAP HANA Database - SQL Reference Manual 90 2012-12-19 Action Name Delete Action RESTRI CT Any del eti ons to a referenced tabl e are prohi bi ted i f there are any matched records i n the referenci ng tabl e. Thi s i s the defaul t acti on. CASCADE I f a record i n the referenced tabl e i s del eted, the correspondi ng records i n the referenci ng tabl e are al so del eted. SET NULL I f a record i n the referenced tabl e i s del eted, the correspondi ng records i n the referenci ng tabl e are set to nul l . SET DEFAULT I f a record i n the referenced tabl e i s del eted, the correspondi ng records i n the referenci ng tabl e are set to thei r defaul t val ues. <like_table_clause> ::= LIKE <like_table_name> [WITH [NO] DATA] [<like_without_opti on>] Creates a table that has the same definition as like_table_name, unless corresponding property or WITHOUT option is specified. All the column definitions with constraints, default values and other properties such as generated column, schema flexibility, etc are copied from the table <like_table_name>. All table constraints, indexes, fulltext indexes and table location are also copied. <like_table_name> ::= <table_name> <table_name> ::= <identifier> The identifier of the table that will be duplicated. WITH [NO] DATA The WITH DATA option specifies that data is copied from the <like_table_name> table. The default value of WITH NO DATA does not copy the table data. <like_without_option> ::= WITHOUT AUTO MERGE | WITHOUT HISTORY | WITHOUT NO LOGGING | WITHOUT PARTITION | WITHOUT SCHEMA FLEXIBILITY | WITHOUT UNLOAD | WITHOUT PRELOAD | WITHOUT UNLOAD PRIORIT Y | WITHOUT INDEX | WITHOUT FUZZY SEARCH INDEX | WITHOUT FUZZY SEARCH MODE Specifies which properties will not be copied from the <like_table_name> table. For example when WITHOUT PARTITION is specified, the table will not be partitioned. <as_table_subquery> ::= AS (<subquery>) [WITH [NO] DATA] Creates a table and fills it with the data computed by the <subquery> (See sql_subquery). Only NOT NULL constraints are copied by this clause. If column_names are specified, specified column_names override the column names from <subquery>. WITH [NO] DATA The WITH DATA option specifies that data is copied from <subquery>. The default is WITH DATA. WITH NO DATA option does not copy the data from <subquery>. <logging_option> <logging_option> ::= LOGGING | NO LOGGING [RETENTION <retention_period>] Specifies logging options for the created table. LOGGING Specifies that table logging is activated. This is the default logging option. NO LOGGING Specifies that logging is deactivated. A NO LOGGING table means that the definition of the table is persistent SAP HANA Database - SQL Reference Manual 91 2012-12-19 and globally available, data is temporary and global. RETENTION <retention_period> <retention_period> ::= <unsigned_integer> Specifies the retention time in seconds of the column table created by NO LOGGING. After the specified retention period has elapsed, the table will be dropped if used physical memory of the host is above 80%. <auto_merge_option> <auto_merge_option> ::= [NO] AUTO MERGE AUTO MERGE (default value) specifies that automatic delta merge is triggered. NO AUTO MERGE disables automatic delta merging. <unload_priority_clause> <unload_priority_clause> ::= UNLOAD PRIORITY <unload_priority> UNLOAD PRIORITY specifies that priority of table to be unloaded from memory. <unload_priority> ::= <digit> <unload_priority> can be 0 ~ 9, where 0 means not-unloadable and 9 means earliest unload. <schema_flexibility_option> <schema_flexibility_option> ::= WITH SCHEMA FLEXIBILITY Specifies that the table schema is flexible. <partition_clause> <partition_clause> ::= PARTITION BY <hash_partition> [, <range_partition> | , <hash _partition>] | PARTITION BY <range_partition> | PARTITION BY <roundrobin_partition> [,<range_partition>] The PARTITION BY option partitions a table using the selected rules. For more information about partitioning please see the "Table Partitioning in the SAP HANA database" section in the "SAP HANA Administration guide" available from the SAP HANA Appliance page. <hash_partition> ::= HASH (<partition_expression> [{<partition_expression>,}...]) P ARTITIONS {<num_partitions> | GET_NUM_SERVERS()} Partitions the created table using a hash partitioning scheme. <range_partition> ::= RANGE (<partition_expression>) (<range_spec>, ...) Partitions the created table using a range partitioning scheme. <roundrobin_partition> ::= ROUNDROBIN PARTITIONS {<num_partitions> | GET_NUM_SERVER S()} [, <range_partition>] Partitions the created table using a round robin partitioning scheme. GET_NUM_SERVERS() Returns the number of servers available in the partitioning cluster. <range_spec> ::= {<from_to_spec> | <single_spec>} [{{<from_to_spec> | <single_spec> },} ...] [, PARTITION OTHERS] The range specifier for a partition. <from_to_spec> ::= PARTITION <lower_value> <= VALUES < <upper_value> Specifies a partition using lower and upper values of a <partition_expression>. SAP HANA Database - SQL Reference Manual 92 2012-12-19 <single_spec> ::= PARTITION VALUE = <target_value> Specifies a partition using a single value of a <partition_expression>. PARTITION OTHERS Specifies that all other values that are not covered by the partition specification will be gathered into one partition. <partition_expression> ::= <column_name> | YEAR(<column_name>) | MONTH(<column_name >) The specifier used to segregate data into partitions. <lower_value> ::= <string_literal> | <numeric_literal> The lower value of a partition specifier. <upper_value> ::= <string_literal> | <numeric_literal> The upper value of a partition specifier. <target_value> ::= <string_literal> | <numeric_literal> The target value of a single partition specifier. <num_partitions> ::= <unsigned_integer> The number of partitions to be created for the table. <location_clause> <location_clause> ::= AT [LOCATION] {'<host>:<port>' | ('<host>:<port>', ...)} <host> ::= <string_literal> <port> ::= <unsigned_integer> It is possible to determine the index servers on which the partitions are created. If you specify the LOCATION, the partitions will be created on these instances using round robin scheme. Duplicates in the list will be removed. If you specify exactly the same number of instances as partitions in the partition specification, then each partition will be assigned to the respective instance in the list. All index servers in the list have to belong to the same instance. If no locations are specified, the partitions will be created randomly. If the number of partitions matches the number of servers - for example by using GET_NUM_SERVERS() - it is ensured that multiple CREATE TABLE calls will be distributed across all servers evenly. In case of a multi-level partitioning, this applies for the number of partitions of the first level. This mechanism is useful if several tables are to be created which have a semantic relationship to each other. A table can be created in the specified location with <host>:<port>. <location_clause> can be specified when creating partitioned tables that are distributed on multiple instances. When <location_clause> is provided without <partition_clause>, the table is created on the first location specified. If location information is not provided, the table will be automatically assigned to one node. This option can be used for both row store and column store tables in a distributed environment. Description The CREATE TABLE statement creates a table. Tables are created without data except when <as_table_subquery> or <like_table_clause> is used along with the WITH DATA option. Examples You create Table A that has INTEGER-type column A and B. Column A has a primary key constraint. CREATE TABLE A (A INT PRIMARY KEY, B INT); You create a partitioned table P1 that has DATE-type column U. Column U has a primary key constraint and is used as RANGE-partitioning column. CREATE COLUMN TABLE P1 (U DATE PRIMARY KEY) PARTITION BY RANGE (U) (PARTITION '2010 SAP HANA Database - SQL Reference Manual 93 2012-12-19 -02-03' <= VALUES < '2011-01-01', PARTITION VALUE = '2011-05-01'); You create a partitioned table P2 that has INTEGER-type column I, J and K. Column I and J make the primary key constraint and are used as HASH-partitioning column. Column K is used as a sub HASH-partitioning column. CREATE COLUMN TABLE P2 (I INT, J INT, K INT, PRIMARY KEY(I, J)) PARTITION BY HASH ( I, J) PARTITIONS 2, HASH (K) PARTITIONS 2; You create table C1 that has the same definition as table A. Table C1 also has the same records as table A. CREATE COLUMN TABLE C1 LIKE A WITH DATA; You create table H1 that has the same definition as table H. Table H1 also has the same records as table H. You create a column table H2 from the definition of table H without history property and without any records. CREATE HISTORY COLUMN TABLE H (A INT); CREATE TABLE H1 LIKE H WITH DATA; CREATE TABLE H2 LIKE H WITH NO DATA WITHOUT HISTORY; You create table C2 that has the same column data type and NOT NULL constraint as table A without any data. CREATE TABLE C2 AS (SELECT * FROM A) WITH NO DATA; You create table F that has a foreign key that references column A of table R with update cascade option. CREATE TABLE R (A INT PRIMARY KEY, B NVARCHAR(10)); CREATE TABLE F (FK INT, B NVARCHAR(10), FOREIGN KEY(FK) REFERENCES R ON UPDATE CASC ADE); You create a flexible table T. CREATE COLUMN TABLE T(A INT) WITH SCHEMA FLEXIBILITY; You create table T2 with fuzzy search index and a fuzzy search mode. CREATE COLUMN TABLE T2 (KEY INT, COL1 VARCHAR(10) FUZZY SEARCH INDEX ON, COL2 NVARC HAR(10) FUZZY SEARCH MODE 'POSTCODE'); HISTORY time travel You can utlitize the HISTORY COLUMN table type time travel feature in the following ways: Session level time travel A database session can be set back to a certain point-in-time. The input parameter of the statement is either a utc-timestamp or a commitid. SET HISTORY SESSION TO UTCTIMESTAMP = <timestamp> <timestamp> ::= <string_literal> or SET HISTORY SESSION TO COMMIT ID = <commit_id> <commit_id> ::= <unsigned_integer> The timestamp has to be in format 'YYYY-MM-DD HH:MM:SS[.FF7]'. The COMMIT ID variant of the statement takes a commitid as a parameter. The value of the commitid parameter must occur in COMMIT_ID column of the system table SYS.TRANSACTION_HISTORY, otherwise an exception will be thrown. The COMMIT ID is useful when using user defined snapshots. A user defined snapshot can be taken by simply storing the commitid which is assigned to a transaction during the commit phase. The commitid can be retrieved by executing the following query directly after a transaction commit: SELECT LAST_COMMIT_ID FROM M_TRANSACTIONS; WHERE CONNECTION_ID = CURRENT_CONNECTION; The TIMESTAMP-variant of the statement takes a timestamp as parameter. Internally, the timestamp is used to look up a (commit_time,commit_id)-pair inside the system-table SYS.TRANSACTION_HISTORY where SAP HANA Database - SQL Reference Manual 94 2012-12-19 the commit_time is close to the given timestamp (to be more precisely: choose pair where maximal COMMIT_TIME is smaller or equal to the given timestamp; if no such pair is found an exception will be raised). The session then will be restored with the determined commit-id as in the COMMIT ID variant. To terminate a restored session to switch back to the current session, an explicit COMMIT or ROLLBACK has to be executed on the DB connection. Statement level time travel <subquery> AS OF UTCTIMESTAMP <timestamp> <subquery> AS OF COMMIT ID <commit_id> In order to be able to relate the commitid with the commit time, a system table SYS.TRANSACTION_HISTORY is maintained which stores additional information for each transaction which commits data for history table. For detailed information on setting session-level timetravel, please refer to SET HISTORY SESSION, and for details on <subquery>, please refer to Subquery. Note: Autocommit has to be turned off when a session should be restored (otherwise an exception will be thrown with an appropriate error message) Non-history tables in restored sessions always show their current snapshot Only data query statement (select) is allowed inside restored sessions. A history table must have a primary key The session type can be checked from the column, SESSION_TYPE of the system table SYS.TABLES. CREATE TRIGGER Syntax 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 Syntax Elements <trigger_name> ::= <identifier> The name of trigger you create. <subject_table_name> ::= <identifier> The name of table your trigger is defined on. For descriptions on identifier, see Identifiers. <trigger_action_time> ::= BEFORE | AFTER Specify when trigger acction occur. BEFORE Trigger is executed before the subject table operation. AFTER Trigger is executed after the subject table operation. <trigger_event> ::= INSERT | DELETE | UPDATE Specify which data modification command activate trigger action. <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> When trigger transition variable is declared, trigger can access records that are being changed by trigger SAP HANA Database - SQL Reference Manual 95 2012-12-19 triggering DML. While row level trigger execution, <trans_var_name>.<column_name> represents corresponding column record being changed in trigger. Here <column_name> is subject table's column name. See example of transition variable <trigger_transition_old_or_new> ::= OLD | NEW <trigger_transition_var_or_table> ::= ROW <trans_var_name> ::= <identifier> OLD You can access old record of DML in trigger, which is to-be-replaced-by-update old record or deleted-old- record. UPDATE trigger and DELETE trigger can have OLD ROW transition variable. NEW You can access new record of DML in trigger, which is to-be-inserted new record or to-be-updated new record. UPDATE trigger and INSERT trigger can have NEW ROW transition variable. Only transition variable is supported. Transition table is not supported feature. If you put 'TABLE' as <trigger_transition_var_or_table>, you will see not-supported-feature error. <for_each_row> ::= FOR EACH ROW Defines that the trigger will be called in a row-wise fashion. Statement level trigger execution is the default mode when FOR EACH ROW is not defined. Currently statement-wise trigger is not supported. <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_defa ult_assign>] ; | <var_name> <data_type> [<not_null>] [<trigger_default_assig n>] ; <var_name> ::= <identifier> <data_type> ::= DATE | TIME | SECONDDATE | TIMESTAMP | TINYINT | SMALLINT | INTEGER | BIGINT | SMALLDECIMAL | DECIMAL | REAL | DOUBLE | VARCHAR | NVARCHAR | ALPHANUM | SHORTTEXT | VARBINARY | BLOB | CLOB | NCLOB | TEXT <not_null> ::= NOT NULL <trigger_default_assign> ::= DEFAULT <expression> | := <expression> <trigger_condition_decl> ::= <condition_name> CONDITION ; | <condition_name> CONDITION FOR <sql_error_code> ; <condition_name> ::= <identifier> <sql_error_code> ::= SQL_ERROR_CODE <int_const> trigger_decl_list You can declare trigger variable or condition. Declared variable can be used scalar value assignment or referenced in trigger SQL statement. Declared condition name can be referenced when exception handler. CONSTANT When CONSTANT kewword was given, you cannot change the variable while trigger execution. <proc_handler_list> ::= <proc_handler> | <proc_handler_list> <proc_handler> <proc_handler> ::= DECLARE EXIT HANDLER FOR <proc_condition_value_list> <trigger_s SAP HANA Database - SQL Reference Manual 96 2012-12-19 tmt> <proc_condition_value_list> ::= <proc_condition_value> | <proc_condition_value_list> , <proc_condition_val ue> <proc_condition_value> ::= SQLEXCEPTION | SQLWARNING | <sql_error_code> | <condition_name> Exception handler can be declared for catching with existing sql exception, specific error code number or condition name declared on condition variable. <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> Trigger body syntax is a part of procedure body syntax. See detail of create procedure definition in SAP HANA database SQLScript guide. The syntax of trigger body complies with that of procedure, which are nested block(proc_block), scalar variable assign(proc_assign), if block(proc_if), loop block(proc_loop), for block(proc_for), for each block(proc_foreach), exception signal(proc_signal), exception resignal(proc_resignal), and sql statement(proc_sql). <proc_block> ::= BEGIN [<trigger_decl_list>] [<proc_handler_list>] <trigger_stmt_list> END ; You can add another 'BEGIN ... END;' block in a nested way. <proc_assign> ::= <var_name> := <expression> ; var_name is variable name, which should be declared previously. <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> For descriptions on condition, refer to <condition> in SELECT. Using IF ... THEN ... ELSEIF ... END IF, you can control execution flow with condition. <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> <expressio n> 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 ; SAP HANA Database - SQL Reference Manual 97 2012-12-19 <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 MESSAGE_TEXT = '<message_string>' <message_string> ::= <identifier> SET MESSAGE_TEXT If you set your own message with SET MESSAGE_TEXT, the message is delivered to users when specified error is thrown from trigger execution. SIGNAL statement provide raise an exception explicitly. User-defined range (10000 ~ 19999) will be allowed for the error code to issue. RESIGNAL statement provide raise an exception on the action statement in exception handler. If error code is not specified, RESIGNAL will throw up the catched exception. <trigger_sql> ::= <select_into_stmt> | <insert_stmt> | <delete_stmt> | <update_stmt> | <replace_stmt> | <upsert_stmt> For descriptions on insert_stmt, refer to INSERT. For descriptions on delete_stmt, refer to DELETE. For descriptions on update_stmt, refer to UPDATE. For descriptions on replace_stmt and upsert_stmt, refer to 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> For descriptions on select_list, from_clause, where_clause, group_by_clause, having_clause, set_operator, subquery, order_by_clause, limit, refer to SELECT. var_name is scalar variable name which should be declared before. You can assign selected item value to the scalar variable. Description CREATE TRIGGER statement creates a trigger. A trigger is special kind of stored procedure that automatically executes when an event occurs on a certain table. CREATE TRIGGER command defines a set of statements that is executed when a given operation(INSERT/UPDATE/DELETE) takes place on a given object(subject table) Only database users having the TRIGGER privilege for the given <subject_table_name> are allowed to create a trigger for that table. Current trigger limitation is described below: INSTEAD_OF trigger is not supported. Access of subject table which is table that trigger is defined on, is not allowed in trigger body, SAP HANA Database - SQL Reference Manual 98 2012-12-19 which means any insert/update/delete/replace/select for table which trigger is on is not allowed. Only row level trigger is supported. Statement level trigger is not supported. Row level trigger means trigger action will be executed for every row changes. Statement level trigger means trigger action will be executed once for a statement execution. Syntax 'FOR EACH ROW' means row-wise trigger execution and it is default mode. Even when 'FOR EACH ROW' is not defined, it is still row level trigger. Transition table (OLD/NEW TABLE) is not supported. When trigger SQL statement want to refer to data that are being changed by trigger-triggering-event like insert/update/delete, transition variable/table will be a way SQL statement in trigger body access old and new data. Transition variable is used by row level trigger while transition table is used by statement level trigger. Trigger execution on partitioned table to multiple host or table in slave node is not supported. Not supported trigger action feature(while procedure does) : 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), dynamic sql execution(build SQL statements dynamically at runtime of SQLScript), return(end SQL statement execution) System and Monitoring Views TRIGGERS is system view for trigger. System view TRIGGERS shows: 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 Example You first need table which trigger is defined on. CREATE TABLE TARGET ( A INT); You also need tables which trigger accesses and modifies. CREATE TABLE SAMPLE ( A INT); Following is example of create trigger. CREATE TRIGGER TEST_TRIGGER AFTER INSERT ON TARGET FOR EACH ROW BEGIN DECLARE SAMPLE_COUNT INT; SELECT COUNT(*) INTO SAMPLE_COUNT FROM SAMPLE; IF :SAMPLE_COUNT = 0 THEN INSERT INTO SAMPLE VALUES(5); ELSEIF :SAMPLE_COUNT = 1 THEN INSERT INTO SAMPLE VALUES(6); END IF; END; Trigger TEST_TRIGGER will be executed after any record insert execution for TARGET table. Since SAPMLE table record count is zero in the first insert try, the trigger TEST_TRIGGER will insert 5 to SAMPLE table. In the second insertion to TARGET table, the trigger insert 6 to SAMPLE table because its count is two. INSERT INTO TARGET VALUES (1); SELECT * FROM SAMPLE; 5 INSERT INTO TARGET VALUES (2); SELECT * FROM SAMPLE; 5 6 Followings are more example of create trigger. FOR/WHILE Example SAP HANA Database - SQL Reference Manual 99 2012-12-19 CREATE TABLE TARGET ( A INT); CREATE TABLE SAMPLE ( A INT); CREATE TRIGGER TEST_TRIGGER_WHILE_UPDATE AFTER UPDATE ON TARGET BEGIN DECLARE found INT := 1; DECLARE val INT := 1; WHILE :found <> 0 DO SELECT count(*) INTO found FROM sample WHERE a = :val; IF :found = 0 THEN INSERT INTO sample VALUES(:val); END IF; val := :val + 1; END WHILE; END; CREATE TABLE TARGET ( A INT); CREATE TABLE control_tab(id INT PRIMARY KEY, name VARCHAR(30), payment INT); CREATE TABLE message_box(message VARCHAR(200), log_time TIMESTAMP); CREATE TRIGGER TEST_TRIGGER_FOR_INSERT AFTER INSERT ON TARGET BEGIN DECLARE v_id INT := 0; DECLARE v_name VARCHAR(20) := ''; DECLARE v_pay INT := 0; DECLARE v_msg VARCHAR(200) := ''; DELETE FROM message_box; FOR v_id IN 100 .. 103 DO SELECT name, payment INTO v_name, v_pay FROM control_tab WHERE id = :v_id; v_msg := :v_name || ' has ' || TO_CHAR(:v_pay); INSERT INTO message_box VALUES (:v_msg, CURRENT_TIMESTAMP); END FOR; END; handler Examples CREATE TABLE TARGET ( A INT); CREATE TABLE MYTAB (I INTEGER PRIMARY KEY); CREATE TRIGGER MYTRIG_SQLEXCEPTION AFTER INSERT ON TARGET BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION SELECT ::SQL_ERROR_CODE, ::SQL_ERROR_MESS AGE FROM DUMMY; INSERT INTO MYTAB VALUES (1); INSERT INTO MYTAB VALUES (1); -- expected unique violation error: 301 -- not reached END; CREATE TRIGGER MYTRIG_SQL_ERROR_CODE AFTER UPDATE ON TARGET BEGIN DECLARE EXIT HANDLER FOR SQL_ERROR_CODE 301 SELECT ::SQL_ERROR_CODE, ::SQL_ERRO R_MESSAGE FROM DUMMY; INSERT INTO MYTAB VALUES (1); INSERT INTO MYTAB VALUES (1); -- expected unique violation error: 301 -- not reached END; CREATE TRIGGER MYTRIG_CONDITION AFTER DELETE ON TARGET BEGIN DECLARE MYCOND CONDITION FOR SQL_ERROR_CODE 301; DECLARE EXIT HANDLER FOR MYCOND SELECT ::SQL_ERROR_CODE, ::SQL_ERROR_MESSAGE FR OM DUMMY; INSERT INTO MYTAB VALUES (1); INSERT INTO MYTAB VALUES (1); -- expected unique violation error: 301 -- not reached END; SIGNAL/RESIGNAL Examples CREATE TABLE TARGET ( A INT); CREATE TABLE MYTAB (I INTEGER PRIMARY KEY); CREATE TABLE MYTAB_TRIGGER_ERR (err_code INTEGER, err_msg VARCHAR(30)); SAP HANA Database - SQL Reference Manual 100 2012-12-19 CREATE TRIGGER MYTRIG_SIGNAL AFTER INSERT ON TARGET BEGIN DECLARE MYCOND CONDITION FOR SQL_ERROR_CODE 10001; DECLARE EXIT HANDLER FOR MYCOND INSERT INTO MYTAB_TRIGGER_ERR VALUES (::SQL_ERR OR_CODE, ::SQL_ERROR_MESSAGE); INSERT INTO MYTAB VALUES (1); SIGNAL MYCOND SET MESSAGE_TEXT = 'my error'; -- not reached END; CREATE TRIGGER MYTRIG_RESIGNAL AFTER UPDATE ON TARGET BEGIN DECLARE MYCOND CONDITION FOR SQL_ERROR_CODE 10001; DECLARE EXIT HANDLER FOR MYCOND RESIGNAL; INSERT INTO MYTAB VALUES (1); SIGNAL MYCOND SET MESSAGE_TEXT = 'my error'; -- not reached END; Transition variable Example CREATE TABLE TARGET ( A INT, B VARCHAR(10)); CREATE TABLE SAMPLE_OLD ( A INT, B VARCHAR(10)); CREATE TABLE SAMPLE_NEW ( A INT, B VARCHAR(10)); INSERT INTO TARGET VALUES ( 1, 'oldvalue'); CREATE TRIGGER TEST_TRIGGER_VAR_UPDATE AFTER UPDATE ON TARGET REFERENCING NEW ROW mynewrow, OLD ROW myoldrow FOR EACH ROW BEGIN INSERT INTO SAMPLE_new VALUES(:mynewrow.a, :mynewrow.b); INSERT INTO SAMPLE_old VALUES(:myoldrow.a, :myoldrow.b); END; UPDATE TARGET SET b = 'newvalue' WHERE A = 1; SELECT * FROM SAMPLE_NEW; 1, 'newvalue' SELECT * FROM SAMPLE_OLD; 1, 'oldvalue' CREATE VIEW Syntax CREATE VIEW <view_name> [(<column_name>, ... )] AS <subquery> Syntax Elements <view_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> <column_name> ::= <identifier> Description The CREATE VIEW statement effectively creates virtual table based on the results of an SQL statement. It is not a table in a real sense as it does not contain data in itself. When a column name is specified along with the view name, a query result is displayed with that column name. If a column name is omitted, a query result gives an appropriate name to the column automatically. The number of column names has to be the same as the number of columns returned from <subquery>. Update operations on views are supported if the following conditions are met: . Each column in the view must map to a column of a single table . If a column in the base table has NOT NULL constraint without default value, the column must be included in view columns to be an insertable view. Update operation on a view is allowed without this condition. . Must not contain an aggregate or analytic function in a SELECT list for example, the followings are not allowed: . TOP, SET, DISTINCT operator in a SELECT list . GROUP BY, ORDER BY clause . Must not contain a subquery in a SELECT list . Must not contain a sequence value(CURRVAL, NEXTVAL) SAP HANA Database - SQL Reference Manual 101 2012-12-19 . Must not contain a column view as the base view If base views or tables are updatable, a view on the base views or tables can be updatable if the above conditions are met. Example You create table A. CREATE TABLE A (A INT PRIMARY KEY, B INT); You create a view v that selects all records from table A. CREATE VIEW v AS SELECT * FROM A; DROP AUDIT POLICY Syntax DROP AUDIT POLICY <policy_name> Syntax Elements <policy_name> ::= <identifier> Description The DROP AUDIT POLICY statement drops an audit policy. <policy_name> must specify an existing audit policy. Only database users having the system privilege AUDIT ADMIN are allowed to drop an audit policy. Each database user having this privilege is allowed to drop any audit policy, no matter if he created it or not. Even if an audit policy is dropped, it may happen, that the audit action specified in the dropped audit policy will be audited further. This will happen, if another audit policy is enabled and specifies that audit action as well. To switch off an audit policy temporarily, it can be disabled and need not be dropped. System and Monitoring Views AUDIT_POLICY: shows all audit policies and their states M_INIFILE_CONTENTS: shows the configuration parameter concerning auditing Only database users with system privilege CATALOG READ, DATA ADMIN or INIFILE ADMIN can see any info out of the view M_INIFILE_CONTENTS. For other database users this view will be empty. Example Assuming that the creation of an audit policy happened before using the following statement: CREATE AUDIT POLICY priv_audit AUDITING SUCCESSFUL GRANT PRIVILEGE, REVOKE PRIVILEG E, GRANT ROLE, REVOKE ROLE LEVEL CRITICAL; Now this audit policy has to be dropped. DROP AUDIT POLICY priv_audit; DROP FULLTEXT INDEX Syntax DROP FULLTEXT INDEX <fulltext_index_name> Syntax Elements <fulltext_index_name> ::= <identifier> Specifies the index to be dropped. SAP HANA Database - SQL Reference Manual 102 2012-12-19 Description The DROP FULLTEXT INDEX statement removes a fulltext index. Example You create table A and then add an index i on column b of table A. CREATE TABLE A (a INT, b NVARCHAR(10), c NVARCHAR(20)); CREATE INDEX i ON A(b); You drop index i. DROP FULLTEXT INDEX i; DROP INDEX Syntax DROP INDEX <index_name> Syntax Elements index_name ::= <identifier> The index name identifier specifies the index to be dropped. Description The DROP INDEX statement removes an index. Example You create table A and then add an index i on column b of table A. CREATE TABLE A (a INT, b NVARCHAR(10), c NVARCHAR(20)); CREATE INDEX i ON A(b); You drop index i. DROP INDEX i; DROP SCHEMA Syntax DROP SCHEMA <schema_name> [<drop_option>] Syntax Elements <drop_option> ::= CASCADE | RESTRICT When <drop_option> is not specified a non-cascaded drop will be performed. This will only drop the specified schema, dependent objects of the schema will be invalidated but not dropped. The invalidated object can be revalidated when an object that has same schema name is created. CASCADE Drops the schema and dependent objects. RESTRICT Drops the schema only when dependent objects do not exist. If this drop option is used and a dependent object exists an error will be thrown. Description SAP HANA Database - SQL Reference Manual 103 2012-12-19 The DROP SCHEMA statement removes a schema. Example You create schema my_schema and a table my_schema.t. CREATE SCHEMA my_schema; CREATE TABLE my_schema.t (a INT); You drop my_schema with a CASCADE option. DROP SCHEMA my_schema CASCADE; DROP SEQUENCE Syntax DROP SEQUENCE <sequence_name> [<drop_option>] Syntax Elements <sequence_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> The name of the sequence to be dropped, with optional schema name. <drop_option> ::= CASCADE | RESTRICT When <drop_option> is not specified a non-cascaded drop will be performed. This will only drop the specified sequence, dependent objects of the sequence will be invalidated but not dropped. The invalidated objects can be revalidated when an object that has same schema and object name is created. CASCADE Drops the sequence and dependent objects. RESTRICT Drops the sequence only when dependent objects do not exist. If this drop option is used and a dependent object exists an error will be thrown. Description The DROP SEQUENCE statement removes a sequence. Example You create a sequence seq. CREATE SEQUENCE seq START WITH 11; You drop the sequence seq. DROP SEQUENCE seq; DROP SYNONYM Syntax DROP [PUBLIC] SYNONYM <synonym_name> [<drop_option>] Syntax Elements PUBLIC When specified allows the removal of a public synonym. SAP HANA Database - SQL Reference Manual 104 2012-12-19 <synonym_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> The name of the synonym to be dropped, with optional schema name. <drop_option> ::= CASCADE | RESTRICT When <drop_option> is not specified a non-cascaded drop will be performed. This will only drop the specified synonym, dependent objects of the synonym will be invalidated but not dropped. The invalidated object can be revalidated when an object that has same schema and object name is created. CASCADE Drops the synonym and dependent objects. RESTRICT Drops the synonym only when dependent objects do not exist. If this drop option is used and a dependent object exists an error will be thrown. Description The DROP SYNONYM statement removes a synonym. Example You create a table 'a', then a synonym a_synonym and a public synonym pa_synonym for the table. CREATE TABLE a (c INT); CREATE SYNONYM a_synonym FOR a; CREATE PUBLIC SYNONYM pa_synonym FOR a; You drop both synonym a_synonym and public synonym pa_synonym using a non-cascaded drop in both cases. DROP SYNONYM a_synonym; DROP PUBLIC SYNONYM pa_synonym; DROP TABLE Syntax DROP TABLE <table_name> [<drop_option>] Syntax Elements <table_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> The name of the table to be dropped, with optional schema name. <drop_option> ::= CASCADE | RESTRICT When <drop_option> is not specified a non-cascaded drop will be performed. This will only drop the specified table, dependent objects of the table will be invalidated but not dropped. The invalidated objects can be revalidated when an object that has same schema and object name is created. CASCADE Drops the table and dependent objects. RESTRICT Drops the table only when dependent objects do not exist. If this drop option is used and a dependent object exists an error will be thrown. Description SAP HANA Database - SQL Reference Manual 105 2012-12-19 The DROP TABLE statement removes a table from the database. Example You create table A and then drop it directly afterwards. CREATE TABLE A(C INT); DROP TABLE A; DROP TRIGGER Syntax DROP TRIGGER <trigger_name> Syntax Elements <trigger_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> The name of the trigger to be dropped, with optional schema name. <drop_option> ::= CASCADE | RESTRICT When <drop_option> is not specified a non-cascaded drop will be performed. This will only drop the specified trigger, dependent objects of the trigger will be invalidated but not dropped. The invalidated object can be revalidated when an object that has same schema and object name is created. CASCADE Drops the trigger and dependent objects. RESTRICT Drops the trigger only when dependent objects do not exist. If this drop option is used and a dependent object exists an error will be thrown.<b Description The DROP TRIGGER statement deletes a trigger. Only database users having the TRIGGER privilege for the table on which the trigger was defined are allowed to drop a trigger for that table. Example You create two tables, target and sample, and a trigger called test. CREATE TABLE target ( A INT); CREATE TABLE sample ( A INT); CREATE TRIGGER test AFTER UPDATE ON target BEGIN INSERT INTO sample VALUES(3); END; You drop the trigger called test. DROP TRIGGER test; DROP VIEW Syntax DROP VIEW <view_name> [<drop_option>] Syntax Elements SAP HANA Database - SQL Reference Manual 106 2012-12-19 <view_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> The name of the view to be dropped, with optional schema name. <drop_option> ::= CASCADE | RESTRICT When <drop_option> is not specified a non-cascaded drop will be performed. This will only drop the specified view, dependent objects of the view will be invalidated but not dropped. The invalidated objects can be revalidated when an object that has same schema and object name is created. CASCADE Drops the view and dependent objects. RESTRICT Drops the view only when dependent objects do not exist. If this drop option is used and a dependent object exists an error will be thrown. Description The DROP VIEW statement removes a view from the database. Example You create table t, then a view v that selects all records from table t. CREATE TABLE t (a INT); CREATE VIEW v AS SELECT * FROM t; You drop view v from the database. DROP VIEW v; RENAME COLUMN Syntax RENAME COLUMN <table_name>.<old_column_name> TO <new_column_name> Syntax Elements <table_name> ::= <identifier> The name of the table where the column is to be renamed. <old_column_name> ::= <identifier> <new_column_name> ::= <identifier> The old and new column names respectively. Description The RENAME COLUMN statement changes the name of a column. For the information on column name, please refer to Identifiers. Example You create table tab with two columns named A and B. CREATE TABLE tab (A INT PRIMARY KEY, B INT); You display the column names for table tab stored in the SAP HANA database. SELECT COLUMN_NAME, POSITION FROM TABLE_COLUMNS WHERE SCHEMA_NAME = CURRENT_SCHEMA SAP HANA Database - SQL Reference Manual 107 2012-12-19 AND TABLE_NAME = 'tab' ORDER BY POSITION; You rename column A to C. RENAME COLUMN tab.A TO C; You display the column names for table tab after the renaming. SELECT COLUMN_NAME, POSITION FROM TABLE_COLUMNS WHERE SCHEMA_NAME = CURRENT_SCHEMA AND TABLE_NAME = 'tab' ORDER BY POSITION; RENAME INDEX Syntax RENAME INDEX <old_index_name> TO <new_index_name> Syntax Elements <old_index_name> ::= <identifier> <new_index_name> ::= <identifier> Description The RENAME INDEX statement changes the name of an index. For the information on index name, please refer to Identifiers. Example Table B is created, then index idx is created on column B of table B: CREATE TABLE B (A INT PRIMARY KEY, B INT); CREATE INDEX idx on B(B); The list of index names in table B is shown: SELECT INDEX_NAME FROM INDEXES WHERE SCHEMA_NAME = CURRENT_SCHEMA AND TABLE_NAME = 'B'; Index idx is renamed to new_idx: RENAME INDEX idx TO new_idx; The list of index names in table B after renaming is shown: SELECT INDEX_NAME FROM INDEXES WHERE SCHEMA_NAME = CURRENT_SCHEMA AND TABLE_NAME = 'B'; RENAME TABLE Syntax RENAME TABLE <old_table_name> TO <new_table_name> Syntax Elements <old_table_name> ::= <identifier> <new_table_name> ::= <identifier> Description The RENAME TABLE statement changes the name of a table to new_table_name in the same schema. For the information on table name, please refer to Identifiers. Example SAP HANA Database - SQL Reference Manual 108 2012-12-19 Table A is created in current schema: CREATE TABLE A (A INT PRIMARY KEY, B INT); The list of table names in current schema is shown: SELECT TABLE_NAME FROM TABLES WHERE SCHEMA_NAME = CURRENT_SCHEMA; Table A renamed to B: RENAME TABLE A TO B; The list of table names in current schema after renaming is shown: SELECT TABLE_NAME FROM TABLES WHERE SCHEMA_NAME = CURRENT_SCHEMA; Schema mySchema is created, then table mySchema.A is created: CREATE SCHEMA mySchema; CREATE TABLE mySchema.A (A INT PRIMARY KEY, B INT); The list of table names in schema mySchema is shown: SELECT TABLE_NAME FROM TABLES WHERE SCHEMA_NAME = 'MYSCHEMA'; Table mySchema.A is renamed to B: RENAME TABLE mySchema.A TO B; The list of table names in schema mySchema after renaming is shown: SELECT TABLE_NAME FROM TABLES WHERE SCHEMA_NAME = 'MYSCHEMA'; Data Manipulation Statements DELETE Syntax DELETE [HISTORY] FROM <table_name> [WHERE <condition>] Syntax Elements HISTORY Marks the selected records of the history storage of a history-table for deletion. <table_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> For descriptions on identifier, please refer to Identifiers. <condition> ::= <condition> OR <condition> | <condition> AND <condition> | NOT <condition> | ( <condition> ) | <predicate> For descriptions on predicates, please refer to Predicates. Description The DELETE statement deletes records from a table where the <condition> is met. If the WHERE clause is omitted, then DELETE removes all records from a table. When using the DELETE HISTORY command time travel queries referencing the deleted rows may still access these rows. In order to physically delete these rows the following statements have to be executed: SAP HANA Database - SQL Reference Manual 109 2012-12-19 ALTER SYSTEM RECLAIM VERSION SPACE; MERGE HISTORY DELTA of <table_name>; In some cases even the execution of the two statements above may not lead to physical deletion. To check whether the rows are physically deleted, the following statement can be helpful: SELECT * FROM <table_name> WHERE <condition> WITH PARAMETERS ('REQUEST_FLAGS'= ('ALLCOMMITTED','HISTORYONLY')); Note: The "WITH PARAMETERS ('REQUEST_FLAGS'= ('ALLCOMMITTED','HISTORYONLY'))" clause may only be used for the purpose of validating the result of using the DELETE HISTORY statement. Example Example 1 - Standard delete operation. You create a table and insert some data. CREATE TABLE T (KEY INT PRIMARY KEY, VAL INT); INSERT INTO T VALUES (1, 1); INSERT INTO T VALUES (2, 2); INSERT INTO T VALUES (3, 3); You delete from table T where the key column is equal to 1; DELETE FROM T WHERE KEY = 1; After executing the above query the contents of table T is as follows: KEY VAL 2 2 3 3 From this result we can see that one row was deleted. Example 1 - Standard delete operation. You first create a history table and insert a value. CREATE HISTORY COLUMN TABLE HIST(KEY INT PRIMARY KEY, VAL INT); INSERT INTO HIST VALUES (1, 1); COMMIT; You update the row we inserted at the previous step. UPDATE HIST SET VAL=42 WHERE KEY=1; COMMIT; You merge in the table delta storage with the table main storage. MERGE DELTA OF HIST; Assuming the merge statement has moved the updated record into the history storage of the history table, you can now delete the updated record history. DELETE HISTORY FROM HIST WHERE KEY=1; EXPLAIN PLAN EXPLAIN PLAN EXPLAIN PLAN [SET STATEMENT_NAME = <statement_name>] FOR \ref sql_subquery Syntax Elements <statement_name> ::= string literal used to identify the name of a specific executi on plan in the output table for a given SQL statement. SAP HANA Database - SQL Reference Manual 110 2012-12-19 It is set to NULL if the SET STATEMENT_NAME is not specified. Description The EXPLAIN PLAN statement is used to evaluate the execution plan that the SAP HANA database follows to execute an SQL statement. The result of the evaluation is stored into the EXPLAIN_PLAN_TABLE view for later user examination. The SQL statement must be data manipulation statement, thus a schema definition language statement cannot be used with the EXPLAIN PLAN command. You can obtain SQL plan from EXPLAIN_PLAN_TABLE view. The view is shared by all users. Here is an example of reading an SQL plan from the view. SELECT * FROM EXPLAIN_PLAN_TABLE; Columns in EXPLAIN_PLAN_TABLE view: Table 1: Column name and description Col umn Name Descri pti on STATEMENT_NAME The stri ng speci fi ed as STATEMENT_NAME on executi ng the EXPLAI N PLAN command. Thi s i s used to di sti ngui sh pl ans from each other when there are mul ti pl e pl ans i n the EXPLAI N_PLAN_TABLE vi ew. OPERATOR_NAME Name of an operator. Detai l s are descri bed i n the fol l owi ng secti on. OPERATOR_DETAI LS Detai l s of an operator. Predi cates and expressi ons used by the operator are shown here. SCHEMA_NAME Name of the schema of the accessed tabl e. TABLE_NAME Name of the accessed tabl e. TABLE_TYPE Type of the accessed tabl e. One of the fol l owi ng opti ons: COLUMN TABLE, ROW TABLE, MONI TORI NG VI EW, JOI N VI EW, OLAP VI EW, CALCULATI ON VI EW and HI ERARCHY VI EW. TABLE_SI ZE Esti mated number of rows i n the accessed tabl e OUTPUT_SI ZE Esti mated number of rows produced by an operator SUBTREE_COST Esti mated cost of executi ng the subtree starti ng from an operator. Thi s val ue i s onl y for rel ati ve compari son. OPERATOR_I D I D of an operator uni que i n a pl an. I Ds are i ntegers starti ng from 1. PARENT_OPERATOR_I D OPERATOR_I D of the parent of an operator. The shape of an SQL pl an i s a tree and the topol ogy of the tree can be reconstructed usi ng OPERATOR_I D and PARENT_OPERATOR_I D. PARENT_OPERATOR_I D of the root operator i s shown as NULL. LEVEL Level from the root operator. Level of the root operator i s 1, l evel of a chi l d of the root operator i s 2 and so on. Thi s can be uti l i zed for output i ndentati on. POSI TI ON Posi ti on i n the parent operator. Posi ti on of the fi rst chi l d i s 1, posi ti on of the second chi l d i s 2 and so on. HOST The hostname where an operator was executed PORT The TCP/I P port used to connect to the host TI MESTAMP Date and ti me when the EXPLAI N PLAN command was executed. CONNECTI ON_I D I D of the connecti on where the EXPLAI N PLAN command was executed. EXECUTI ON_ENGI NE Type of the executi on engi ne where an operator i s executed: COLUMN or ROW OPERATOR_NAME column in EXPLAIN_PLAN_TABLE view: Table 2. List of column engine operators shown in the OPERATOR_NAME column. Operator Name Descri pti on COLUMN SEARCH Starti ng posi ti on of col umn engi ne operators. OPERATOR_DETAI LS l i sts projected col umns. LI MI T Operator for l i mi ti ng the number of output rows ORDER BY Operator for sorti ng output rows HAVI NG Operator for fi l teri ng wi th predi cates on top of groupi ng and aggregati on GROUP BY Operator for groupi ng and aggregati on DI STI NCT Operator for dupl i cate el i mi nati on FI LTER Operator for fi l teri ng wi th predi cates JOI N Operator for joi ni ng i nput rel ati ons COLUMN TABLE I nformati on about accessed col umn tabl e MULTI PROVI DER Operator for produci ng uni on-al l of mul ti pl e resul ts havi ng the same groupi ng and aggregati on SAP HANA Database - SQL Reference Manual 111 2012-12-19 Table 3. List of row engine operators shown in the OPERATOR_NAME column. Operator Name Descri pti on ROW SEARCH Starti ng posi ti on of row engi ne operators. OPERATOR_DETAI LS l i sts projected col umns. LI MI T Operator for l i mi ti ng number of output rows ORDER BY Operator for sorti ng output rows HAVI NG Operator for fi l teri ng wi th predi cates on top of groupi ng and aggregati on GROUP BY Operator for groupi ng and aggregati on MERGE AGGREGATI ON Operator for mergi ng the resul ts of mul ti pl e paral l el groupi ng and aggregati ons DI STI NCT Operator for dupl i cate el i mi nati on FI LTER Operator for fi l teri ng wi th predi cates UNI ON ALL Operator for produci ng uni on-al l of i nput rel ati ons MATERI ALI ZED UNI ON ALL Operator for produci ng uni on-al l of i nput rel ati ons wi th i ntermedi ate resul t materi al i zati on BTREE I NDEX JOI N Operator for joi ni ng i nput rel ati ons through B-tree i ndex searches. Joi n type suffi x can be added. For exampl e, B-tree i ndex joi n for l eft outer joi n i s shown as BTREE I NDEX JOI N (LEFT OUTER). Joi n wi thout joi n type suffi x means i nner joi n. CPBTREE I NDEX JOI N Operator for joi ni ng i nput rel ati ons through CPB-tree i ndex searches. Joi n type suffi x can be added. HASH JOI N Operator for joi ni ng i nput rel ati ons through probi ng hash tabl e bui l t on the fl y. Joi n type suffi x can be added. NESTED LOOP JOI N Operator for joi ni ng i nput rel ati ons through nested l oopi ng. Joi n type suffi x can be added. MI XED I NVERTED I NDEX JOI N Operator for joi ni ng an i nput rel ati on of row store format wi th a col umn tabl e wi thout format conversi on usi ng an i nverted i ndex of the col umn tabl e. Joi n type suffi x can be added. BTREE I NDEX SEARCH Tabl e access through B-tree i ndex search CPBTREE I NDEX SEARCH Tabl e access through CPB-tree i ndex search TABLE SCAN Tabl e access through scanni ng AGGR TABLE Operator for aggregati ng base tabl e di rectl y MONI TOR SEARCH Moni tori ng vi ew access through search MONI TOR SCAN Moni tori ng vi ew access through scanni ng COLUMN SEARCH is a mark for the starting position of column engine operators and ROW SEARCH is a mark for the starting position of row engine operators. In the example below, the intermediate result produced by a COLUMN SEARCH (ID 10) is consumed by a ROW SEARCH (ID 7), and the intermediate result produced by the ROW SEARCH (ID 7) is consumed by another COLUMN SEARCH (ID 1). The operators below the lowest COLUMN SEARCH (ID 10) explain how the COLUMN SEARCH (ID 10) is executed. The operators between the ROW SEARCH (ID 7) and the COLUMN SEARCH (ID 10) explain how the ROW SEARCH (ID 7) processes the intermediate result produced by the COLUMN SEARCH (ID 10). The operators between the top COLUMN SEARCH (ID 1) and the ROW SEARCH (ID 7) explain how the top COLUMN SEARCH (ID 1) processes the intermediate result produced by the ROW SEARCH (ID 7). Table 4. Operators OPERATOR_NAME OPERATOR_I D PARENT_OPERATOR_I D LEVEL POSI TI ON COLUMN SEARCH 1 NULL 1 1 LI MI T 2 1 2 1 ORDER BY 3 2 3 1 GROUP BY 4 3 4 1 JOI N 5 4 5 1 COLUMN TABLE 6 5 6 1 <font col or="BLUE">ROW SEARCH</font> <font col or="BLUE">7</font> <font col or="BLUE">5</font> <font col or="BLUE">6</font> <font col or="BLUE">2</font> BTREE I NDEX JOI N 8 7 7 1 BTREE I NDEX JOI N 9 8 8 1 <font col or="RED">COLUMN SEARCH</font> <font col or="RED">10</font> <font col or="RED">9</font> <font col or="RED">9</font> <font col or="RED">1</font> FI LTER 11 10 10 1 SAP HANA Database - SQL Reference Manual 112 2012-12-19 COLUMN TABLE 12 11 11 1 Example of SQL plan explanation Here is an example of SQL plan explanation of a query. The query is from TPC-H Benchmark. In the example, all tables are located on row store. DELETE FROM expl ai n_pl an_tabl e WHERE statement_name = 'TPC-H Q10'; EXPLAI N PLAN SET STATEMENT_NAME = 'TPC-H Q10' FOR SELECT TOP 20 c_custkey, c_name, SUM(l _extendedpri ce * (1 - l _di scount)) AS revenue, c_acctbal , n_name, c_address, c_phone, c_comment FROM customer, orders, l i nei tem, nati on 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 _returnfl ag = 'R' AND c_nati onkey = n_nati onkey GROUP BY c_custkey, c_name, c_acctbal , c_phone, n_name, c_address, c_comment ORDER BY revenue DESC; SELECT operator_name, operator_detai l s, tabl e_name FROM expl ai n_pl an_tabl e WHERE statement_name = 'TPC-H Q10'; The following is the plan explanation of the above query. OPERATOR_NAME OPERATOR_DETAI LS TABLE_NAME ROW SEARCH CUSTOMER.C_CUSTKEY, CUSTOMER.C_NAME, SUM(LI NEI TEM.L_EXTENDEDPRI CE * (1 - LI NEI TEM.L_DI SCOUNT)), CUSTOMER.C_ACCTBAL, NATI ON.N_NAME, CUSTOMER.C_ADDRESS, CUSTOMER.C_PHONE, CUSTOMER.C_ COMMENT None LI MI T NUM RECORDS: 20 ORDER BY SUM(LI NEI TEM.L_EXTENDEDPRI CE * (1 - LI NEI TEM.L_DI SCOUNT)) DESC None MERGE AGGREGATI ON NUM PARTI TI ONS: 4 None GROUP BY GROUPI NG: NATI ON.N_NAME, R_CUSTOMER.C_CUSTKEY, AGGREGATI ON: SUM(LI NEI TEM.L_EXTENDEDPRI CE * (1 - LI NEI TEM.L_DI SCOUNT)) None CPBTREE I NDEX JOI N I NDEX NAME: _SYS_TREE_RS_279_#0_#P0, I NDEX CONDI TI ON: ORDERS.O_ORDERKEY = LI NEI TEM.L_ORDERKEY, I NDEX FI LTER: 'R' = LI NEI TEM.L_RETURNFLAG LI NEI TEM BTREE I NDEX JOI N I NDEX NAME: _SYS_TREE_RS_285_#0_#P0, I NDEX CONDI TI ON: CUSTOMER.C_NATI ONKEY = NATI ON.N_NATI ONKEY NATI ON BTREE I NDEX JOI N I NDEX NAME: _SYS_TREE_RS_283_#0_#P0, I NDEX CONDI TI ON: ORDERS.O_CUSTKEY = CUSTOMER.C_CUSTKEY CUSTOMER TABLE SCAN FI LTER CONDI TI ON: ORDERS.O_ORDERDATE < '1994-01-01' AND ORDERS.O_ORDERDATE >= '1993-10-01' ORDERS This means that: 1. TABLE SCAN will be executed on ORDERS with the FILTER CONDITION. 2. BTREE INDEX JOIN will be executed with the B-tree index of CUSTOMER and the result of the below TABLE SCAN. 3. BTREE INDEX JOIN will be executed with the B-tree index of NATION and the result of the below BTREE INDEX JOIN. 4. CPBTREE INDEX JOIN will be executed with the CPB-tree index of LINEITEM and the result of the below BTREE INDEX JOIN. SAP HANA Database - SQL Reference Manual 113 2012-12-19 5. GROUP BY will be executed with the result of the below CPBTREE INDEX JOIN, with 4 threads. 6. MERGE AGGREGATION will be executed with the result of the GROUP BY below. INSERT Syntax INSERT INTO <table_name> [ <column_list_clause> ] { <value_list_clause> | <subquery > } Syntax Elements <table_name> ::= [ <schema_name>. ]<identifier> <schema_name> ::= <identifier> <column_list_clause> ::= ( <column_name>, ... ) <column_name> ::= <identifier> For descriptions on identifier, please refer to Identifiers. <value_list_clause> ::= VALUES ( <expression>, ... ) For descriptions on expressions, please refer to Expressions. Description The INSERT statement adds records to a table. A subquery that returns records can be used to insert records into the table. If the subquery does not return any records, then the database will not insert any records into the table. The column list can be specified with the INSERT statement. The column which isn't included in the column list will be shown as a default value. If the column list is omitted, the database inserts all columns in the table. Example You create table T: CREATE TABLE T (KEY INT PRIMARY KEY, VAL1 INT, VAL2 NVARCHAR(20)); You insert a row into table T. INSERT INTO T VALUES (1, 1, 'The first'); KEY VAL1 VAL2 1 1 The fi rst You insert a new row into table T using column list to specify which columns should receive the input values. INSERT INTO T (KEY, VAL2) VALUES (2,3); KEY VAL1 VAL2 1 1 The fi rst 2 0 NULL You insert a row into table T using a subquery. INSERT INTO T SELECT 3, 3, 'The third' FROM DUMMY; KEY VAL1 VAL2 1 1 The fi rst 2 0 3 3 3 The thi rd LOAD Syntax LOAD <table_name> [HISTORY] {DELTA | ALL | (<column_name>, ...)} SAP HANA Database - SQL Reference Manual 114 2012-12-19 Syntax Elements <table_name> ::= [<schema_name>.]<identifier> <schema_name>::= <identifier> The name of the table to be loaded into memory, with optional schema name. HISTORY You can use the HISTORY option when <table_name> is the name of a history table. The default operation of the LOAD command loads the current state of the given table into memory. If you explicitly require the table history to be loaded into memory, a separate LOAD statement with the HISTORY option enabled has to be executed. So to load a history completely into memory, two LOAD statements have to be executed, with and without HISTORY option enabled. Note: If you do not explicitly load table history into memory the SAP HANA database will automatically load this data upon first access. DELTA DELTA specifies that the delta part of a column store table is loaded into memory. As the column store is read optimized and compressed, deltas are used to optimize insert or update operations. ALL ALL current data of the column store table, including its delta, is loaded into memory. Note: This option will not load the table history. <column_name> ::= <identifier> The name of the column to be loaded into memory. Description The LOAD statement explicitly loads column store table data into memory instead of upon first access. A LOAD statement without HISTORY option only loads the current table data and the table delta into memory, but not the history-delta and history-main. System Tables and Monitoring Views m_cs_tables shows the current table load status. Examples You create column table A. CREATE COLUMN TABLE A (A INT, B INT); You load table A into memory. LOAD A all; You load the columns A and B of table A into memory. LOAD A (A,B); You query the load status of table A using the m_cs_tables monitoring view. select loaded from m_cs_tables where table_name = 'A' MERGE DELTA Syntax MERGE [HISTORY] DELTA OF <table_name> [PART n] [WITH PARAMETERS (<parameter_list>, ...)] SAP HANA Database - SQL Reference Manual 115 2012-12-19 Syntax Elements HISTORY Merges the history-delta storage of a table into the history-main storage for column store temporal tables. PART Merge the delta of a specific table partition to the tables main storage. <table_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> The table name where the delta merge will occur, with optional schema name. <parameter_list> ::= <parameter> [{, <parameter>}...] <parameter> ::= <parameter_name> = <parameter_setting> <parameter_name> ::= 'SMART_MERGE' | 'MEMORY_MERGE' <parameter_setting> ::= 'ON' | 'OFF' Column store-specific options are passed using the "WITH PARAMETERS" clause. SMART_MERGE When SMART_MERGE is ON, the database does a smart merge based on merge criteria specified in automerge section of indexserver configuration. When SMART_MERGE is OFF, smart merging is disabled. MEMORY_MERGE When MEMORY_MERGE is ON the SAP HANA database merges the table delta storage in memory only, it will not be persisted. When MEMORY_MERGE is OFF, memory merging is disabled. Description The MERGE DELTA statement merges the column store table delta storage to the tables main storage. As a column store table is read optimized and compressed deltas are introduced to optimize insert or update operations. All insertions are passed to the delta storage. At a certain point in time the delta changes to a table can be merged into the table main storage. The UPDATE privilege on the column store table is required for performing a delta merge. Examples You create history column table A. CREATE HISTORY COLUMN TABLE A(c NVARCHAR(1000)) PARTITION BY ROUNDROBIN PARTITIONS 2; You merge the column store table delta storage to the tables main storage. MERGE DELTA OF A; You merge the column store table A using a smart merge. MERGE DELTA OF A WITH PARAMETERS('SMART_MERGE' = 'ON'); You smart merge the column store table A delta storage to main storage in memory only. This merge will not be persisted to disk. MERGE DELTA OF A WITH PARAMETERS('SMART_MERGE' = 'ON', 'MEMORY_MERGE' = 'ON'); You merge table A delta storage of partition 1 to the main storage of partion 1. MERGE DELTA OF A PART 1; You merge table A history-delta storage into its history-main storage. MERGE HISTORY DELTA OF A; SAP HANA Database - SQL Reference Manual 116 2012-12-19 You merge table A partition 1 history-delta storage to its history-main storage. MERGE HISTORY DELTA OF A PART 1; REPLACE | UPSERT Syntax UPSERT <table_name> [ <column_list_clause> ] { <value_list_clause> [ WHERE <condit ion> | WITH PRIMARY KEY ] | <subquery> } REPLACE <table_name> [ <column_list_clause> ] { <value_list_clause> [ WHERE <condit ion> | WITH PRIMARY KEY ] | <subquery> } Syntax Elements <table_name> ::= [ <schema_name>. ]<identifier> <schema_name> ::= <identifier> <column_list_clause> ::= ( <column_name>, ... ) <column_name> ::= <identifier> For descriptions on identifier, please refer to Identifiers. <value_list_clause> ::= VALUES ( <expression>, ... ) For descriptions on expressions, please refer to Expressions. <condition> ::= <condition> OR <condition> | <condition> AND <condition> | NOT <condition> | ( <condition> ) | <predicate> For descriptions on predicates, please refer to Predicates. Description Descriptions to detailed syntax elements of this SQL Command. The UPSERT or REPLACE statement without a subquery is similar to the UPDATE statement. The only difference is when the WHERE clause condition is false, it adds a new record to the table like the INSERT statement. In case of a table which has a PRIMARY KEY, the PRIMARY KEY column must be included in the column list. Columns defined with NOT NULL without default specification have to be included in the column list as well. Other columns are filled with default value or NULL if not specified. The UPSERT or REPLACE statement with a subquery works like the INSERT statement, except that if an old row in the table has the same value as a new row for a PRIMARY KEY, then the old row is changed by values of the returned record from a subquery. Unless the table has a PRIMARY KEY, it becomes equivalent to INSERT because there is no index to be used to determine whether or not a new row duplicates another. The UPSERT or REPLACE statement with a 'WITH PRIMARY KEY' is same as one with the subquery. It works based on the PRIMARY KEY. Example You create table T. CREATE TABLE T (KEY INT PRIMARY KEY, VAL INT); You insert a new value. UPSERT T VALUES (1, 1); KEY VAL 1 1 You insert a new value if the condition in the WHERE clause is false or update the current row values if WHERE evaluates to true. SAP HANA Database - SQL Reference Manual 117 2012-12-19 UPSERT T VALUES (2, 2) WHERE KEY = 2; KEY VAL 1 1 2 2 You update the table row where KEY is equal to 1. UPSERT T VALUES (1, 9) WHERE KEY = 1; KEY VAL 1 9 2 2 You use the "WITH PRIMARY KEY" keyword to update the table using the primary key value in the VALUES clause. UPSERT T VALUES (1, 8) WITH PRIMARY KEY; KEY VAL 1 8 2 2 You insert values using a subquery. UPSERT T SELECT KEY + 2, VAL FROM T; KEY VAL 1 8 2 2 3 8 4 2 SELECT Syntax <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>] Syntax Elements SELECT clause The select clause specifies an output to be returned either to the caller or to an outer select clause if one exists. <select_clause> ::= SELECT [TOP <unsigned_integer>] [ ALL | DISTINCT ] <select_list > The select clause. TOP <unsigned_integer> Specifies that that the first <unsigned_integer> records from the SQL statement should be returned. DISTINCT Specifies that only one copy of each set of duplicate records selected should be returned. SAP HANA Database - SQL Reference Manual 118 2012-12-19 ALL Specifies that all rows selected, including all copies of duplicates should be returned. This is the default option. <select_list> ::= <select_item>[, ...] The list of columns to be retrieved. <select_item> ::= [<table_name>.] <asterisk> | <expression> [ AS <column_alias> ] The details of the column to be retrieved. <table_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> The table name which will be the source for the selected columns, with optional schema name. <column_alias> ::= <identifier> The column alias used to refer to an expression. <asterisk> ::= * You use an asterisk (*) to select all columns from all tables or views listed in the FROM clause. If you provide a schema name or a table name with an asterisk(*), it is used to limit the scope of the result set to the specified table. FROM clause The from clause specifies inputs such as tables, views, and subqueries to be used in the select statement. <from_clause> ::= FROM <table>[{, <table>}...] The list of tables where the SELECT data is sourced from. <table> ::= <table_name> [ [AS] <table_alias> ] | <subquery> [ [AS] <table_alias> ] | <joined_table> The table, subquery or join which will be the data source for the query. <table_alias> ::= <identifier> The alias identifier for a table, subquery or joined table. <joined_table> ::= <table> [<join_type>] JOIN <table> ON <predicate> | <table> CROSS JOIN <table> | <joined_table> Specifies how tables should be joined. ON <predicate> Specifies a join predicate. CROSS JOIN Specifies that a cross join shoul be performed. Note: A cross join produces the cross-product of two tables. <join_type> ::= INNER | { LEFT | RIGHT | FULL } [OUTER] Specifies the type of join to be performed: LEFT defines a left outer join. RIGHT defines a right outer join. FULL indicates a full outer join. SAP HANA Database - SQL Reference Manual 119 2012-12-19 OUTER Specifies that an outer join should be performed. WHERE clause <where_clause> ::= WHERE <condition> The WHERE clause is used to specify predicates on inputs in the FROM clause, <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 clause <group_by_clause> ::= GROUP BY { <group_by_expression_list> | <grouping_set> } The GROUP BY clause is used to group the selected rows based on the values in the specified columns. <group_by_expression_list> ::= { <expression>, ... } <grouping_set> ::= { GROUPING SETS | ROLLUP | CUBE } [BEST <signed_integer>] [LIMIT <unsigned_integer>[OFFSET <unsigned_integer>] ] [WITH SUBTOTAL] [WITH BALANCE] [WITH TOTAL] [TEXT_FILTER <filterspec> [FILL UP [SORT MATCHES TO TOP]]] [STRUCTURED RESULT [WITH OVERVIEW] [PREFIX <prefix_table_name>] | MULTIPLE RESULTSETS] ( <grouping_expression_list> ) <grouping_expression_list> ::= { <grouping_expression>, ... } <grouping_expression> ::= <expression> | ( <expression>, ... ) | ( ( <expression>, ... ) <order_by_clause> ) GROUPING SETS Generates results with specified multiple groupings of data in a single statement. If no additional options, such as BEST and LIMIT, are set the result produced will be the same as a UNION ALL of the aggregation of each specified group. For example select col1, col2, col3, * count(*) from t group by grouping sets ( (col1, col2), ( col1, col3) ) \encode is equivalent to \code select * col1, col2, NULL, count(*) from t group by col1, col2 union all select col1, NULL, * col3, count(*) from t group by col1, col3 In the grouping-sets query each of (col1, col2) and (col1, col3) specifies the grouping. ROLLUP SAP HANA Database - SQL Reference Manual 120 2012-12-19 Generates results with multiple levels of aggregation in a single statement. For example rollup (col1, col2, col3) is equivalent to grouping sets ( (col1, col2, col3), (col1, col2), (col1) ) with an additional aggregation without grouping. Thus, the number of grouping sets that result set contains is the number of columns in ROLLUP list plus one for a last aggregation if there is no additional option. CUBE Generates results with multiple levels of aggregations in a single statement. For example cube (col1, col2, col3) is equivalent to grouping sets ( (col1, col2, col3), (col1, col2), (col1, col3), (col2, col3), (col1 ), (col2), (col3) ) with an additional aggregation without grouping. Thus, the number of grouping sets that result set contains is the same as all possible permutations of columns in the CUBE list plus one for the last aggregation if there is no additional option. BEST <signed_integer> Returns only the top-n grouping sets sorted in descending order of the number of rows aggregated in each grouping set. <signed_integer> can be zero, positive, and negative. When n is zero, it is the same as the BEST option not being set. When n is negative, it means sorting in ascending order. LIMIT <unsigned_integer> [OFFSET <unsigned_integer>] Returns the first <unsigned_integer> grouped records after skipping OFFSET<unsigned_integer> for each grouping set. WITH SUBTOTAL Returns an additional subtotal for each grouping set in the returned results controlled by OFFSET or LIMIT. Unless OFFSET and LIMIT are specified, the value is the same as WITH TOTAL. WITH BALANCE Returns for each grouping set an additional aggregated value of the remaining values not returned by OFFSET or LIMIT. WITH TOTAL Returns for each grouping set an additional row that is the aggregated total value. OFFSET and LIMIT options do not change this value. TEXT_FILTER <filterspec> Performs text filtering or highlighting on the grouping columns using a <filterspec>, which is a single-quoted string that follows the below syntax. <filterspec> ::= '[<prefix>]<element>{<subsequent>, ...}' <prefix> ::= + | - | NOT <element> ::= <token> | <phrase> <token> ::= !! Unicode letters or digits <phrase> ::= !! double-quoted string that does not contain double quotat ions inside <subsequent> ::= [<prefix_subsequent>]<element> <prefix_subsequent> ::= + | - | NOT | AND | AND NOT | OR A filter defined by <filterspec> is a token/phrase or tokens/phrases connected with logical operators such as AND, OR and NOT. A token matches a string that contains its corresponding word in a case-insensitive SAP HANA Database - SQL Reference Manual 121 2012-12-19 manner. For example, 'ab' matches 'ab cd' and 'cd Ab' but does not match 'abcd'. A token can contain the wildcard character ‘*’ that matches any string and ‘?’ that matches any character. Inside a phrase ‘*’ and ‘?’ do not function as wildcard characters. With tokens and phrases logical operators AND, OR and NOT can be used together. As OR is the default operator, 'ab cd' is the same as 'ab OR cd' Note: Logical operators should be written in uppercase characters. Prefixes '+' and '-' mean inclusion (AND) and exclusion (AND NOT), respectively. For example, 'ab -cd' is the same as 'ab AND NOT cd'. If FILL UP is not specified, only grouped records that have matching values are returned. Note: A filter is applied only to the first grouping column in each grouping set. FILL UP Returns not only matched grouped records, but also non-matched records. TEXT_FILTER is useful to identify which records have been matched. See 'Related Functions' below. SORT MATCHES TO TOP Returns matching values before non-matching values for each grouping set. This option cannot be used with SUBTOTAL, BALANCE and TOTAL. STRUCTURED RESULT Returns results as temporary tables. For each grouping set a single temporary table is created. If the WITH OVERVIEW option is set, an additional temporary table is created for the overview of the grouping sets. The names of the temporary tables are specified by the PREFIX option. WITH OVERVIEW Returns an overview in a separate additional table. PREFIX <prefix_table_name> <prefix_table_name> ::= #<identifier> Specifies a prefix for naming the temporary tables. <prefix_table_name> must start with "#", which means a temporary table. If PREFIX is not specified, the default prefix is "#GN" followed by a nonnegative integer number. See 'Return Format' below. MULTIPLE RESULTSETS Specifies that results should be returned in multiple result sets. Related Functions grouping_id ( <grouping_column1, ..., grouping_columnn> ) function returns an integer number to identify which grouping set each grouped record belongs to. text_filter ( <grouping_column> ) function, which is used with TEXT_FILTER, FILL UP, and SORT MATCHES TO TOP, displays matching values or NULL. NULL is displayed for non-matching values when FILL UP option is specified. Return Format If neither STRUCTURED RESULT nor MULTIPLE RESULTSETS is set, the unioned result ofall grouping sets is returned, with NULL values filling up attributes that are not included in a specific grouping set. With STRUCTURED RESULT, temporary tables are created additionally which can be queried using "SELECT * FROM <table name>" in the same session. The name of the tables follows the form: <PREFIX>0: this table will contain the overview if WITH OVERVIEW is specified <PREFIX>n: n-th grouping set subject to re-ordering by the BEST parameter With MULTIPLE RESULTSETS, multiple result sets are returned. Grouped records for each grouping set are in a single result set. HAVING clause <having_clause> ::= HAVING <condition> Selects the specified groups that satisfy the predicates. If this clause is omitted, all groups are selected. SAP HANA Database - SQL Reference Manual 122 2012-12-19 SET OPERATORS The set operators enable multiple select statements to be combined but return only one result set. <set_operator> ::= UNION [ ALL | DISTINCT ] | INTERSECT [DISTINCT] | EXCEPT [DISTIN CT] UNION ALL Selects all records from all select statements. Duplicates are not removed. UNION [DISTINCT] Selects all unique records from all select statements by removing duplicates found from different select statements. UNION has the same function as UNION DISTINCT. INTERSECT [DISTINCT] Returns records that exist in all select statement results. EXCEPT [DISTINCT] Returns all unique records from the first select statements after removing the duplicates in the following select statements. ORDER BY clause <order_by_clause> ::= ORDER BY { <order_by_expression>, ... } The ORDER BY clause is used to sort records by expressions or positions. <order_by_expression> ::= <expression> [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ] | <position> [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ] <position> ::= <unsigned_integer> <position> uses the entries in the select list to define the ordering required. For example: SELECT col1, col2 FROM t ORDER BY 2 "ORDER BY 2" indicates that ordering should be undertaken using the second expression in the select list, which in this case is "col2". [ ASC | DESC ] \encode Default: ASC ASC sorts records in ascending order. DESC sorts records in descending order.<br> \code [ NULLS FIRST | NULLS LAST ] Specifies where in the results set NULL values should appear. By default for ascending ordering NULL values are returned first, and for descending they are returned last. You can override this behavior using NULLS FIRST or NULLS LAST to explicitly specify NULL value ordering. LIMIT <limit> ::= LIMIT <unsigned_integer> [ OFFSET <unsigned_integer> ] Limits the number of output records. For example: LIMIT 3 [OFFSET 5] Returns the first 3 records after skipping 5 records. FOR UPDATE <for_update> ::= FOR UPDATE [OF <update_column_name_list>] Locks the selected records so that other users cannot lock or change the records until end of this transaction. SAP HANA Database - SQL Reference Manual 123 2012-12-19 <update_column_name_list>> ::= ( <column_name>[{, <column_name>}...] ) A list of columns is used to specify which table or view in the FROM clause should be locked. If there is only a single table or view, FOR UPDATE will suffice. However, if there are two objects (e.g., tables, views, and, subqueries), OF should be used. Note: A table used in a subquery cannot be locked. Also that only one table/view can be currently locked. The lock is released when the corresponding transaction is finished by commit or rollback. create column table x ( a int, b int ); insert into x values (1,1); insert into x values (2,2); create column table y ( a int, b int ); insert into y values (1,1); insert into y values (2,2); select * from x where a=1 for update; --> OK commit; select * from x where a=1 for update of x.c; --> error because c column does not ex ist in table x. select * from x where a=1 for update of x.a; --> OK commit; select * from x, y where a=1 for update; --> error because "OF" is not used to spec ify which one of x and y is locked. select * from x, y where a=1 for update of y.b; --> OK commit; select * from x, (select * from y) where a=1 for update of y.b; --> error because y is inside subquery commit; TIME TRAVEL Keywords related with time travel can be used for statement-level time travel to go back to the snapshot specified by commit_id or utctimestamp. <time_travel> ::= AS OF { { COMMIT ID <commit_id> } | { UTCTIMESTAMP <timestamp> } } Time travel is possible only with a history column table. <commit_id> can be obtained from m_history_index_last_commit_id after each commit and its related <timestamp> can be obtained from sys.m_transaction_history. For example: create history column table x ( a int, b int ); // after turnning off auto commit insert into x values (1,1); commit; select last_commit_id from m_history_index_last_commit_id where session_id = curren t_connection; // e.g., 10 insert into x values (2,2); commit; select last_commit_id from m_history_index_last_commit_id where session_id = curren t_connection; // e.g., 20 delete from x; commit; select last_commit_id from m_history_index_last_commit_id where session_id = curren t_connection; // e.g., 30 select * from x as of commit id 30; // return nothing select * from x as of commit id 20; // return two records (1,1) and (2,2) select * from x as of commit id 10; // return one record (1,1) select commit_time from sys.transaction_history where commit_id = 10; // e.g., '201 2-01-01 01:11:11' select commit_time from sys.transaction_history where commit_id = 20; // e.g., '201 2-01-01 02:22:22' select commit_time from sys.transaction_history where commit_id = 30; // e.g., '201 2-01-01 03:33:33' select * from x as of utctimestamp '2012-01-02 02:00:00'; // return one record (1,1 ) select * from x as of utctimestamp '2012-01-03 03:00:00'; // return two records (1, 1) and (2,2) select * from x as of utctimestamp '2012-01-04 04:00:00'; // return nothing SAP HANA Database - SQL Reference Manual 124 2012-12-19 Examples You create column table t1 and populate it with some example data. create column table t1 ( id int primary key, customer varchar(5), year int, product varchar(5), sales int ); insert into t1 values(1, 'C1', 2009, 'P1', 100); insert into t1 values(2, 'C1', 2009, 'P2', 200); insert into t1 values(3, 'C1', 2010, 'P1', 50); insert into t1 values(4, 'C1', 2010, 'P2', 150); insert into t1 values(5, 'C2', 2009, 'P1', 200); insert into t1 values(6, 'C2', 2009, 'P2', 300); insert into t1 values(7, 'C2', 2010, 'P1', 100); insert into t1 values(8, 'C2', 2010, 'P2', 150); Example 1 - GROUPING SETS You use grouping sets to analyze the customer data. Note: The this query is equivalent to example 3 below. select customer, year, product, sum(sales) from t1 group by GROUPING SETS ( (customer, year), (customer, product) ); select customer, year, NULL, sum(sales) from t1 group by customer, year union all select customer, NULL, product, sum(sales) from t1 group by customer, product; Observe that the two groups inside grouping sets in the first query are specified in each GROUP BY clause in the second query. Example 2 - ROLLUP You use ROLLUP to generates results with multiple levels of aggregation. Note: The following ROLLUP query is equivalent to Example 4 below. select customer, year, sum(sales) from t1 group by ROLLUP(customer, year); select customer, year, sum(sales) from t1 group by grouping sets ( (customer, year), (customer) ) union all select NULL, NULL, sum(sales) from t1; Example 3 - CUBE You use CUBE to generates results with multiple levels of aggregation. Note: The following CUBE query is equivalent to the query in Example 5. select customer, year, sum(sales) from t1 group by CUBE(customer, year); SAP HANA Database - SQL Reference Manual 125 2012-12-19 select customer, year, sum(sales) from t1 group by grouping sets ( (customer, year), (customer), (year) ) union all select NULL, NULL, sum(sales) from t1; Example 4 - BEST 1 You use BEST 1 to return only the best group of results. select customer, year, product, sum(sales) from t1 group by grouping sets BEST 1 ( (customer, year), (product) ); In this example, 4 records exist for (customer, year) group and 2 records exist for (product) group, so the former 4 records are returned. If you used 'BEST -1' instead of 'BEST 1', the latter 2 records would be returned. Example 5 - LIMIT You use LIMIT 2 to limit the number of records to a maximum 2 for each group. select customer, year, product, sum(sales) from t1 group by grouping sets LIMIT 2 ( (customer, year), (product) ); For the (customer, year) group, the number of records are 4, so only first 2 records will be returned. For the (product) group, the number of records are 2, in this case all the records will be returned. Example 6 - WITH SUBTOTAL you use WITH SUBTOTAL to produce an additional record for each group that displays a subtotal of returned records. These subtotal records are NULL for the customer, year, product columns and the sum of sum(sales) values in the select list. select customer, year, product, sum(sales) from t1 group by grouping sets LIMIT 2 WITH SUBTOTAL ( (customer, year), (product) ); Example 7 - WITH BALANCE You use WITH BALANCE to produce an additional record for each group that displays a subtotal of unreturned records. select customer, year, product, sum(sales) from t1 group by grouping sets LIMIT 2 WITH BALANCE ( (customer, year), (product) ); Example 8 - WITH TOTAL You use WITH TOTAL to produce an additional record for each group that displays a total of all grouped SAP HANA Database - SQL Reference Manual 126 2012-12-19 records. select customer, year, product, sum(sales) from t1 group by grouping sets LIMIT 2 WITH TOTAL ( (customer, year), (product) ); Example 9 - TEXT_FILTER You use TEXT_FILTER to retrieve the first column of each group with a given <filterspec>. The following query will search for columns ending with '2'. This will be applied to customers for in first grouping set and products in the second. Only three matched records will be returned. select customer, year, product, sum(sales), text_filter(customer), text_filter(prod uct) from t1 group by grouping sets TEXT_FILTER '*2' ( (customer, year), (product) ); Example 10 - FILL UP You use FILL UP to return both matched and non-matched records with <filterspec>. The following query returns six records whereas the previous example only returned three. select customer, year, product, sum(sales), text_filter(customer), text_filter(prod uct) from t1 group by grouping sets TEXT_FILTER '*2' FILL UP ( (customer, year), (product) ); Example 11 - SORT MATCHES TO TOP SORT MATCHES TO TOP is used to raise matched records up. For each grouping set, its grouped records will be sorted. select customer, year, product, sum(sales), text_filter(customer), text_filter(prod uct) from t1 group by grouping sets TEXT_FILTER '*2' FILL UP SORT MATCHES TO TOP ( (customer, year), (product) ); Example 12 - STRUCTURED RESULT You use STRUCTURED RESULT to create temporary tables, one for each grouping set and an additional table for the overview table. select customer, year, product, sum(sales) from t1 group by grouping sets STRUCTURED RESULT ( (customer, year), (product) ); select * from "#GN1"; select * from "#GN2"; "#GN1" table is for (customer, year) grouping set and "#GN2" table is for (product) one. Note: Each table contains only related columns. That is to say, "#GN1" table does not have "product" SAP HANA Database - SQL Reference Manual 127 2012-12-19 column and "#GN2" table does not have "customer" and "year" columns. You use WITH OVERVIEW to create a temporary table "#GN0" for the overview table. drop table "#G1"; drop table "#G2"; select customer, year, product, sum(sales) from t1 group by grouping sets structured result WITH OVERVIEW ( (customer, year), (product) ); select * from "#GN0"; select * from "#GN1"; select * from "#GN2"; You change the names of temporary tables by using the PREFIX keyword. Note: the names of tables must still must start with '#' which is the prefix used for temporary tables. select customer, year, product, sum(sales) from t1 group by grouping sets STRUCTURED RESULT WITH OVERVIEW PREFIX '#MYTAB' ( (customer, year), (product) ); select * from "#MYTAB0"; select * from "#MYTAB1"; select * from "#MYTAB2"; Temporary tables are dropped when the corresponding session is closed or when a user executes a drop command. A list of temporary tables are seen in m_temporary_tables. select * from m_temporary_tables; Example 13 - MULTIPLE RESULTSETS You use MULTIPLE RESULTSETS to return multiple result sets. The following query will return three result sets, one for the overview table and two for the grouping sets. select customer, year, product, sum(sales) from t1 group by grouping sets MULTIPLE RESULTSETS ( (customer, year), (product) ); TRUNCATE TABLE Syntax TRUNCATE TABLE <table_name> Description Deletes all rows from a table. TRUNCATE is faster than DELETE FROM when deleting all records from a table, but TRUNCATE cannot be rolled back. To rollback from deleting records, "DELETE FROM <table_name>" should be used. HISTORY tables can also be truncated in the same way as normal tables by executing this command. All parts of the history table (main, delta, history main and history delta) will be deleted and the content will be lost. Example You create table A. SAP HANA Database - SQL Reference Manual 128 2012-12-19 CREATE TABLE A (A INT PRIMARY KEY, B INT); You truncate the contents of table A. TRUNCATE TABLE A UNLOAD Syntax UNLOAD <table_name> Syntax Elements <table_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> The name of the table to be unloaded from memory Description The UNLOAD statement unloads the column store table from memory. This can be done to free up memory. The table will be loaded again on next access. Example You create column table A. CREATE COLUMN TABLE A (A INT, B INT); You load table A into memory. LOAD A all; You unload table A from memory. UNLOAD A; You check the load status of table A. select loaded from m_cs_tables where table_name = 'A' UPDATE Syntax UPDATE <target_table> <set_clause> [ <from_clause> ] [ WHERE <condition> ] Syntax Elements <target_table> ::= <table_name> | <alias_name> <table_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> <alias_name> ::= [AS] <identifier> For descriptions on identifier, please refer to Identifiers. <set_clause> ::= SET {<column_name> = <expression>},... For descriptions on expressions, please refer to Expressions. <from_clause> ::= FROM {<table>, ...} For detailed descriptions on from_clause, please refer to FROM clause. <condition> ::= <condition> OR <condition> | <condition> AND <condition> SAP HANA Database - SQL Reference Manual 129 2012-12-19 | NOT <condition> | ( <condition> ) | <predicate> For descriptions on predicates, please refer to Predicates. Description The UPDATE statement changes the values of the records of a table where the condition is met. The FROM clause can specify that a table, view, or derived object that is used to provide the criteria for the update operation. If the FROM clause exists and the object being updated is included in the FROM clause, there is only one reference to the object being updated. If the WHERE clause condition is true, the result of expression is assigned to that column. If the WHERE clause is omitted, then it updates all records of a table. Examples You create table T, and insert two rows into it. CREATE TABLE T (KEY INT PRIMARY KEY, VAL INT); INSERT INTO T VALUES (1, 1); INSERT INTO T VALUES (2, 2); You update the rows of table T if the condition in the WHERE clause is true. UPDATE T SET VAL = VAL + 1 WHERE KEY = 1; KEY VAL 1 2 2 2 You update all rows of table T because a where clause is not specified as part of the update statement. UPDATE T SET VAL = KEY + 10; KEY VAL 1 11 2 12 You create table T2, and insert two rows into it. CREATE TABLE T2 (KEY INT PRIMARY KEY, VAR INT); INSERT INTO T2 VALUES (1, 2); INSERT INTO T2 VALUES (3, 6); You update the values of table T by joining the target table T with table T2. UPDATE T SET VAL = T2.VAR FROM T, T2 WHERE T.KEY = T2.KEY; KEY VAL 1 2 2 2 System Management Statements ALTER SYSTEM ALTER CONFIGURATION Syntax ALTER CONFIGURATION (<filename>, <layer>[, <layer_name>]) SET | UNSET <parameter_key_value_list> [ WITH RECONFIGURE] Syntax Elements <filename> ::= <string_literal> The filename is 'indexserver.ini' in the case of row-store engine configuration. The filename used must be one of the ini files located on the 'DEFAULT' layer. If the file selected by filename does not exist on the required layer, the file will be created in the case of a SET command. SAP HANA Database - SQL Reference Manual 130 2012-12-19 <layer> ::= <string_literal> Sets the target layer for the configuration change. This parameter can be either 'SYSTEM' or 'HOST'. The SYSTEM layer is the recommended layer for customer settings. The HOST layer should generally only be used for minor configuration, for example parameters contained in daemon.ini. <layer_name> ::= <string_literal> If the layer parameter above is set to 'HOST', layer_name is used to target either a tenant name or a target host name. For example, 'selxeon12' would target the 'selxeon12' host. SET The SET command updates the value of a key if the key already exists, or inserts it if required. UNSET The UNSET command removes a key and its associated value. <parameter_key_value_list> ::= {(<section_name>,<parameter_name>) = <parameter_value>},... Specifies the section, key and value of the ini file parameter to be altered as follows: <section_name> ::= <string_literal> The section name of the parameter to be altered. <parameter_name> ::= <string_literal> The name of the parameter to be altered. <parameter_value> ::= <string_literal> The value of the parameter to be altered. WITH RECONFIGURE When WITH RECONFIGURE is specified the configuration changes will be directly applied to the running SAP HANA database instance. When WITH RECONFIGURE is not specified the new configuration will be written to the ini file, however the new value is not applied to the current running system and will only be applied at the next startup of the database. This means that there can be inconsistencies between the ini file contents and the actual configuration value that the SAP HANA database is currently using. Description Sets or removes configuration parameters in an ini file. Ini file configuration is used for the layered configuration for DEFAULT, SYSTEM, HOST layers. Note: The DEFAULT layer configuration cannot be changed or removed using this command. The following is an example of ini file locations: 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 The priority of the configuration layers is as follows: DEFAULT < SYSTEM < HOST. This means that the layer that has the highest priority is the HOST layer, followed by the SYSTEM layer and finally the DEFAULT layer. The configuration with the highest priority will be applied to the running environment. If the highest priority level configuration is removed, then the configuration with the next highest priority will be applied. System and Monitoring Views Currently available ini files are listed in the M_INIFILES system table and the current configuration is available in M_INIFILE_CONTENTS system table. Example You set a parameter new_test_value in the alt_sys_test section of the golbal.ini file. SAP HANA Database - SQL Reference Manual 131 2012-12-19 ALTER SYSTEM ALTER CONFIGURATION ('global.ini', 'SYSTEM') SET ('alt_sys_test', 'new _test_value') = 'test'; You check the setting of the parameter in the SAP HANA studio. In the Navigator you right click on the system where you made the change and select Administration then select the Configuration tab. Expand the global.ini configuration file and then the alt_sys_test section. You unset the new_test_value parameter set in the previous step. ALTER SYSTEM ALTER CONFIGURATION ('global.ini', 'SYSTEM') UNSET ('alt_sys_test', 'n ew_test_value'); You check the removal of the parameter by clicking refresh on the Configuration page in the SAP HANA studio. ALTER SYSTEM ALTER SESSION SET Syntax ALTER SYSTEM ALTER SESSION <session_id> SET <key> = <value> Syntax Elements <session_id> ::= <unsigned_integer> The session ID of the session where the variable should be set. <key> ::= <string_literal> The key of a session variable. The maximum length of key is 32 characters. <value> ::= <string_literal> The desired value of a session variable. The maximum length of value is 512 characters. Description With this command you can set session variables of database sessions. Note: There are several read-only session variables that you cannot change with this command: APPLICATION, APPLICATIONUSER, TRACEPROFILE. Session variables can be retrieved using SESSION_CONTEXT function and unset using the ALTER SYSTEM ALTER SESSION UNSET command. Example Note: Please run each command in this example in the same SQL Editor in the SAP HANA studio. This is because you need to use the same database session to make the example work properly. You obtain your current session ID. SELECT connection_id FROM m_connections WHERE OWN = 'TRUE'; You set the variable MY_VAR to 'some_value' in your session. In the command below replace <your_session_id> with the session ID that you discovered from the command above. ALTER SYSTEM ALTER SESSION <your_session_id> SET 'MY_VAR'= 'some_value'; You check the current value of MY_VAR in your session. SELECT SESSION_CONTEXT('MY_VAR') FROM dummy; ALTER SYSTEM ALTER SESSION UNSET Syntax SAP HANA Database - SQL Reference Manual 132 2012-12-19 ALTER SYSTEM ALTER SESSION <session_id> UNSET <key> Syntax Elements <session_id> ::= <unsigned_integer> The session ID of the session where the variable should be unset. <key> ::= <string_literal> The key of a session variable. The maximum length of key is 32 characters. Description With this command you can unset session variables of database sessions. Note: There are several read-only session variables that you cannot change with this command: APPLICATION, APPLICATIONUSER, TRACEPROFILE. Session variables can be retrieved using SESSION_CONTEXT function. Example You set the session variable MY_VAR to 'abc' in your database session. SET 'MY_VAR' = 'abc'; You get a list of all the session variables of the current session. SELECT * FROM M_SESSION_CONTEXT WHERE CONNECTION_ID = CURRENT_CONNECTION You remove the session variable from the specified session. In the command below replace <your_session_id> with the session ID that you discovered from the command above. ALTER SYSTEM ALTER SESSION <your_session_id> UNSET 'MY_VAR'; You get a list of all the session variables of the current session. SELECT * FROM M_SESSION_CONTEXT WHERE CONNECTION_ID = CURRENT_CONNECTION From the results of this command you can see that the MY_VAR variable has been unset. ALTER SYSTEM CANCEL [WORK IN] SESSION Syntax ALTER SYSTEM CANCEL [WORK IN] SESSION <session_id> Syntax Elements <session_id> ::= <string_literal> The session ID of the required session. Description Cancels the currently executing statement of a session. The transaction of the cancelled session will be rolled back. The statement that was executing will return error code 139 (current operation cancelled by request and transaction rolled back). Example You use the following query to obtain current database connection IDs and to view the statements that the sessions are executing. SELECT C.CONNECTION_ID, PS.STATEMENT_STRING SAP HANA Database - SQL Reference Manual 133 2012-12-19 FROM M_CONNECTIONS C JOIN M_PREPARED_STATEMENTS PS ON C.CONNECTION_ID = PS.CONNECTION_ID AND C.CURRENT_STATEMENT_ID = PS.STATEM ENT_ID WHERE C.CONNECTION_STATUS = 'RUNNING' AND C.CONNECTION_TYPE = 'Remote' Using the connection ID information you obtained using the query above, you can now cancel a running query. In the statement below you replace <connection_id> with a connection ID from the query above. ALTER SYSTEM CANCEL SESSION '<connection_id>' ALTER SYSTEM CLEAR SQL PLAN CACHE Syntax ALTER SYSTEM CLEAR SQL PLAN CACHE Description The SQL PLAN CACHE stores plans generated by previous SQL statement executions. The plan cache is used by the SAP HANA database to speed up query exectution if the same SQL statement is executed again.The plan cache also collects some statistics regarding plan preparation and execution. You can find details about the contents of the SQL plan cache from the following monitoring views: M_SQL_PLAN_CACHE, M_SQL_PLAN_CACHE_OVERVIEW The ALTER SYSTEM CLEAR SQL PLAN CACHE statement removes all the SQL plans that are not currently executing from the plan cache. The command also removes all plans having reference count of '0' from the plan cache and resets all the statistics of the remaining plans. Lastly the command also reset the contents of M_SQL_PLAN_CACHE_OVERVIEW monitoring view. Example You clear the SQL plan cache. ALTER SYSTEM CLEAR SQL PLAN CACHE ALTER SYSTEM CLEAR TRACES Syntax ALTER SYSTEM CLEAR TRACES (<trace_type_list>) Syntax Elements <trace_type_list> ::= <trace_type> [,...] You can clear multiple traces simultaneously by adding multiple trace_types in a comma delimited list. <trace_type> ::= <string_literal> You can selectively clear specific trace files by setting the trace_type to one of the following types: <trace_type> Trace Files ALERT *al ert_*.trc CLI ENT l ocal cl i ent_*.trc CRASHDUMP *.crashdump.* EMERGENCYDUMP *.emergencydump.* * al l *.trc fi l es of servi ces l i sted bel ow I NDEXSERVER,NAMESERVER,...,DAEMON open *.trc fi l es of a si ngl e servi ce type Description You use the ALTER SYSTEM CLEAR TRACES to clear trace contents from trace files. When you use this command all trace files that were opened by the SAP HANA database will be removed or cleared. On distributed systems, this command will clear all trace files on all hosts. SAP HANA Database - SQL Reference Manual 134 2012-12-19 distributed systems, this command will clear all trace files on all hosts. Use this command to reduce disk space used by large tracefiles, e.g. when trace components are set to INFO or DEBUG. You can monitor trace files and trace file contents using the M_TRACEFILES, M_TRACEFILE_CONTENTS system tables respectively. Examples You clear the alert trace file. ALTER SYSTEM CLEAR TRACES('ALERT'); You clear the alert and client trace files. ALTER SYSTEM CLEAR TRACES('ALERT', 'CLIENT'); ALTER SYSTEM DISCONNECT SESSION Syntax ALTER SYSTEM DISCONNECT SESSION <session_id> Syntax Elements <session_id> ::= <string_literal> The session ID of the session to be disconnected. Description You use ALTER SYSTEM DISCONNECT SESSION to disconnect a specified session from the database. Before disconnection any currently running operations associated with the session will be terminated. Example You use the command below to obtain the session IDs of idle sessions. SELECT CONNECTION_ID, IDLE_TIME FROM M_CONNECTIONS WHERE CONNECTION_STATUS = 'IDLE' AND CONNECTION_TYPE = 'Remote' ORDER BY IDLE_TIME DESC You disconnect a session. In the statement below you replace <connection_id> with a connection ID from the query above. ALTER SYSTEM DISCONNECT SESSION '<connection_id>' ALTER SYSTEM LOGGING Syntax ALTER SYSTEM LOGGING <on_off> Syntax Elements <on_off> ::= ON | OFF ON Enable logging. OFF Disable logging. Description You used this command to Enable or disable logging. While logging is disabled no log entries will be persisted, only the data area will be written when a savepoint SAP HANA Database - SQL Reference Manual 135 2012-12-19 is reached. This can cause loss of committed transactions, when the indexserver terminated in the middle of a LOAD operation. In case of a termination, you will have to truncate and insert all data again. After enabling logging you have to perform a savepoint to be sure that all data will be persisted. You will also have to perform a data backup, otherwise you will be unable to recover this data. ALTER SYSTEM LOGGING waits for the end (commit/rollback) of existing active write transactions. During the execution this command write transactions are blocked. In the event that there is a long-running write transaction, this command can be failed with a lock wait timeout error. Starting a new write transaction also can be blocked and failed with the same error. Due to the potential generation of the errors mentioned above you should only use this command for initial load. If used at other times data loss can occur if the indexserver is terminated whilst logging is disabled. Consequently, in a running system, the logging mode should be always ON and should not be altered. You can also adjust the logging settings for single column tables with ALTER TABLE <table_name> [ENABLE | DISABLE] DELTA LOG Example You disable system logging. ALTER SYSTEM LOGGING OFF; You enable system logging. ALTER SYSTEM LOGGING ON; See Also ALTER TABLE ALTER SYSTEM PERSISTENCE ENCRYPTION Syntax ALTER SYSTEM PERSISTENCE ENCRYPTION <encrypt_option> Syntax Elements <encrypt_option> ::= ON | OFF | CREATE NEW KEY | APPLY CURRENT KEY ON Switch on encryption. OFF Switch off encryption. CREATE NEW KEY Force the creation of a new random encryption key. APPLY CURRENT KEY Force all existing old data to be encrypted using the current encryption key. Description You use ALTER SYSTEM PERSISTENCE ENCRYPTION to define if persistent data should be stored on disk in encrypted or non-encrypted format. You can also use this command to recreate the random encryption key. When you switch on encryption, a random encryption key is prepared and an asynchronous background task is started which encrypts all disk data with this key. When you switch off encryption, an asynchronous background task is started which decrypts all encrypted disk data. When you use CREATE NEW KEY, the instance is forced to prepare a new random encryption key. This key will begin to be used after the next savepoint has occurred. The time in which this takes to occur is depending on the current workload of the SAP HANA database. No changes will be made to old written disk data. SAP HANA Database - SQL Reference Manual 136 2012-12-19 When you invoke APPLY CURRENT KEY, disk data that is encrypted with an old key is implicitly decrypted using the old key and then encrypted again with the current key. You may wish to do this if an old key was compromised or if you want to consolidate a set of old keys. When new key has been created with CREATE NEW KEY and then APPLY CURRENT KEY is called, a savepoint is internally triggered so that the new key can be used for encryption of old data. Note: Currently only the finally written disk data will be encrypted. The redo log is not affected by this command. For more information about the redo log please see the "Backing Up and Recovering the SAP HANA database" section in the "SAP HANA Administration guide" available from the SAP HANA Appliance page. Example You cause a non-encrypted instance to begin the asynchronous task of encrypting disk data. ALTER SYSTEM PERSISTENCE ENCRYPTION ON * See Also For more information about the use of Encryption in the SAP HANA database please see the "Managing Data Volume Encryption" section in the "SAP HANA Administration guide" available from the SAP HANA Appliance page. ALTER SYSTEM RECLAIM DATAVOLUME Syntax ALTER SYSTEM RECLAIM DATA VOLUME [SPACE] [<host_port>] <percentage_of_overload_si ze> <shrink_mode> Syntax Elements <host_port> ::= 'host_name:port_number' Specifies the server on which the size of the persistency should be reduced. <percentage_of_overload_size> ::= <int_const> Specifies to which percentage of the overload size the data volume should be reduced. <shrink_mode> ::= DEFRAGMENT | SPARSIFY Specifies the strategy to reduce the persistency size. DEFRAGEMENT is the default. Please note that SPARSIFY is not supported yet and reserved for future use. Description The command should be used when unused space inside the persistencies should be freed. It reduces data volume size to a N% of overload size; it works like defragmenting a hard disk, pages scattered around the data volume will be moved to the front of the data volume and the free space at the end of the data volume will be truncated. If <host_port> is omitted the statement is distributed to all servers with persistence. Example In the example below the persistencies of all servers in the landscape are defragmented and reduced to 120% of the overload size. ALTER SYSTEM RECLAIM DATAVOLUME 120 DEFRAGMENT ALTER SYSTEM RECLAIM LOG Syntax SAP HANA Database - SQL Reference Manual 137 2012-12-19 ALTER SYSTEM RECLAIM LOG Description You use this command when the database has accumulated a lot of log segments and you want to reclaim disk space of currently unused log segments. Log segment accumulation can be caused in several ways. For example, when the automatic log backup is not operational for a long period or the log savepoint is blocked for an extended time. When such an issue occurs you use the ALTER SYSTEM RECLAIM LOG command only after the root cause of the log accumulation has been fixed. Example You reclaim disk space of currently unused log segments using the following command: ALTER SYSTEM RECLAIM LOG ALTER SYSTEM RECLAIM VERSION SPACE Syntax ALTER SYSTEM RECLAIM VERSION SPACE Description This command triggers the row-store garbage collector to free up memory space and enhance system responsiveness. You do not need to use this command if only short transactions are being executed on the system. This is because the garbage collector is automatically triggered when a transaction ends. If there are long-running transactions on the system, this command helps overall system performance if the m_mvcc_tables monitoring view shows a large number of row-store versions(e.g. over 1M). System Tables and Monitoring Views m_mvcc_tables shows the number of row-store versions in the system. Example You check the number of row-store versions on the system using the m_mvcc_tables monitoring view. SELECT * FROM m_mvcc_tables You trigger row-store garbage collection. ALTER SYSTEM RECLAIM VERSION SPACE ALTER SYSTEM RECONFIGURE SERVICE Syntax ALTER SYSTEM RECONFIGURE SERVICE (<service_name>,<host>,<port>) Syntax Element <service_name> ::= <string_literal> The name of the service you wish to reconfigure. See M_SERVICE_TYPES monitoring view for a list of available service types. <host> ::= <string_literal> <port> ::= <unsigned_integer> The host and port number where you would like to reconfigure a service. Description SAP HANA Database - SQL Reference Manual 138 2012-12-19 You use ALTER SYSTEM RECONFIGURE SERVICE to reconfigures a specified service by applying the current configuration parameters. This command is used after changing multiple configuration parameters with the ALTER CONFIGURATION command without the RECONFIGURE option set. See ALTER SYSTEM ALTER CONFIGURATION To reconfigure a specific service specify <host> and <port> and leave <service_name> empty. To reconfigure all services of a type, specify <service_name> and leave <host> and <port> empty. To reconfigure all services, leave all parameters empty. Example You use the following command to reconfigure all services on the hana.hana.com host using port number 30303: ALTER SYSTEM RECONFIGURE SERVICE ('','hana.yourcompany.com',30303) You use the following command to reconfigure all services of type indexserver: ALTER SYSTEM RECONFIGURE SERVICE ('indexserver','',0) See Also ALTER SYSTEM ALTER CONFIGURATION ALTER SYSTEM REMOVE TRACES Syntax ALTER SYSTEM REMOVE TRACES (<host>, <trace_type_name_list>) Syntax Elements <host> :== <string_literal> The name of the host where the traces are to be removed. <trace_type_name_list> ::= <trace_file> [{, trace_file>}...] The trace file types to be removed. <trace_file> :== !!see table below. You set the <trace_file> parameter to one of the file specifications shown in the table below. Trace Type <trace_file> ALERT *al ert_*.trc CLI ENT l ocal cl i ent_*.trc CRASHDUMP *.crashdump.* EMERGENCYDUMP *.emergencydump.* * al l *.trc fi l es of servi ces l i sted bel ow I NDEXSERVER,NAMESERVER,...,DAEMON open *.trc fi l es of a si ngl e servi ce type Description You use this command to Delete the trace files on a specified host to reduce disk space used by large trace files. When a service has a trace file open it cannot be deleted. In this case you can clear the trace file using the ALTER SYSTEM CLEAR TRACES command. Example You use the command below to delete all of the ALERT traces from the lu873.sap.com host. ALTER SYSTEM REMOVE TRACES ('lu873.sap.com', '*alert_*.trc'); SAP HANA Database - SQL Reference Manual 139 2012-12-19 See Also ALTER SYSTEM CLEAR TRACES ALTER SYSTEM RESET MONITORING VIEW Syntax ALTER SYSTEM RESET MONITORING VIEW <view_name> Syntax Elements <view_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> The name of the resettable monitoring view to be reset. Note: Not all monitoring views can be reset using this command. You can identify a view as being able to be reset as its view name will have the suffix "_RESET". Description You use this command to reset statistics data for the specified monitoring view. You use this command to define a starting point for your measurements. First, you reset the monitoring view, then execute an action. After the action is completed, query "_RESET" version of the monitor view to get the statistical information gathered since the last reset. Example In the example below you reset the "SYS"."M_HEAP_MEMORY_RESET" monitoring view. ALTER SYSTEM RESET MONITORING VIEW "SYS"."M_HEAP_MEMORY_RESET" ALTER SYSTEM SAVE PERFTRACE Note: Performance tracing is only to be used in conjunction with SAP Support personnel. The collected perftrace data cannot be analyzed by an end user. Syntax ALTER SYSTEM SAVE PERFTRACE [INTO FILE <file_name>] Syntax Elements INTO FILE <file_name> <file_name> ::= <string_literal> Specifies a file where raw performance data will be saved. Description You use this command to collect raw performance trace data from .prf files and save the information into a single .tpt file. The .tpt file will be saved in the trace directory of your SAP HANA database instance. If you do not specify a file name then 'perftrace.tpt' will be used. The performance trace data (.tpt) file can be downloaded from SAP HANA Studio. To obtain the trace files in the Navigator pane you right click on the system you wish to diagnose. You select Administration from the context menu and in the dialog that appears you then select the Diagnosis Files tab. You right click on a Trace file and select Download. System Tables and Monitoring Views The status of the performance trace can be monitored from M_PERFTRACE. While a trace file is saving it is shown as 'Save PerfTrace' job in M_JOB_PROGRESS. SAP HANA Database - SQL Reference Manual 140 2012-12-19 Cancellation Saving a perftrace can take some time. You can cancel the job shown in M_JOB_PROGRESS with ALTER SYSTEM CANCEL [WORK IN] SESSION Example You save raw performance trace data into the 'mytrace.tpt' file. ALTER SYSTEM SAVE PERFTRACE INTO FILE 'mytrace.tpt' ALTER SYSTEM SAVEPOINT Syntax ALTER SYSTEM SAVEPOINT Description Executes a savepoint on the persistence manager. A savepoint is a point in time when a complete consistent image of the database is persisted to disk. The consistent image can be used to restart the database. Normally a savepoint is executed periodically as configured by the configuration parameter savepoint_interval_s in section [persistence]. For special (normally test) purposes, the savepoint can be disabled. In this case, you can use this command to manually execute a savepoint. System Tables and Monitoring Views See M_SAVEPOINT_STATISTICS for savepoint statistics Example You execute a savepoint on the persistence manager. ALTER SYSTEM SAVEPOINT ALTER SYSTEM START PERFTRACE Note: Performance tracing is only to be used in conjunction with SAP Support personnel. The collected perftrace data cannot be analyzed by an end user. Syntax ALTER SYSTEM START PERFTRACE [<user_name>] [<application_user_name>] [<application_ name>] [PASSPORT_TRACELEVEL <passport_level>] [PLAN_EXECUTION] [FUNCTION_PROFILER] [DURATION <durati on_seconds>] Syntax Element <user_name> ::= USER <identifier> Restricts perftrace collection to an SQL user name <application_user_name> ::= APPLICATIONUSER <identifier> Restricts perftrace collection to the application user name. <application_name> ::= APPLICATION <identifier> Restricts perftrace collection to the application name. <passport_level> ::= MEDIUM | HIGH Specifies the level of trace data to be collected. This is effectively a filter controlling the amount of data collected in end-to-end scenarios. SAP HANA Database - SQL Reference Manual 141 2012-12-19 PLAN_EXECUTION Specifies that plan execution details should be traced. FUNCTION_PROFILER Specifies that function level details should be traced. <duration_seconds> ::= <numeric literal> The number of seconds which perftrace should be collected. After this period expires perftrace is automatically stopped. If you do not specify this parameter you must stop perftrace with the ALTER SYSTEM STOP PERFTRACE statement. Description The ALTER SYSTEM START PERFTRACE command starts performance tracing. Only one perftrace can be active at a time. System Tables and Monitoring Views The status of performance trace can be monitored from M_PERFTRACE. Example You start performance tracing for the user sql_user on application user name app_user for application app_name. You also specify that plan execution and function level detail should be traced. ALTER SYSTEM START PERFTRACE USER sql_user APPLICATIONUSER app_user APPLICATION app _name PLAN_EXECUTION FUNCTION_PROFILER ALTER SYSTEM STOP PERFTRACE Note: Performance tracing is only to be used in conjunction with SAP Support personnel. The collected perftrace data cannot be analyzed by an end user. Syntax ALTER SYSTEM STOP PERFTRACE Description Stops an active performance trace. After stopping the trace, you collect and save the performance trace data with ALTER SYSTEM SAVE PERFTRACE. Example You stop an active performance trace. ALTER SYSTEM STOP PERFTRACE ALTER SYSTEM STOP SERVICE Syntax ALTER SYSTEM STOP SERVICE <host_port> [IMMEDIATE [WITH COREFILE]] Syntax Element <host_port> ::= <host_name:port_number> | ('<host_name>',<port_number>) Host and port of the service to be stopped. IMMEDIATE SAP HANA Database - SQL Reference Manual 142 2012-12-19 Immediately stop the service without waiting for regular shutdown. WITH COREFILE Write a core dump file. Description Stop single or multiple services on the designated host. Note: Typically a service you stop will be automatically restarted by the SAP HANA database system. You should use this command after changing a configuration parameter that can not be changed whilst the SAP HANA database is running. Example You stop a service running on host hdb1.yourcompany.com on port 30303. ALTER SYSTEM STOP SERVICE 'hdb1.yourcompany.com:30303' SET SYSTEM LICENSE Syntax SET SYSTEM LICENSE <license key> Syntax Elements <license key> ::= <string_literal> The license key to be set. Description Installs a license key to the database instance. The license key (<license key>="">) is to be copied and pasted from the license key file. The system privilege LICENSE ADMIN is required to execute this command. Example Note: The license shown below does not contain a license key, so you cannot run this example. You set the system license with a license code. SET SYSTEM LICENSE '----- Begin SAP License ----- SAPSYSTEM=HD1 HARDWARE-KEY=K4150485960 INSTNO=0110008649 BEGIN=20110809 EXPIRATION=20151231 LKEY=... SWPRODUCTNAME=SAP-HANA SWPRODUCTLIMIT=2147483647 SYSTEM-NR=00000000031047460' UNSET SYSTEM LICENSE ALL Warning: Running this command immediately locks down your SAP HANA database. You will require a new license key before you can use the system further. Syntax UNSET SYSTEM LICENSE ALL Description SAP HANA Database - SQL Reference Manual 143 2012-12-19 Deletes all currently installed license keys. After using this command the SAP HANA database will be locked down immediately and will require a new valid license key before it can be used further. The system privilege LICENSE ADMIN is required to execute this command. Example You delete all currently installed license keys. UNSET SYSTEM LICENSE ALL Session Management Statements CONNECT Syntax CONNECT <connect_option> Syntax Elements <connect_option> ::= <user_name> PASSWORD <password> | WITH SAML ASSERTION '<xml>' <user_name> ::= <simple_identifier> <password> ::= <letter_or_digit>... Description Connect to the database instance by specifying user_name and password or by specifying a SAML assertion. Example You create a SAML provider with the name ac_saml_provider specifying a subject and issuer for ACompany. CREATE SAML PROVIDER ac_saml_provider WITH SUBJECT 'CN = wiki.detroit.ACompany.corp,OU = ACNet,O = ACompany,C = EN' ISSUER 'E =
[email protected],CN = ACNetCA,OU = ACNet,O = ACompany,C = EN'; You create a user called new_user with password Password1. The user can connect to the system using the given password and with an assertion of the SAML provider ac_saml_provider. CREATE USER new_user PASSWORD Password1 WITH IDENTITY ANY FOR SAML PROVIDER ac_saml _provider; You connect to the database with the user name new_user and password Password1. CONNECT new_user PASSWORD Password1 SET HISTORY SESSION Syntax SET HISTORY SESSION TO <when> Elements <when>: User should specify an exact moment when the session is to travel <when> ::= NOW | COMMIT ID <commit_id> | UTCTIMESTAMP <timestamp> <commit_id> ::= <unsigned_integer> Description SET HISTORY SESSSION makes current session to see a previous version of history tables. User may specify the version in COMMIT ID or UTCTIMESTAMP format, or may get back to current version by specify NOW. After SAP HANA Database - SQL Reference Manual 144 2012-12-19 SET HISTORY SESSION command with a COMMIT ID or UTCTIMESTAMP is issued, current session sees an old version of history tables. If NOW option is given, current session gets back to a normal session, and sees current version of history tables. This command only works for history tables, and visibility on normal tables is not affected. System Tables and Monitoring Views The last commit id can be obtained from m_history_index_last_commit_id after each commit. The timestamp of the last commit can be obtained from m_transaction_history. Example You create a history column table x, so that you can time travel through the table's history. create history column table x ( a int, b int ); // after turnning off auto commit You insert some values into table x insert into x values (1,1); commit; insert into x values (2,2); commit; You obtain the commit id of the last commit. select last_commit_id from m_history_index_last_commit_id where session_id = curren t_connection; Note: please replace <last_comit_id> in the steps below with the value you obtained in this step. You delete all the data from table x. delete from x; commit; You time travel into the history of table x before you deleted the data and perform a select. set history session to commit id <last_comit_id>; select * from x; The select query above returns the two records (1,1) and (2,2), which existed before you deleted the contents of table x. You obtain the timestamp of <last_comit_id>. select commit_time from sys.transaction_history where commit_id = <last_comit_id>; Note: please replace <commit_time> in the steps below with the value you obtained in this step. You time travel into the history of table x using a timestamp and perform a select. set history session to utctimestamp '<commit_time>'; select * from x; The select query above returns the two records (1,1) and (2,2), which existed before you deleted the contents of table x. You set the history session to the current commit state and perform a select. set history session to now; select * from x; The select query returns an empty table because, at the current state, the table has had all of its data deleted. SET SCHEMA Syntax SAP HANA Database - SQL Reference Manual 145 2012-12-19 SET SCHEMA <schema_name> Syntax Elements <schema_name> ::= <string_literal> The name of the schema that the session should change to. Description Changes the current schema of the session. The current schema is used when SQL statements use database object names, for example table names, that are not prefixed with a schema name. Example You create new schema called MY_SCHEMA. CREATE SCHEMA MY_SCHEMA; You change the current schema of the session to MY_SCHEMA. SET SCHEMA MY_SCHEMA; SET [SESSION] Syntax SET [SESSION] <key> = <value> Syntax Elements <key> ::= <string_literal> The key of a session variable. The maximum length of key is 32 characters. <value> ::= <string_literal> The desired value of a session variable. The maximum length of value is 512 characters. Description With this command you can set session variables of your own database session by providing key and value pairs. Note: There are several available read-only session variables that you cannot change with this command: APPLICATION, APPLICATIONUSER, TRACEPROFILE. Session variables can be retrieved using SESSION_CONTEXT function and unset using the UNSET [SESSION] command. Example You set the session variable MY_VAR to 'abc'. SET 'MY_VAR' = 'abc'; You select the variable MY_VAR from the current session. SELECT SESSION_CONTEXT('MY_VAR') FROM dummy; You unset the session variable MY_VAR. UNSET 'MY_VAR'; SAP HANA Database - SQL Reference Manual 146 2012-12-19 UNSET [SESSION] Syntax UNSET [SESSION] <key> Syntax Elements <key> ::= <string_literal> The key of a session variable. The maximum length of key is 32 characters. Description Using UNSET [SESSION] you can unset session variables of the current session. Note: There are several read-only session variables and they are APPLICATION, APPLICATIONUSER, TRACEPROFILE. Example You set the session variable MY_VAR to 'abc'. SET 'MY_VAR' = 'abc'; You select the variable MY_VAR from the current session. SELECT SESSION_CONTEXT('MY_VAR') FROM dummy; You unset the session variable MY_VAR. UNSET 'MY_VAR'; Transaction Management Statements COMMIT Syntax COMMIT Description The system supports transactional consistency which guarantees current job to be either completely applied to the system or disposed. If a user wants to apply current job to the system persistently, the user should issue COMMIT command. If COMMIT command is issued and successfully processed, any change on the system which current transaction has done is applied to the system and the change will be visible to other jobs which will start in the future. The job which has already committed via COMMIT command cannot be reverted. In a distributed system, standard 2-phase-commit protocol is complied. In the first phase, transaction coordinator consults every participant whether if it is ready to commit, and sends the result to the participants in the second phase. COMMIT command only works with 'autocommit' disabled session. Example COMMIT LOCK TABLE Syntax LOCK TABLE <table_name> IN EXCLUSIVE MODE [NOWAIT] Syntax Elements <table_name> ::= [<schema_name>.]<identifier> SAP HANA Database - SQL Reference Manual 147 2012-12-19 <schema_name> ::= <identifier> For descriptions on schema name and identifier, please refer to Identifiers. Description LOCK TABLE command acquires an exclusive lock for a table. If the NOWAIT option is specified and LOCK TABLE fails to acquire lock an error code is returned. Note: When the error is generated the current transaction is not rolled-back. LOCK MODE: EXCLUSIVE Can be acquired by LOCK TABLE command explicitly or DDL command implicitly The transaction that holds the lock can read and write the table. Only the transaction that holds the lock can access the table. Lock requests for the table by other transactions are blocked while the EXCLUSIVE lock is held. The database releases acquired locks at the end of the transaction. LOCK MODE: INTENTIONAL EXCLUSIVE Acquired by DML implicitly. Multiple transactions can acquired a INTENTIONAL EXCLUSIVE lock. EXCLUSIVE lock requests for the table by other transactions are blocked while the INTENTIONAL EXCLUSIVE lock is held. The database releases acquired locks at the end of the transaction. System Tables and Monitoring Views The status of lock acquisition can be monitored with M_TABLE_LOCKS. Example You create table A. CREATE TABLE A (A INT PRIMARY KEY, B INT); You acquire an exclusive lock for table A. LOCK TABLE A IN EXCLUSIVE MODE You attempt to acquire an exclusive lock for table A and specify that an error should be returned if the lock cannot be immediately obtained. LOCK TABLE A IN EXCLUSIVE MODE NOWAIT ROLLBACK Syntax ROLLBACK Description The SAP HANA database supports transactional consistency which guarantees that a transaction will be completely applied to the system or disposed. During a transaction data manipulation language (DML) modifications to the database can be explicitly reverted via ROLLBACK command. After ROLLBACK command is issued, changes made during the current transaction are reverted and current database session is set to an idle state. ROLLBACK command only works with an autocommit disabled session. If you attempt to use the ROLLBACK statements in an autocommit enabled session, nothing will occur as transactions are automatically committed to the database. Example Note: Before attempting to execute the example below, please ensure that you are using an autocommit disabled session. SAP HANA Database - SQL Reference Manual 148 2012-12-19 You create a table T. CREATE TABLE T (KEY INT PRIMARY KEY, VAL INT); You insert three rows into table T. INSERT INTO T VALUES (1, 1); INSERT INTO T VALUES (2, 2); INSERT INTO T VALUES (3, 3); You rollback the current transaction. ROLLBACK; You select the data in table T. SELECT * FROM T; The SELECT command above returns an empty table. From this you can see that the data definition language (DDL) command used to create the table has persisted, but the DML used to create the table data has been rolled back. See Also For more information on changing the autocommit status of your database session, please see "Customizing the Administration Console" section in the "SAP HANA Administration guide" available from the SAP HANA Appliance page. SET TRANSACTION Syntax SET TRANSACTION <isolation_level> | <transaction_access_mode> Syntax Elements isolation_level ::= ISOLATION LEVEL <level> The isolation level sets the statement level read consistency of the data in the database. If <isolation_level> is ommited the default is READ COMMITTED level ::= READ COMMITTED | REPEATABLE READ | SERIALIZABLE READ COMMITTED The READ COMMITTED isolation level provides statement level read consistency during a transaction. Each statement in a transaction sees commited state of the data in the database as the execution of the statement begins. This means that each statement in the same transaction may see varying snapshots of the data in the database as they are executed as data can be commited during the transaction. REPEATABLE READ/SERIALIZABLE The REPEATABLE READ/SERIALIZABLE isolation level provides transaction level snapshot isolation. All statements of a transaction see the same snapshot of the database data. This snapshot contains all changes that were committed at the time the transaction started along with the changes made by the transaction itself. transaction_access_mode ::= READ ONLY | READ WRITE The SQL-transaction access mode controls if a transaction can modify data during execution. If transaction_access_mode is ommited the default is READ ONLY. READ ONLY When READ ONLY access mode is set, then only read operations with SELECT statements are allowed. An exception will be thrown if update or insert operations are attempted whilst in this mode. READ WRITE When READ WRITE access mode is set, statements within a transaction can freely read or make changes to the database data as required. Description SAP HANA Database - SQL Reference Manual 149 2012-12-19 Description The SAP HANA database uses multi-version concurrency control (MVCC) to ensure consistent read operations. Concurrent read operations see a consistent view of the database data without blocking concurrent write operations. Updates are implemented by inserting new versions of data and not by overwriting existing records. The isolation level specified determines the lock operation type that will be used. The system supports both statement level snapshot isolation and transaction level snapshot isolation. For statement snapshot isolation use level READ COMMITTED. For transaction snapshot isolation use REPEATABLE READ or SERIALIZABLE. During a transaction when rows are inserted, updated or deleted, the system sets exclusive locks on the affected rows for the duration of the transaction. The system also sets shared locks on the affected tables for the duration of the transaction. This guarantees that the table is not dropped or altered while rows of the table are being updated. The database releases these locks at the end of the transaction. Note: Reading a row does not set any locks on either tables or rows within the database regardless of the isolation level used. Data Definition Language and Transaction Isolation Data Definition Language (DDL) statements (CREATE TABLE, DROP TABLE, CREATE VIEW, etc) always take an instantaneous effect on following SQL statements regardless of the transaction isolation level being used. For an example of this behaviour please consider the following sequence: 1. A long running SERIALIZABLE isolation transaction begins operating on Table C. 2. From outside the transaction some DDL is executed which adds a new column to Table C. 3. From within the SERIALIZABLE isolation transaction the new column will be accessible as soon as the DDL statement completes. This access occurs regardless of the isolation level of the transaction. Example You set the transaction isolation level to READ COMMITTED to provide statement level read consistency during the current transaction. SET TRANSACTION ISOLATION LEVEL READ COMMITTED; Access Control Statements ALTER SAML PROVIDER Syntax ALTER SAML PROVIDER <saml_provider_name> SET SUBJECT <subject_distinguished_name> I SSUER <issuer_distinguished_name> Syntax Elements <saml_provider_name> ::= <simple_identifier> The identifier of a SAML provider to be altered. <subject_distinguished_name> ::= <string_literal> The subject name provided in the certificate of the SAML identity provider. <issuer_distinguished_name> ::= <string_literal> The issuer name provided in the certificate of the SAML identity provider. Description The ALTER SAML PROVIDER statement changes the property of a SAML provider known to the SAP HANA database. <saml_provider_name> has to be an existing SAML provider created using the CREATE SAML PROVIDER command. SAP HANA Database - SQL Reference Manual 150 2012-12-19 Only database users having the system privilege USER ADMIN are allowed to change a SAML provider. System and Monitoring Views SAML_PROVIDERS: shows all SAML providers with their subject name and issuer_name. Example You create the ac_saml_provider SAML provider. CREATE SAML PROVIDER ac_saml_provider WITH SUBJECT 'CN = wiki.detroit.ACompany.corp,OU = ACNet,O = ACompany,C = EN' ISSUER 'E =
[email protected],CN = ACNetCA,OU = ACNet,O = ACompany,C = EN'; You view the current defined SAML providers in the SAP HANA database. select * from sys.SAML_PROVIDERS You alter the ac_saml_provider. ALTER SAML PROVIDER ac_saml_provider SET SUBJECT 'CN = wiki.detroit.BCompany.corp,OU = BCNet,O = BCompany,C = EN' ISSUER 'E =
[email protected],CN = BCNetCA,OU = BCNet,O = BCompany,C = EN '; You check the current defined SAML providers in the SAP HANA database. You should now see the updated SAML provider. select * from sys.SAML_PROVIDERS See Also CREATE SAML PROVIDER ALTER USER Syntax ALTER USER <user_name> <alter_user_option> Syntax Elements <user_name> ::= <simple_identifier> <alter_user_option> ::= PASSWORD <password> [<user_parameter_option>] | <user_parameter_option> | IDENTIFIED EXTERNALLY AS <external_identity> [<user_parame ter_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 <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> | <string_literal> SAP HANA Database - SQL Reference Manual 151 2012-12-19 <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> Description The ALTER USER statement modifies the database user. <user_name> must specify an existing database user. Each user can do the ALTER USER statement for his own. But not all of the <alter_user_option>s can be specified by the user himself. The ALTER USER statement for other users with all <alter_user_option>s can only be done by users having the system privilege USER ADMIN. Users created with PASSWORD cannot be changed to EXTERNALLY and vice versa: the users created with EXTERNALLY cannot be changed to PASSWORD. But their <password> or their <external_identity> can be changed. You can change a user's password with this command. Password must follow the rules defined for the current database. The password rules include the minimal password length and the definition which of the character types ( lower, upper, digit, special characters ) have to be part of the password. The password for a user has to be changed regularly according to the password policy specified for the database instance or changed by the user himself when first connecting to the database instance. You can change the external authentication. External users are authenticated using an external system, e.g. a Kerberos system. Such users do not have a password, but , e.g. a Kerberos principal name. For detailed information about external identities, contact your domain administrator. <user_parameter_option> can be used to set, change or clean the user parameter CLIENT. <set_user_parameters> can be used to set the user parameter CLIENT for a user in the database. When using reports this user parameter CLIENT can be used to restrict the access rights of user <user_name> to info concerning the specified client. The <user_parameter_option> can not be specified by the user himself. If the number of MAXIMUM_INVALID_CONNECT_ATTEMPTS (see monitoring view M_PASSWORD_POLICY) is reached before a successful (correct user/password-combination) connect is done, then this user is locked for some minutes before being allowed to connect (even with correct user/password-combination) again. With the command ALTER USER <user_name> RESET CONNECT ATTEMPTS a user with system privilege USER ADMIN can reset the number of invalid attempts to 0 and therefore allow the user to connect immediately. Information on invalid connect attempts having happened can be checked in system view INVALID_CONNECT_ATTEMPTS. With the command ALTER USER <user_name> DROP CONNECT ATTEMPTS a user with system privilege USER ADMIN or the user himself can delete the information of invalid connect attempts having happened. With the command ALTER USER <user_name> DISABLE PASSWORD LIFETIME a user with system privilege USER ADMIN can exclude user <user_name> from all password-life-time-checks. This should be used only for technical users, not for normal database users. Please check the description of configuration parameters concerning the password policy. With the command ALTER USER <user_name> FORCE PASSWORD CHANGE a user with system privilege USER ADMIN can force user <user_name> to change his password immediately after the next connect before being allowed to work any further. With the command ALTER USER <user_name> DEACTIVATE USER NOW a user with system privilege USER ADMIN can deactivate / lock the user account of user <user_name>. After the user account is deactivated / locked, the user cannot connect to the SAP HANA database. To re-activate / unlock user <user_name> a user with system privilege USER ADMIN has either to use the command ALTER SAP HANA Database - SQL Reference Manual 152 2012-12-19 USER <user_name> ACTIVATE USER NOW or, in case of a user with PASSWORD authentication mechanism, to reset the user's password with ALTER USER <user_name> PASSWORD <password>. With the command ALTER USER <user_name> ACTIVATE USER NOW a user with system privilege USER ADMIN can re-activate / unlock the user account of user <user_name> who had been deactivated before. Configuration Parameter Conguration parameters concerning the password can be checked with the monitoring view M_PASSWORD_POLICY. These parameter are stored in indexserver.ini, section 'password policy'. The description of the parameters concerned can be found in SAP HANA Security Guide, Appendix, Password Policy Parameters. System and Monitoring Views USERS: shows all users, their creator, creation date and some info about their current states. USER_PARAMETERS: shows the defined user_parameters; currently only CLIENT is available. INVALID_CONNECT_ATTEMPTS: shows how many invalid connect attempts were made for each user. LAST_USED_PASSWORDS: shows info about dates of last password-changes per user. M_PASSWORD_POLICY: shows configuration parameters describing the allowed layout of the password and its lifetimes. Examples You create a SAML provider named ac_saml_provider in the database specifying a subject and issuer for ACompany. CREATE SAML PROVIDER ac_saml_provider WITH SUBJECT 'CN = wiki.detroit.ACompany.corp,OU = ACNet,O = ACompany,C = EN' ISSUER 'E =
[email protected],CN = ACNetCA,OU = ACNet,O = ACompany,C = EN'; You create user named new_user that can connect using a password or with an assertion of the SAML provider ac_saml_provider. The <mapped_user_name> was set to ANY as the assertion will provide the database user name. CREATE USER new_user PASSWORD Password1 WITH IDENTITY ANY FOR SAML PROVIDER ac_saml _provider; You force the user to change their password. ALTER USER new_user FORCE PASSWORD CHANGE; You disable SAML authentication for the user. ALTER USER new_user DISABLE SAML; You reset the number of invalid connect attempts to zero for new_user. ALTER USER new_user RESET CONNECT ATTEMPTS; You define the external identity for KERBEROS and enable KERBEROS for this user. ALTER USER new_user ADD IDENTITY 'testkerberosName' FOR KERBEROS; ALTER USER new_user ENABLE KERBEROS; Note: Adding an external identification mechanism to a user does not automatically enable it. You must do this as a separate step as shown in this example. You remove ac_saml_provider SAML provider identity from new_user. ALTER USER new_user DROP IDENTITY FOR SAML PROVIDER ac_saml_provider; You disable the account. ALTER USER new_user DEACTIVATE; CREATE ROLE SAP HANA Database - SQL Reference Manual 153 2012-12-19 Syntax CREATE ROLE <role_name> Syntax Elements <role_name> ::= <identifier> Description The CREATE ROLE statement creates a new role. Only database users with the system privilege ROLE ADMIN are allowed to create roles. The specified role name must not be identical to the name of an existing user or role. A role is a named collection of privileges and can be granted to either a user or a role. If you want to allow several database users to perform the same actions, you can create a role, grant the needed privileges to this role, and then grant the role to the database users. Every user is allowed to grant privileges to an existing role, but only users having system privilege ROLE ADMIN are allowed to grant roles to roles and users. There are 5 roles that are delivered with the SAP HANA database: PUBLIC Every database user is granted this role automatically. This role contains read-only access to system views, monitoring views and execute privileges for some procedures. These privileges cannot be revoked. This role can be granted further privileges which can then be revoked afterwards. MODELING This role contains all privileges required for using the information modeler in the SAP HANA studio. CONTENT_ADMIN This role contains the same privileges as the MODELING role, but with the addition that this role is allowed to grant these privileges to other users. In addition, it contains the repository privileges to work with imported objects. MONITORING This role contains privileges for full read-only access to all meta data, the current system status in system and monitoring views, and the data of the statistics server. SUPPORT This role is to be used for SAP support. This role contains privileges for full read-only access to all meta data, the current system status in system and monitoring views, and the data of the statistics server. Additionally it contains the privileges to access the base information of the system and monitoring views. This information is usually only accessible by the SYSTEM user. To ensure this role is used only for support there are some restrictions place on it: it cannot be granted to database user SYSTEM it cannot be granted to more than one database user at a time it cannot be granted to another role no role can be granted to it only systemprivileges (see GRANT statement) can be granted to this role. However for security reasons SAP recommends systemprivileges should be granted to the user and not to the SUPPORT role. with every upgrade of the SAP HANA database the privileges in this role are reset the default settings. System and Monitoring Views ROLES: displays all roles, their creator and creation date. GRANTED_ROLES: displays the roles that are granted to users or roles. GRANTED_PRIVILEGES: displays the privileges that are granted to users or roles. Example You create a role with the name role_for_work_on_my_schema. SAP HANA Database - SQL Reference Manual 154 2012-12-19 CREATE ROLE role_for_work_on_my_schema; CREATE SAML PROVIDER Syntax CREATE SAML PROVIDER <saml_provider_name> WITH SUBJECT <subject_distinguished_name> ISSUER <issuer_distinguished_name> Syntax Elements <saml_provider_name> ::= <simple_identifier> The identifier of a SAML provider to be created. <subject_distinguished_name> ::= <string_literal> The subject name provided in the certificate of the SAML identity provider. <issuer_distinguished_name> ::= <string_literal> The issuer name provided in the certificate of the SAML identity provider Description The CREATE SAML PROVIDER statement defines a SAML provider that will be known to the SAP HANA database. <saml_provider_name> has to be unique from any existing SAML provider. Only database users having the system privilege USER ADMIN are allowed to create a SAML provider. Each user having this privilege is also allowed to drop any SAML provider. A SAML provider is required to be able to provide a SAML connection facility for users. The <subject_distinguished_name> and the <issuer_distinguished_name> are the X.500 distinguished names corresponding to the subject and issuer of the X.509 certificate used by the SAML identity provider to sign assertions. The syntax of these names can be found in ISO/IEC 9594-1. A detailed description of the concepts of SAML can be found in Oasis SAML 2.0. System and Monitoring Views SAML_PROVIDERS: shows all SAML providers with their subject name and issuer name. Example You create a SAML provider with the name ac_saml_provider in the database specifying the subject and issuer to belong to ACompany. CREATE SAML PROVIDER ac_saml_provider WITH SUBJECT 'CN = wiki.detroit.ACompany.corp,OU = ACNet,O = ACompany,C = EN' ISSUER 'E =
[email protected],CN = ACNetCA,OU = ACNet,O = ACompany,C = EN'; CREATE USER Syntax CREATE USER <user_name> [PASSWORD <password>] [IDENTIFIED EXTERNALLY AS <external_identity>] [WITH IDENTITY <provider_identity>...] [<set_user_parameters>] Syntax Elements <user_name> ::= <simple_identifier> <password> ::= <letter_or_digit>... <external_identity> ::= <simple_identifier> | <string_literal> <provider_identity> ::= <mapped_user_name> FOR SAML PROVIDER <saml_provider_name> SAP HANA Database - SQL Reference Manual 155 2012-12-19 | <external_identity> FOR KERBEROS <mapped_user_name> ::= ANY | <string_literal> <saml_provider_name> ::= <simple_identifier> <set_user_parameters> ::= SET PARAMETER CLIENT = <string_literal> Description The CREATE USER statement creates a new database user. Only database users having the system privilege USER ADMIN are allowed to create another database user. The specified user name must not be identical to the name of an existing user, role, or schema. There are some users, which are delivered with the SAP HANA database: SYS, SYSTEM, _SYS_REPO, _SYS_STATISTICS. Users in the database can be authenticated by different mechanism, the internal authentication mechanism using password and by external mechanism, like Kerberos or SAML. One user can be authenticated by more than one mechanism at one time, but only one password and one external_identity can be valid at one time. In opposite to this, more than one <provider_identity> can exist for one user at one time. At least one authentication mechanism has to be specified to allow the user to connect and work with the database instance. For compatibility reasons the syntax IDENTIFIED EXTERNALLY AS <external_identity> will stay alive and do the same as the syntax <external_identity> FOR KERBEROS. Password must follow the rules defined for the current database. The password rules include the minimal password length and the definition which of the character types ( lower, upper, digit, special characters ) have to be part of the password. The password for a user has to be changed regularly according to the password policy specified for the database instance. The password provided during CREATE USER command will be taken as provided, whereas the <user_name> will be changed to upper_case as every <simple_identifier>. External users are authenticated using an external system, e.g. a Kerberos system. Such users do not have a password, but , e.g. a Kerberos principal name. For detailed information about external identities, contact your domain administrator. If ANY is given as mapped user name, the SAML assertion will contain the name of the database user, the assertion is valid for. <saml_provider_name> must specify an existing SAML provider. <set_user_parameters> can be used to set the user parameter CLIENT when a user is created in the database. When using reports this user parameter CLIENT can be used to restrict the access rights of user <user_name> to info concerning the specified client. For each database user a schema with the user's name is created implicitly. This can not be dropped explicitly. It will be dropped when the user is dropped. The database user owns that schema and uses it as his default schema, when he does not specify a schema name explicitly. Configuration Parameter Conguration parameters concerning the password can be checked with the monitoring view M_PASSWORD_POLICY. These parameter are stored in indexserver.ini, section 'password policy'. The description of the parameters concerned can be found in SAP HANA Security Guide, Appendix, Password Policy Parameters. System and Monitoring Views USERS: shows all users, their creator, creation date and some info about their current states. USER_PARAMETERS: shows the defined user_parameters; currently only CLIENT is available. INVALID_CONNECT_ATTEMPTS: shows how many invalid connect attempts were made for each user. LAST_USED_PASSWORDS: shows info about dates of last password-changes per user. M_PASSWORD_POLICY: shows configuration parameters describing the allowed layout of the password and its lifetimes. SAML_PROVIDERS: shows the existing SAML provider SAML_USER_MAPPING: shows the user's mapping names for each SAML provider Examples Example 1 - Create user with password. You create a user T12345 with a password Password123. SAP HANA Database - SQL Reference Manual 156 2012-12-19 You create a user T12345 with a password Password123. CREATE USER T12345 PASSWORD Password123 Example 2 - Create user that uses an external authentication mechanism. You create a SAML provider named ac_saml_provider in the database, specifying a subject and issuer for ACompany. CREATE SAML PROVIDER ac_saml_provider WITH SUBJECT 'CN = wiki.detroit.ACompany.corp,OU = ACNet,O = ACompany,C = EN' ISSUER 'E =
[email protected],CN = ACNetCA,OU = ACNet,O = ACompany,C = EN'; You create a user called new_user with password Password1. The user can connect to the system using the given password and with an assertion of the existing SAML provider ac_saml_provider. The <mapped_user_name> is set to ANY as the assertion will provide the database user name. CREATE USER new_user PASSWORD Password1 WITH IDENTITY ANY FOR SAML PROVIDER ac_saml _provider; DROP ROLE Syntax DROP ROLE <role_name> Syntax Elements <role_name> ::= <identifier> Description The DROP ROLE statement drops a role. <role_name> must specify an existing role. Only database users having the system privilege ROLE ADMIN are allowed to drop a role. Each user having this privilege is allowed to drop any role. Only those roles which are delivered with the SAP HANA database cannot be dropped: PUBLIC, CONTENT_ADMIN, MODELING, MONITORING and SUPPORT. If a role was granted to a user or role, it is revoked when the role is dropped. Revoking a role may lead to making some views inaccessible or making procedures not executable. This will occur if a view or procedures depends on any privilege of the dropped role. System and Monitoring Views ROLES: displays all roles, their creator and creation date. GRANTED_ROLES: displays the roles that are granted to users or roles. GRANTED_PRIVILEGES: displays the privileges that are granted to users or roles. Example A role with the name role_for_work_on_my_schema is created and dropped immediately afterwards; CREATE ROLE role_for_work_on_my_schema; DROP ROLE role_for_work_on_my_schema; DROP SAML PROVIDER Syntax DROP SAML PROVIDER <saml_provider_name> Syntax Elements <saml_provider_name> ::= <simple_identifier> Description SAP HANA Database - SQL Reference Manual 157 2012-12-19 The DROP SAML PROVIDER statement drops the specified SAML provider. <saml_provider_name> has to be an existing SAML provider. If the SAML provider specified is used by a SAP HANA database user, the SAML provider cannot be dropped. Only database users having the system privilege USER ADMIN are allowed to drop a SAML provider. System and Monitoring Views SAML_PROVIDERS: shows all SAML providers with their subject name and issuer_name. Example You create SAML provider named ac_saml_provider, specifying a subject and issuer for ACompany. CREATE SAML PROVIDER ac_saml_provider WITH SUBJECT 'CN = wiki.detroit.ACompany.corp,OU = ACNet,O = ACompany,C = EN' ISSUER 'E =
[email protected],CN = ACNetCA,OU = ACNet,O = ACompany,C = EN'; You drop the SAML provider ac_saml_provider. DROP SAML PROVIDER ac_saml_provider DROP USER Syntax DROP USER <user_name> [<drop_option>] Syntax Elements <user_name> ::= <simple_identifier> <drop_option> ::= CASCADE | RESTRICT Default = RESTRICT Description The DROP USER statement deletes a database user. <user_name> must specify an existing database user. Only database users having the system privilege USER ADMIN are allowed to drop a database user. Each user having this privilege is allowed to drop any user. Only those users which are delivered with the SAP HANA database can not be dropped: SYS, SYSTEM, _SYS_REPO, _SYS_STATISTICS. If the <drop_option> RESTRICT is specified implicitly or explicitly then the user will not be dropped in case he is the owner of any other object than the schema with his name and other schemas created by him or in case there is an object stored in one of his schemas which was not created by him. If the <drop_option> CASCADE is specified, the schema with the user's name and the schemas belonging to the user, together with all objects stored in them (even if they are created by other users), are deleted. Objects owned by the user, even if they are part of another schema, are deleted. Objects that are dependent on deleted objects are deleted. Even public synonyms owned by the deleted user are deleted. Privileges on deleted objects are revoked. Privileges granted by the deleted user are revoked. Revoke privileges may cause further revokes if they had been granted further. Users created by the deleted user and roles created by him are not deleted. Audit policies created by the deleted user are not deleted. It is possible to delete a user even if an open session of this user exists. System and Monitoring Views The deleted user will be deleted in any of these views: USERS: shows all users, their creator, creation date and some info about their current states. USER_PARAMETERS: shows the defined user_parameters; currently only CLIENT is available. INVALID_CONNECT_ATTEMPTS: shows how many invalid connect attempts were made for each user. LAST_USED_PASSWORDS: shows info about dates of last password-changes per user. * The deletion of objects may influence all of the system views describing objects, like TABLES, VIEWS, PROCEDURES, ... . SAP HANA Database - SQL Reference Manual 158 2012-12-19 The deletion of objects may influence the view describing privileges like GRANTED_PRIVILEGES and all of the monitoring views like M_RS_TABLES, M_TABLE_LOCATIONS, ... Example A user with user_name NEW_USER was created before with, for example, this statemant: CREATE USER new_user PASSWORD Password1; The existing user new_user will now be dropped, together with all of his objects; DROP USER new_user CASCADE; GRANT Syntax GRANT <system_privilege>,... TO <grantee> [WITH ADMIN OPTION] | GRANT <schema_privilege>,... ON SCHEMA <schema_name> TO <grantee> [WITH GRANT OPT ION] | 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> Syntax Elements <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 | TRUST ADMIN | USER ADMIN | VERSION ADMIN | <identifier>.<identifier> System privileges are used to restrict administrative tasks. The table below describes the supported system privileges. SAP HANA Database - SQL Reference Manual 159 2012-12-19 System Privilege Privilege Purpose Comment AUDI T ADMI N Control s the executi on of the fol l owi ng audi ti ng-rel ated commands: CREATE AUDI T POLI CY, DROP AUDI T POLI CY and ALTER AUDI T POLI CY and the changes of the audi ti ng confi gurati on. BACKUP ADMI N Authori zes the BACKUP command to defi ne and i ni ti ate a backup process or to perform a recovery process. CATALOG READ Authori zes users to have unfi l tered read-onl y access to al l system and moni tori ng vi ews. Normal l y, the content of these vi ews i s fi l tered based on the pri vi l eges of the accessi ng user. CREATE SCENARI O Control s the creati on of cal cul ati on scenari os and cubes (cal cul ati on database) CREATE SCHEMA Authori zes the creati on of database schemas usi ng the CREATE SCHEMA command.By defaul t each user owns one schema, wi th thi s pri vi l ege the user i s al l owed to create addi ti onal schemas. CREATE STRUCTURED PRI VI LEGE Authori zes the creati on of Structured Pri vi l eges (Anal yti cal Pri vi l eges) Onl y the owner of an Anal yti cal Pri vi l ege can further grant or revoke that pri vi l ege to other users or rol es. DATA ADMI N Authori zes readi ng al l data i n the system and moni tori ng vi ews. I t al so enabl es executi on of any Data Defi ni ti on Language (DDL) commands i n the SAP HANA database A user havi ng thi s pri vi l ege cannot sel ect or change data stored tabl es for whi ch they do not have access pri vi l eges, but they can drop tabl es or modi fy tabl e defi ni ti ons. EXPORT Authori zes export acti vi ty i n the database vi a the EXPORT TABLE command.Note that besi de thi s pri vi l ege the user requi res the SELECT pri vi l ege on the source tabl es to be exported. I MPORT Authori zes the i mport acti vi ty i n the database usi ng the I MPORT commands. Note that besi de thi s pri vi l ege the user requi res the I NSERT pri vi l ege on the target tabl es to be i mported. I NI FI LE ADMI N Authori zes changi ng of system setti ngs. LI CENSE ADMI N Authori zes the SET SYSTEM LI CENSE command i nstal l a new l i cense. LOG ADMI N Authori zes the ALTER SYSTEM LOGGI NG [ON|OFF] commands to enabl e or di sabl e the l og fl ush mechani sm. MONI TOR ADMI N Authori zes the ALTER SYSTEM commands for EVENTs. OPTI MI ZER ADMI N Authori zes the ALTER SYSTEM commands concerni ng SQL PLAN CACHE and ALTER SYSTEM UPDATE STATI STI CS commands, whi ch i nfl uence the behavi or of the query opti mi zer. RESOURCE ADMI N Thi s pri vi l ege authori zes commands concerni ng system resources, for exampl e ALTER SYSTEM RECLAI M DATAVOLUME and ALTER SYSTEM RESET MONI TORI NG VI EW. I t al so authori zes many of the commands avai l abl e i n the Management Consol e. ROLE ADMI N Thi s pri vi l ege authori zes the creati on and del eti on of rol es usi ng the CREATE ROLE and DROP ROLE commands. I t al so authori zes the granti ng and revocati on of rol es usi ng the GRANT and REVOKE commands. Acti vated rol es, meani ng rol es whose creator i s the pre-defi ned user _SYS_REPO, can nei ther be granted to other rol es or users nor dropped di rectl y. Not even users havi ng ROLE ADMI N pri vi l ege are abl e to do so. Pl ease check documentati on concerni ng acti vated objects. SAVEPOI NT ADMI N Authori zes the executi on of a savepoi nt process usi ng the ALTER SAP HANA Database - SQL Reference Manual 160 2012-12-19 SYSTEM SAVEPOI NT command. SCENARI O ADMI N Authori zes al l cal cul ati on scenari o- rel ated acti vi ti es (i ncl udi ng creati on). SERVI CE ADMI N Authori zes the ALTER SYSTEM [START|CANCEL|RECONFI GURE] commands. Thi s pri vi l ege i s for admi ni steri ng system servi ces of the database SESSI ON ADMI N authori zes the ALTER SYSTEM commands concerni ng sessi ons to stop or di sconnect a user sessi on or to change sessi on vari abl es. STRUCTUREDPRI VI LEGE ADMI N Authori zes the creati on, reacti vati on, and droppi ng of structured pri vi l eges. TRACE ADMI N Authori zes the ALTER SYSTEM [CLEAR|REMOVE] TRACES commands for operati ons on database trace fi l es and authori zes changi ng trace system setti ngs. TRUST ADMI N Authori zes commands to update the trust store. USER ADMI N Authori zes the creati on and modi fi cati on of users usi ng the CREATE USER, ALTER USER, and DROP USER commands. VERSI ON ADMI N Authori zes the ALTER SYSTEM RECLAI M VERSI ON SPACE command of the mul ti -versi on concurrency control (MVCC) mechani sm. <i denti fi er>.<i denti fi er> Components of the SAP HANA database can create new system pri vi l eges. These pri vi l eges use the component-name as fi rst i denti fi er of the system pri vi l ege and the component-pri vi l ege-name as the second i denti fi er. <schema_privilege> ::= CREATE ANY | DEBUG | DELETE | DROP | EXECUTE | INDEX | INSERT | SELECT | TRIGGER | UPDATE Schema privileges are used to restrict the access and modifications on a schema and the objects stored in this schema. The following schema privileges are defined: CREATE ANY This privilege allows the creation of all kinds of objects, in particular, tables, views, sequences, synonyms, SQLScript functions, or database procedures in a schema. DELETE, DROP, EXECUTE, INDEX, INSERT, SELECT, UPDATE The specified privilege is granted on every object stored in the specified schema currently and in future. For detailed description of the privileges please see the part describing object privileges below and please check below, which privileges are applicable for which kind of object. <object_privilege> ::= ALL PRIVILEGES | ALTER | DEBUG | DELETE | DROP | EXECUTE | INDEX | INSERT | SELECT | REFERENCES | TRIGGER | UPDATE | <identifier>.<identifier> Object privileges are used to restrict the access and modifications on database objects. Database objects are tables, views, sequences, procedures, etc. The table below describes the supported object privileges. SAP HANA Database - SQL Reference Manual 161 2012-12-19 Object Privilege Command Types Privilege Description Comment ALL PRI VI LEGES DDL & DML Thi s pri vi l ege i s a col l ecti on of al l Data Defi ni ti on Language(DDL) and Data Mani pul ati on Language(DML) pri vi l eges that the grantor currentl y possesses and i s al l owed to grant further. The pri vi l ege i t grants i s speci fi c to the parti cul ar object bei ng acted upon. Thi s pri vi l ege col l ecti on i s dynami cal l y eval uated for the gi ven grantor and object. ALL PRI VI LEGES i s appl i cabl e to a tabl e or vi ew ALTER DDL Authori zes the ALTER command for the object DEBUG DML Authori zes debug-functi onal i ty for the procedure or cal cul ati on vi ew or for the procedures and cal cul ati on vi ews of a schema. DELETE DML Authori zes the DELETE and TRUNCATE commands for the object DROP DDL Authori zes the DROP commands for the object EXECUTE DML Authori zes the executi on of an SQLScri pt functi on or a database procedure usi ng the CALLS or CALL command respecti vel y. I NDEX DDL Authori zes the creati on, modi fi cati on or droppi ng of i ndexes for the object I NSERT DML Authori zes the I NSERT command for the object. The I NSERT and UPDATE pri vi l ege are both requi red on the object to al l ow the REPLACE and UPSERT commands to be used. REFERENCES DDL Authori zes the usage of al l tabl es i n thi s schema or thi s tabl e i n a forei gn key defi ni ti on. SELECT DML Authori zes the SELECT command for thi s object or the usage of a sequence. TRI GGER DDL Authori zes the CREATE TRI GGER / DROP TRI GGER command for the speci fi ed tabl e or the tabl es i n the speci fi ed schema. UPDATE DML Authori zes the UPDATE command for that object. he I NSERT and UPDATE pri vi l ege are both requi red on the object to al l ow the REPLACE and UPSERT commands to be used. The UPDATE pri vi l ege i s al so requi red to perform del ta merges of col umn store tabl es usi ng the MERGE DELTA command. <i denti fi er>.<i denti fi er> DDL Components of the SAP HANA database can create new system pri vi l eges. These pri vi l eges use the component-name as fi rst i denti fi er of the system pri vi l ege and the component-pri vi l ege- name as the second i denti fi er. Not all object privileges are applicable to all kinds of database objects. For details of which object types allow which privilege to be used please see the table below. SAP HANA Database - SQL Reference Manual 162 2012-12-19 Privilege Schema Table View Sequence Function/Procedure ALL PRI VI LEGES --- YES YES --- --- ALTER YES YES --- --- YES CREATE ANY YES --- --- --- --- DEBUG YES --- YES --- YES DELETE YES YES YES --- --- DROP YES YES YES YES YES EXECUTE YES --- --- --- YES I NDEX YES YES --- --- --- I NSERT YES YES YES --- --- REFERENCES YES YES --- --- --- SELECT YES YES YES YES --- TRI GGER YES YES --- --- --- UPDATE YES YES YES --- --- DELETE, INSERT and UPDATE on views are valid for updatable views only. Updatable views have the following characteristics: Does not use a join Does not contain a UNION Does not use aggregation DEBUG is only valid for calculation views. For synonyms, the same restrictions apply to the synonym as they would do for the object the synonym represents. <object_name> ::= <table_name> | <view_name> | <sequence_name> | <procedure_name> | <synonym_name> Object privileges are used to restrict the access and modifications on database objects like tables, views, sequences, procedures and synonyms. <grantee> :: = <user_name> | <role_name> The grantee can be a user or a role. In case a privilege or role is granted to a role, then all user being granted that role, will have the specified privilege or role. A role is a named collection of privileges and can be granted to either a user or a role. If you want to allow several database users to perform the same actions, you should create a role, grant the needed privileges to this role, and finally grant the role to the different database users. When granting roles to roles, a tree of roles can be build. When granting a role (R) to a role or user (G), G will have all privileges directly granted to R and all privileges granted to roles which had been granted to R. <user_name> ::= <simple_identifier> The grantee username. <role_name> ::= <identifier> The grantee role name. <schema_name> ::= <identifier> The schema containing the database object to be acted upon. <table_name> ::= [<schema_name>.]<identifier> The database table object name. <view_name> ::= [<schema_name>.]<identifier> SAP HANA Database - SQL Reference Manual 163 2012-12-19 The database view object name. <sequence_name> ::= [<schema_name>.]<identifier> The sequence object name. <procedure_name> ::= [<schema_name>.]<identifier> The procedure object name. <synonym_name> ::= [<schema_name>.]<identifier> The synonym name. <privilege_name> ::= <identifier> The name of the privilege to be granted. WITH ADMIN OPTION and WITH GRANT OPTION Specifies that the granted privileges can be granted further by the specified user or by those user having the specified role. With GRANT STRUCTURED PRIVILEGE <privilege_name> A previously defined analytical privilege based on a generic structured privilege is granted to a user or role. This analytical privileges is used to restrict the access for read operations to certain data in Analytic, Attribute, and Calculation Views by filtering the attribute values. Description GRANT is used to grant privileges and structured privileges to users and roles. GRANT is also used to grant roles to users and other roles. The specified users, roles, objects, and structured privileges have to exist before they can be used in the GRANT command. In order to use the GRANT command to grant privileges to other users and roles, a user must have the privilege and also the permissions required to grant that privilege. A user can not grant a privilege to themselves. User SYSTEM has at all system privileges and the role PUBLIC. All other users have the role PUBLIC. These privileges and roles cannot be revoked. Although the SYSTEM user has many privileges, it cannot select or change data in other user's tables unless this privilege has been explicitly granted. All users have the privilege to create objects in their own default schema. The default schema for a user always has the same schema name as the user. For tables created by users, users have all privileges and may grant all privilges further to other users and roles. For objects which are dependent on other objects, like views being dependent on tables, it can occur the owner of the dependent object does not have a complete set of privileges. This can occur if the user do not have the privileges on the underlying objects on which their object depends. Users can have privileges on an object, but may not have sufficient priviliges to grant them to other users and roles. System and Monitoring Views USERS: shows all users, their creator, creation date and some info about their current states. ROLES: shows all roles, their creator and creation date. GRANTED_ROLES: shows which roles are granted to which user or role. GRANTED_PRIVILEGES: shows which privileges are granted to which user or role. Examples You create a schema called my_schema. SAP HANA Database - SQL Reference Manual 164 2012-12-19 CREATE SCHEMA my_schema; You create a table named work_done in the my_schema schema. CREATE TABLE my_schema.work_done (t TIMESTAMP, user NVARCHAR (256), work_done VARCH AR (256)); You create a new user named worker with password His_Password_1. CREATE USER worker PASSWORD His_Password_1; You create role called role_for_work_on_my_schema. CREATE ROLE role_for_work_on_my_schema; You grant the SELECT on any object privilege in my_schema to the role role_for_work_on_my_schema. GRANT SELECT ON SCHEMA my_schema TO role_for_work_on_my_schema; You grant the INSERT privilege for the work_done table to the role role_for_work_on_my_schema. GRANT INSERT ON my_schema.work_done TO role_for_work_on_my_schema; You grant the role_for_work_on_my_schema role to the worker user. GRANT role_for_work_on_my_schema TO worker WITH ADMIN OPTION; You grant DELETE privilige for this table to the worker user. GRANT DELETE ON my_schema.work_done TO worker; You grant the worker user the privilege to create any kind of object in the my_schema schema. GRANT CREATE ANY ON SCHEMA my_schema TO worker; The result of the above commands is that the worker user has the privilege to SELECT all tables and views in schema my_schema, to INSERT into and DELETE from table my_schema.work_done and to create objects in schema my_schema. Additionally the worker user is allowed to grant DELETE on the table myschema.work_done to other users and roles. You grant the privileges INIFILE ADMIN and TRACE ADMIN to the user worker. You grant these privileges along with the permission for the worker user to grant them further. GRANT INIFILE ADMIN, TRACE ADMIN TO worker WITH ADMIN OPTION; REVOKE Syntax 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> | REVOKE APPLICATION PRIVILEGE <privilege_name> FROM <grantee> Syntax Elements For the definition of syntax elements, please refer to GRANT. Description The REVOKE statement revokes the specified roles or structured privileges or the privileges for the specified objects from the specified users or roles. Only users having granted a privilege can revoke that privilege. This is true even for users having ROLE ADMIN and the revoke of roles. User SYSTEM has at least all system privileges and the role PUBLIC. All other users have the role PUBLIC. These privileges and roles can not be revoked from them. SAP HANA Database - SQL Reference Manual 165 2012-12-19 If a user was granted a role, it is not possible to revoke some of the privileges belonging to that role. In this case, the whole role has to be revoked and those privileges needed by that user granted to him. Revoking a privilege or role may lead to making some views inaccessible or making procedures not executable any more. This will occur if a view or procedures depends on the privilege revoked or on one of the privileges the role had. Revoking a privilege which had been granted with WITH GRANT OPTION or with WITH ADMIN OPTION will result in revoking that privilege not only from the user specified in the command, but from all the users and roles having been granted that privilege by this user directly and indirectly. As privileges can be granted to one user or role by different users, revoking of this privilege by one user does not necessarily mean, that this user will loose that privilege. For the description of syntax elements and privileges, please refer to GRANT. System and Monitoring Views USERS: shows all users, their creator, creation date and some info about their current states. ROLES: shows all roles, their creator and creation date. GRANTED_ROLES: shows which roles are granted to which user or role. GRANTED_PRIVILEGES: shows which privileges are granted to which user or role. Example You create new user named worker. CREATE USER worker PASSWORD His_Password_1; You create new role named role_for_work_on_my_schema. CREATE ROLE role_for_work_on_my_schema; You create new schema named my_schema. CREATE SCHEMA my_schema OWNED BY system; You create new table named work_done in the schema. CREATE TABLE my_schema.work_done (t TIMESTAMP, user NVARCHAR (256), work_done VARCH AR (256) ); You grant the SELECT on any object privilege in my_schema to the role role_for_work_on_my_schema. GRANT SELECT ON SCHEMA my_schema TO role_for_work_on_my_schema; You grant the INSERT privilege for the work_done table to the role role_for_work_on_my_schema. GRANT INSERT ON my_schema.work_done TO role_for_work_on_my_schema; You grant the role_for_work_on_my_schema role to the worker user. GRANT role_for_work_on_my_schema TO worker; You grant TRACE ADMIN privilege for the worker user. GRANT TRACE ADMIN TO worker WITH ADMIN OPTION; You grant DELETE from work_done table to the worker user. GRANT DELETE ON my_schema.work_done TO worker WITH GRANT OPTION; You revoke from the role role_for_work_on_my_schema the privilege to select from my_schema. REVOKE SELECT ON SCHEMA my_schema FROM role_for_work_on_my_schema; You revoke TRACE ADMIN privilege from the worker. REVOKE TRACE ADMIN FROM worker; Data Import Export Statements SAP HANA Database - SQL Reference Manual 166 2012-12-19 EXPORT Syntax EXPORT <object_name_list> AS <export_format> INTO <path> [WITH <export_option_list> ] Syntax Elements WITH <export_option_list>: EXPORT options can be passed in using "WITH" clause. <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> Description The EXPORT command exports tables, views, column views, synonyms, sequences, or procedures in the specified format as BINARY or CSV. Data for temporary tables and "no logging" tables cannot be exported using EXPORT. OBJECT_NAME SQL name of the object (table, view, etc) to export. To export all objects from all schemas you should use the keyword ALL. If you want to export objects of a specific schema, you should use the schema name with the asterisk, e.g. "SYSTEM"."*" BINARY Table data will be exported in internal binary format. Exporting in this format is orders of magnitude faster then exporting the same table in CSV format. Only column tables can be exported in binary format. The row tables are always exported in CSV format, even if BINARY format is specified. CSV Table data will be exported in CSV format. The exported data can be imported only in any other database. Additionaly, the exported data can be scramled. Both column and row tables can be exported in CSV format. FULL_PATH The server path to export to. Note: When using a distributed system, the FULL_PATH must point to a shared disk! For security reasons, the path may not contain symbolic links and may not point inside the database instance folder, except its 'backup' and 'work' subfolders. Examples for valid export path (assuming the database instance is located at /usr/sap/HDB/HDB00): '/tmp'<br> '/usr/sap/HDB/HDB00/backup'<br> '/usr/sap/HDB/HDB00/work'<br> REPLACE With REPLACE option, previously exported data will be removed and newly exported data will be saved. If REPLACE option is not specified, an error will be thrown if there exists a previously exported data already in the specified directory. CATALOG ONLY With CATALOG ONLY option, only database catalog will be exported without data. NO DEPENDENCIES With NO DEPENDENCIES option, it will not export underlying objects of an object to be exported. SCRAMBLE Export in CSV format has an additional option to scramble sensitive customer data using SCRAMBLE [BY '<password>']. When the optional password is not specified, a default scramble password is used. Only character string data can be scrambled. When imported, scrambled data will be imported as scrambled so SAP HANA Database - SQL Reference Manual 167 2012-12-19 that end users cannot read the data and it is not possible to unscramble the data. THREADS Indicates the number of threads that can be used for concurrent export. Number of threads to use The given number of THREADS specifies how many objects will be exported in parallel (default is 1). Increasing number of threads may reduce export time, but also can negatively affect the system performance. Following should be considered: For a single table THREADS has no effect. For a view or procedure, 2 or more threads should be used (up to number of objects it depends on) For a whole schema consider using more that 10 threads (up to number of cores in the system) For a whole BW / ERP system (ALL keyword) with tens of thousands of tables, a large number of threads can be reasonable (up to 256) Number of threads to use You can monitor the progress of the export using M_EXPORT_BINARY_STATUS system views. You can abort the export session using the session ID from the corresponding view in the following command: ALTER SYSTEM CANCEL [WORK IN] SESSION 'sessionId' The detailed result of the export is stored in session-local temporary tables. #EXPORT_RESULT. Number of threads to use You create new schema named MY_SCHEMA. CREATE SCHEMA MY_SCHEMA; You export the information from MY_SCHEMA in CSV format with the REPLACE and SCRAMBLE options enabled. EXPORT "MY_SCHEMA"."*" AS CSV INTO '/tmp' WITH REPLACE SCRAMBLE THREADS 10 IMPORT Syntax IMPORT <object_name_list> [AS <import_format>] FROM <path> [WITH <import_option_lis t>] Syntax Elements WITH <import_option_list>: IMPORT options can be passed in using "WITH" clause. <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> Description The IMPORT statement imports tables, views, column views, synonyms, sequences, or procedures. Data for temporary tables and "no logging" tables cannot be imported using IMPORT command. OBJECT_NAME SQL name of the object (table, view, etc) to import. To import all objects from the import path you should use SAP HANA Database - SQL Reference Manual 168 2012-12-19 the keyword ALL. If you want to import objects of a specific schema, you should use the schema name with the asterisk, e.g. "SYSTEM"."*" BINARY | CSV Format specification may be ommited during the import, since the format will be auto-detected during import. The data will be imported in the same format in which it was exported. FULL_PATH The server path to import from. Note: When using a distributed system, the FULL_PATH must point to a shared disk! Examples for valid import path (assuming the database instance is located at /usr/sap/HDB/HDB00): '/tmp'<br> '/usr/sap/HDB/HDB00/backup'<br> '/usr/sap/HDB/HDB00/work'<br> REPLACE With REPLACE option, the specified table will be dropped and created and data will be imported. If REPLACE option is not specified, an error will be thrown if there exists a table with the same name in the same schema. CATALOG ONLY With CATALOG ONLY option, only database catalog will be imported without data. NO DEPENDENCIES With NO DEPENDENCIES option, it will not import underlying objects of an object to be imported. THREADS Indicates the number of threads that can be used for concurrent import. Number of threads to use The given number of THREADS specifies how many objects will be imported in parallel (default is 1). Increasing number of threads may reduce import time, but also can negatively affect the system performance. Following should be considered: For a single table THREADS has no effect. For a view or procedure, 2 or more threads should be used (up to number of objects it depends on) For a whole schema consider using more that 10 threads (up to number of cores in the system) For a whole BW / ERP system (ALL keyword) with tens of thousands of tables, a large number of threads can be reasonable (up to 256) Number of threads to use You can monitor the progress of the import using M_IMPORT_BINARY_STATUS system views. Also, you can abort the import session using the connection ID from the corresponding view in the following command: ALTER SYSTEM CANCEL [WORK IN] SESSION 'sessionId' The detailed result of the import is stored in session-local temporary tables. #IMPORT_RESULT. Example IMPORT "SCHEMA"."*" AS CSV FROM '/tmp' WITH REPLACE THREADS 10 IMPORT FROM Syntax IMPORT FROM [<file_type>] <file_path> [INTO <table_name>] [WITH <import_from_option _list>] Syntax Elements WITH <import_from_option_list>: SAP HANA Database - SQL Reference Manual 169 2012-12-19 IMPORT FROM options can be passed in using "WITH" clause. <file_type> ::= CSV FILE | CONTROL FILE The type of the file to be imported. You can specify either Comma-separated values or control file formats. For details of CSV and control file formats please see the Examples. <file_path> ::= <string_literal> The complete path of the file and filename of the file to import. <table_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> The target table name, with optional schema name, where the imported data will be stored. WITH <import_from_option_list> <import_from_option_list> ::= <import_from_option> ... The optional WITH option list can have one or many of the options stated below. <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> | ERROR LOG <file_path_of_error_log> Import option parameters are detailed below. THREADS <number_of_threads> <number_of_threads> ::= <integer_literal> The number of threads that can be used for concurrent import. The default value is 1 and maximum allowed is 256. BATCH <number_of_records_of_each_commit> <number_of_records_of_each_commit> ::= <integer_literal> The number of records to be inserted in each commit. Note: THREADS and BATCH can be used to achieve high loading performance by enabling parallel loading and also by committing many records at once. In general, for column tables, a good setting to use is 10 parallel loading threads, with a commit frequency of 10.000 records or greater. TABLE LOCK Locks table for fast import into column store tables. If NO TYPE CHECK option is specified, then the record is inserted without checking the type of each field. SKIP FIRST <number_of_rows_to_skip> ROW <number_of_rows_to_skip> ::= <integer_literal> Skips to insert first n rows. COLUMN LIST IN FIRST ROW Indicates the column list is stored in the first row of the CSV import file. COLUMN LIST ( <column_name_list> ) <column_name_list> ::= <column_name> [{, <column_name>}...] <column_name> ::= <string_literal> SAP HANA Database - SQL Reference Manual 170 2012-12-19 The column list for the data being imported. The name list has one or more column names. The ordering of the column names should match the order of the column data in the CSV file and the columns in the target table. RECORD DELIMITED BY <string_for_record_delimiter> <string_for_record_delimiter> ::= <string_literal> The record delimiter used in the CSV file being imported. FIELD DELIMITED BY '<string_for_field_delimiter>' <string_for_field_delimiter> ::= <string_literal> Indicates the field delimiter of the CSV file OPTIONALLY ENCLOSED BY <character_for_optional_enclosure> <character_for_optional_enclosure> ::= <character_literal> Indicates the optional enclosure character used to delimit field data DATE FORMAT <string_for_date_format> <string_for_date_format> ::= <string_literal> The format that date strings are encoded with in the import data. Y : year , MM : month , MON : name of month, DD : day For example: 'YYYYMMDD' : 20120520 , 'YYYY-MM-DD' : 2012-05-20 , 'YYYY-MON-DD' : 2012-MAY-20 TIME FORMAT <string_for_time_format> <string_for_time_format> ::= <string_literal> The format that time strings are encoded with in the import data. HH24 : hour , MI : minute , SS : second For example: 'HH24MISS' : 143025 , 'HH24:MI:SS' : 14:30:25 TIMESTAMP FORMAT <string_for_timestamp_format> <string_for_timestamp_format> ::= <string_literal> The format that timestamp strings are encoded with in the import data. For example: 'YYYY-MM-DD HH24:MI:SS' : 2012-05-20 14:30:25 ERROR LOG <file_path_of_error_log> <file_path_of_error_log> ::= <string_literal> You can store a log of errors that occur during import. Please ensure the file path you use is writeable by the database. Note: All <string_literal>s in the <import_from_option> support UTF-8 except surrogate-pair encoding. Description The IMPORT FROM statement imports external data from a file into an existing table. Examples Example 1 -Importing CSV data You create a table MYTABLE to store the imported data. CREATE TABLE MYTABLE ( A INT, B VARCHAR(10), C DATE, D TIME, E DECIMAL ); You create a CSV text file /data/data.csv and add the following contents. 1,"DATA1","2012-05-20","14:30:25",123456 2,"DATA2","2012-05-21","15:30:25",234567 3,"DATA3","2012-05-22","16:30:25",345678 4,"DATA4","2012-05-23","17:30:25",456789 SAP HANA Database - SQL Reference Manual 171 2012-12-19 You execute the following command to import the data. IMPORT FROM CSV FILE '/data/data.csv' INTO "MYTABLE" WITH RECORD DELIMITED BY '\n' FIELD DELIMITED BY ','; Example 2 - Importing using a control file In the example below you import the CSV data from Example 1 using a control file: You can create a control file /data/data.ctl and add the contents shown below to the file. IMPORT DATA INTO TABLE "MYTABLE" FROM '/data/data.csv' RECORD DELIMITED BY '\n' FIELD DELIMITED BY ',' OPTIONALLY ENCLOSUED BY '"' ERROR LOG '/data/data.err' You execute the following command to import the data using the control file. IMPORT FROM CONTROL FILE '/data/data.ctl'; Example 3 - Import using date formats In the example below the date format is of the CSV import data is different to the default date format 'YYYY- MM-DD'. In this import data the date format used is 'MM-DD-YYYY'. You create a CSV text file /data/data_different_date.csv and add the following contents. 1,"DATA1","05-20-2012","14:30:25",123456 2,"DATA2","05-21-2012","15:30:25",234567 3,"DATA3","05-22-2012","16:30:25",345678 4,"DATA4","05-23-2012","17:30:25",456789 You execute the following command to import the data. IMPORT FROM CSV FILE '/data/data_different_date.csv' INTO "MYTABLE" WITH RECORD DEL IMITED BY '\n' FIELD DELIMITED BY ',' DATE FORMAT 'MM-DD-YYYY'; Example 4 - Import using COLUMN LIST You create a table called COLLIST to store the imported data. CREATE TABLE COLLIST ( A INT, B VARCHAR(10), c DATE, D DECIMAL ); You create a CSV text file '/data/data_col_list.csv' and add the following contents. 1,"DATA1","2012-05-20",123456 2,"DATA2","2012-05-21",234567 3,"DATA3","2012-05-22",345678 4,"DATA4","2012-05-23",456789 You execute the following commands to import the data using a column list. IMPORT FROM CSV FILE '/data/data_col_list.csv' INTO "COLLIST" WITH RECORD DELIMITED BY '\n' FIELD DELIMITED BY ',' COLUMN LIST ("A", "B", "D"); IMPORT SCAN Syntax IMPORT SCAN <path> Syntax Elements <path> ::= <string_literal> The path of the directory to be scanned for import data. Description SAP HANA Database - SQL Reference Manual 172 2012-12-19 The IMPORT SCAN statement scans the path and fills the session-local temporary table #IMPORT_SCAN_RESULT with the contents in the path. Example You scan the path '/data/import_path' for import data. IMPORT SCAN '/data/import_path' You select the data in the #IMPORT_SCAN_RESULT table to view the result of the scan. SELECT * FROM #IMPORT_SCAN_RESULT; Procedural Statements ALTER PROCEDURE RECOMPILE Syntax ALTER PROCEDURE <proc_name> RECOMPILE [WITH PLAN] Syntax Elements <proc_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> The identifier of the procedure to be altered, with optional schema name. WITH PLAN Specifies that internal debug information should be created during execution of the procedure. Description The ALTER PROCEDURE RECOMPILE statement manually triggers a recompilation of a procedure by generating an updated execution plan. For production code a procedure should be compiled without the WITH PLAN option to avoid overhead during compilation and execution of the procedure. Example You trigger the recompilation of the my_proc procedure to produce debugging information. ALTER PROCEDURE my_proc RECOMPILE WITH PLAN; CALL Syntax CALL <proc_name> (<param_list>) [WITH OVERVIEW] [IN DEBUG MODE] Syntax Elements <proc_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> The identifier of the procedure to be called, with optional schema name. <param_list> ::= <proc_param>[{, <proc_param>}...] Specifies one or more procedure parameters. <proc_param> ::= <identifier> | <string_literal> | <unsigned_integer> | <signed_int eger>| <signed_numeric_literal> | <unsigned_numeric_literal> Procedure parameters. For more information on these data types please see BNF Lowest Terms Representations and Data Types. SAP HANA Database - SQL Reference Manual 173 2012-12-19 Parameters passed to a procedure are scalar constants and can be passed either as IN, OUT or INOUT parameters. Scalar parameters are assumed to be NOT NULL. Arguments for IN parameters of table type can either be physical tables or views. The actual value passed for tabular OUT parameters must be`?`. WITH OVERVIEW Defines that the result of a procedure call will be stored directly into a physical table. Calling a procedure WITH OVERVIW will return one result set that holds the information of which table contains the result of a particular table’s output variable. Scalar outputs will be represented as temporary tables with only one cell. When you pass existing tables to the output parameters WITH OVERVIEW will insert the result set tuples of the procedure into the provided tables. When you pass NULL to the output parameters, temporary tables holding the result sets will be generated. These tables will be dropped automatically once the database session is closed. IN DEBUG MODE When specified additional debug information will be created during the execution of the procedure. This information can be used to debug the instantiation of the internal execution plan of the procedure. Note: that this type of call implies additional runtime overhead and so it should only be used for debugging purposes. Description Calls a procedure defined with CREATE PROCEDURE. CALL conceptually returns list of result sets with one entry for every tabular result. An iterator can be used to iterate over these results sets. For each result set you can iterate over the result table in the same way as for query results. SQL statements that are not assigned to any table variable in the procedure body will be added as result sets at the end of the list of result sets. The type of the result structures will be determined during compilation time but will not be visible in the signature of the procedure. CALL when executed by the client the syntax behaves in a way consistent with the SQL standard semantics, e.g. Java clients can call a procedure using a JDBC CallableStatement. Scalar output variables will be a scalar value that can be retrieved from the callable statement directly. Note: Unquoted identifiers are implicitly treated as upper case. Quoting identifiers will respect capitalization and allow for using white spaces which are normally not allowed in SQL identifiers. Examples You call the getOutput procedure in debug mode. CALL getOutput (1000, 'EUR', NULL, NULL) IN DEBUG MODE; You call the procedure getOutput using the WITH OVERVIEW option. CALL getOutput(1000, 'EUR', ot_publishers, NULL) WITH OVERVIEW; CREATE FUNCTION Syntax CREATE FUNCTION <func_name> [(<parameter_clause>)] RETURNS <return_type> [LANGUAGE <lang>] [SQL SECURITY <mode>] AS <local_scalar_variables> BEGIN <function_code> END Syntax Elements <func_name > ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> SAP HANA Database - SQL Reference Manual 174 2012-12-19 The identifier of the function to be created, with optional schema name. <parameter_clause> ::= <parameter> [{,<parameter>}…] The input parameters of the function. <parameter> ::= [IN] <param_name> <datatype> A function parameter with associated data type. <param_name> ::= <identifier> The variable name for a parameter. <datatype> ::= <sql_type> | <table_type> The input parameters of a function can have any of the primitive SQL types or a table type. <sql_type> ::= BIGINT | INTEGER | SMALLINT | TINYINT | DATE | TIME | TIMESTAMP | SM ALLDECIMAL | DECIMAL | REAL | DOUBLE The data type of the variable. Please see Data Types. <table_type> ::= <identifier> A table type previously defined with the CREATE TYPE command. Please see CREATE TYPE. <return_type> := <sql_type> | <return_table_type> The returned results of a function can have any of the primitive SQL types or a return table type. <return_table_type> := TABLE (<ret_column_list>) Defines the structure of the returned table data. <ret_column_list> := <ret_column_elem>[{, <ret_column_elem>}] Defines the list of columns returned from the function. <ret_column_elem> := <column_name> <sql_type> <column_name> := <identifier> Defines the name of column element with associated datatype. LANGUAGE <lang> <lang> ::= SQLSCRIPT Default: SQLSCRIPT Defines the programming language used in the function. Note: Only SQLScript functions can currently be defined. SQL SECURITY <mode> <mode> ::= DEFINER | INVOKER Default: DEFINER Specifies the security mode of the function. DEFINER Specifies that the execution of the function is performed with the privileges of the definer of the function. INVOKER Specifies that the execution of the function is performed with the privileges of the invoker of the function. <local_scalar_variables> ::= {<local_var>;}... SAP HANA Database - SQL Reference Manual 175 2012-12-19 Defines local scalar variables for the function. <local_var> ::= <variable_name> <datatype> <variable_name> ::= <identifier> Defines a local function variable with associated scalar type. Please see Data Types. <function_code> := !! function statements. Defines the main body of the function. Description The CREATE FUNCTION statement creates a function read only function which is free of side-effects. That is to say that neither DDL or DML statements (INSERT, UPDATE, and DELETE) are allowed in the function body. Also other functions or procedures selected/called from the body of the function must be read-only. Example You create an SQLScript function with the following definition. CREATE FUNCTION scale (val INT) RETURNS TABLE (a INT, b INT) LANGUAGE SQLSCRIPT AS BEGIN RETURN SELECT a, :val * b AS b FROM mytab; END; You use the scale function with the following example select statements. select * from scale(10); select * from scale(10) as a, scale(10) as b where a.a = b.a CREATE PROCEDURE Syntax CREATE PROCEDURE <proc_name> [(<parameter_clause>)] [LANGUAGE <lang>] [SQL SECURITY <mode>] [READS SQL DATA [WITH RESULT VIEW <view_name>]] AS <local_scalar_variables> BEGIN <procedure_code> END Syntax Elements <proc_name > ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> The identifier of the procedure to be created, with optional schema name. <parameter_clause> ::= <parameter> [{,<parameter>}…] The input and output parameters of the procedure. <parameter> ::= [<param_inout>] <param_name> <datatype> A procedure parameter with associated data type. <param_inout> ::= IN|OUT|INOUT Default: IN Each parameter is marked using the keywords IN/OUT/INOUT. Input and output parameters must be explicitly typed (i.e. no un-typed tables are supported). <param_name> ::= <identifier> The variable name for a parameter. <datatype> ::= <sql_type> | <table_type> SAP HANA Database - SQL Reference Manual 176 2012-12-19 <datatype> ::= <sql_type> | <table_type> The input and output parameters of a procedure can have any of the primitive SQL types or a table type. INOUT parameters can only be of scalar type. <sql_type> ::= DATE | TIME | SECONDDATE | TIMESTAMP | TINYINT | SMALLINT | INTEGER | BIGINT | SMALLDECIMAL | DECIMAL | REAL | DOUBLE | VARCHAR | NVARCHAR | ALPHANUM | SHORTTEXT | VARBINA RY | BLOB | CLOB | NCLOB | TEXT The data type of the variable. Please see Data Types. <table_type> ::= <identifier> A table type previously defined with the CREATE TYPE command. Please see CREATE TYPE. LANGUAGE <lang> <lang> ::= SQLSCRIPT | R Default: SQLSCRIPT Defines the programming language used in the procedure. It is good practice to define the language in all procedure definitions. SQL SECURITY <mode> <mode> ::= DEFINER | INVOKER Default: DEFINER Specifies the security mode of the procedure. DEFINER Specifies that the execution of the procedure is performed with the privileges of the definer of the procedure. INVOKER Specifies that the execution of the procedure is performed with the privileges of the invoker of the procedure. READS SQL DATA Marks the procedure as being read-only, side-effect free i.e. the procedure does not make modifications to the database data or its structure. This means that the procedure does not contain DDL or DML statements, and that the procedure only calls other read-only proceedures. The advantage of using this parameter is that certain optimizations are available for read-only procedures. WITH RESULT VIEW <view_name> <view_name> ::= <identifier> Specifies the result view to be used as the output of a read-only procedure. When a result view is defined for a procedure, it can be called by an SQL statement in the same way as a table or view. Please see Example 2 - Using a result view below. <local_scalar_variables> ::= {<local_var>;}... Defines local scalar variables for the procedure. <local_var> ::= <variable_name> <datatype> <variable_name> ::= <identifier> Defines a local procedure variable with associated scalar type. Please see Data Types. <procedure_code> := !! Procedure statements. Defines the main body of the procedure according to the programming language selected. For more information about SQLScript please see the "SQLScript reference". For more information on the R- Language please see the "R-Language reference". Both reference documents are available from the SAP HANA Appliance page. Description SAP HANA Database - SQL Reference Manual 177 2012-12-19 The CREATE PROCEDURE statement creates a procedure using the specified programming language <lang>. Examples Example 1 - Creating an SQL Procedure You create an SQLScript procedure with the following definition. CREATE PROCEDURE orchestrationProc LANGUAGE SQLSCRIPT AS v_id BIGINT; v_name VARCHAR(30); v_pmnt BIGINT; v_msg VARCHAR(200); CURSOR c_cursor1 (p_payment BIGINT) FOR SELECT id, name, payment FROM control_tab WHERE payment > :p_payment ORDER BY id ASC; BEGIN CALL init_proc(); OPEN c_cursor1(250000); FETCH c_cursor1 INTO v_id, v_name, v_pmnt; v_msg := :v_name || ' (id ' || :v_id || ') earns ' || :v_pmnt || ' $.'; CALL ins_msg_proc(:v_msg); CLOSE c_cursor1; END; The procedure features a number of imperative constructs including the use of a cursor (with associated state) and local scalar variables with assignments. Example 2 - Using a result view You create a procedure using a result view ProcView to return its results. CREATE PROCEDURE ProcWithResultView(IN id INT, OUT o1 CUSTOMER) LANGUAGE SQLSCRIPT READS SQL DATA WITH RESULT VIEW ProcView AS BEGIN o1 = SELECT * FROM CUSTOMER WHERE CUST_ID = :id; END; You call this procedure from an SQL statement as follows. SELECT * FROM ProcView WITH PARAMETERS ('placeholder' = ('$$id$$', '5')); CREATE TYPE Syntax CREATE TYPE <type_name> AS TABLE (<column_definition>[{,<column_definition>}...]) Syntax Elements <type_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> Identifies the table type to be created and, optionally, in which schema the creation should take place. <column_definition> ::= <column_name> <data_type> [<column_store_data_type>] [<ddic _data_type>] Defines a table column. <column_name> ::= <identifier> The table column name. <data_type> ::= DATE | TIME | SECONDDATE | TIMESTAMP | TINYINT | SMALLINT | INTEGER | BIGINT | SMALLDECIMAL | DECIMAL | REAL | DOUBLE | VARCHAR | NVARCHAR | ALPHANUM | SHORTTEXT | VARBINA RY | BLOB | CLOB | NCLOB | TEXT SAP HANA Database - SQL Reference Manual 178 2012-12-19 <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_SECONDDA TE <ddic_data_type> ::= DDIC_ACCP | DDIC_ALNM | DDIC_CHAR | DDIC_CDAY | DDIC_CLNT | DD IC_CUKY | DDIC_CURR | DDIC_D16D | DDIC_D34D | DDIC_D16R | DDIC_D34R | DDIC_D16S | DDIC_D34S | DD IC_DATS | DDIC_DAY | DDIC_DEC | DDIC_FLTP | DDIC_GUID | DDIC_INT1 | DDIC_INT2 | DDIC_INT4 | DD IC_INT8 | DDIC_LANG | DDIC_LCHR | DDIC_MIN | DDIC_MON | DDIC_LRAW | DDIC_NUMC | DDIC_PREC | DD IC_QUAN | DDIC_RAW | DDIC_RSTR | DDIC_SEC | DDIC_SRST | DDIC_SSTR | DDIC_STRG | DDIC_STXT | DD IC_TIMS | DDIC_UNIT | DDIC_UTCM | DDIC_UTCL | DDIC_UTCS | DDIC_TEXT | DDIC_VARC | DDIC_WEEK The available data types. Please see Data Types Description The CREATE TYPE statement creates a user-defined type. The syntax for defining table types follows the SQL syntax for defining new types. The table type is specified using a list of attribute names and primitive data types. For each table type, attributes must have unique names. Example You create a table type called tt_publishers. CREATE TYPE tt_publishers AS TABLE ( publisher INTEGER, name VARCHAR(50), price DECIMAL, cnt INTEGER); You create a table type called tt_years. CREATE TYPE tt_years AS TABLE ( year VARCHAR(4), price DECIMAL, cnt INTEGER); DROP FUNCTION Syntax DROP FUNCTION <func_name> [<drop_option>] Syntax Elements <func_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> The name of the function to be dropped, with optional schema name. <drop_option> ::= CASCADE | RESTRICT When <drop_option> is not specified a non-cascaded drop will be performed. This will only drop the specified function, dependent objects of the function will be invalidated but not dropped. The invalidated objects can be revalidated when an object that has same schema and object name is created. CASCADE Drops the function and dependent objects. RESTRICT SAP HANA Database - SQL Reference Manual 179 2012-12-19 Drops the function only when dependent objects do not exist. If this drop option is used and a dependent object exists an error will be thrown. Description Drops a function created using CREATE FUNCTION from the database catalog. Examples You drop a function called my_func from the database using a non-cascaded drop. DROP FUNCTION my_func; DROP PROCEDURE Syntax DROP PROCEDURE <proc_name> [<drop_option>] Syntax Elements <proc_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> The name of the procedure to be dropped, with optional schema name. <drop_option> ::= CASCADE | RESTRICT When <drop_option> is not specified a non-cascaded drop will be performed. This will only drop the specified procedure, dependent objects of the procedure will be invalidated but not dropped. The invalidated objects can be revalidated when an object that has same schema and object name is created. CASCADE Drops the procedure and dependent objects. RESTRICT Drops the procedure only when dependent objects do not exist. If this drop option is used and a dependent object exists an error will be thrown. Description Drops a procedure created using CREATE PROCEDURE from the database catalog. Examples You drop a procedure called my_proc from the database using a non-cascaded drop. DROP PROCEDURE my_proc; DROP TYPE Syntax DROP TYPE <type_name> [<drop_option>] Syntax Elements <type_name> ::= [<schema_name>.]<identifier> <schema_name> ::= <identifier> The identifier of the table type to be droppped, with optional schema name. <drop_option> ::= CASCADE | RESTRICT SAP HANA Database - SQL Reference Manual 180 2012-12-19 When <drop_option> is not specified a non-cascaded drop will be performed. This will drop only the specified type, dependent objects of the type will be invalidated but not dropped. The invalidated objects can be revalidated when an object that has same schema and object name is created. Description The DROP TYPE statement removes a user-defined table type. Example You create a table type called my_type. CREATE TYPE my_type AS TABLE ( column_a DOUBLE ); You drop the my_type table type. DROP TYPE my_type; SAP HANA Database - SQL Reference Manual 181 2012-12-19 Restrictions for SQL Statements The table below shows the maximum allowable limit for each entry. SAP HANA Database - SQL Reference Manual 182 2012-12-19 Database Database size limit Limited by storage size RS: 1TB Number of locks Unlimited for record locks, 16384 for table locks Number of sessions 8192 Schemas Number of tables in a schema 131072 Identifier length 127 characters Length of an alias name 128 characters Table name length Please see "Identifier length" above Column name length Please see "Identifier length" above Length of a constant string literal 32767 bytes Number of hex characters in a binary literal 8192 Tables and Views Number of columns in a table 1000 Number of columns in a view 1000 Number of partitions of a column table 1000 Number of rows in each table Limited by storage size RS: 1TB/sizeof(row), CS: 2^31 * number of partitions Length of a row Limited by RS storage size ( 1TB ) Size of a non-partitioned table Limited by RS storage size ( 1TB ) Indexes and Constraints Number of indexes for each table 1023 Number of primary key columns in each table 16 Number of columns in an index 16 Number of columns in a UNIQUE constraint 16 Size of sum of primary key, index, UNIQUE constraint 16384 SQL SAP HANA Database - SQL Reference Manual 183 2012-12-19 Length of an SQL statement 2GB Depth of SQL view nesting 128 Depth of SQL parse tree 255 Number of joined tables in an SQL statement or view 255 Number of columns in an ORDER BY, GROUP BY or SELECT clause 65535 Number of elements in predicates 65535 Number of elements in SELECT clause 65535 SQLScript Size of all stored procedures Li mi ted by RS storage si ze ( 1TB ) Note: You can obtain the current system limits from your SAP HANA Database instance by using select * from m_system_limits See Also M_SYSTEM_LIMITS in the System Tables and Monitor Views Reference SAP HANA Database - SQL Reference Manual 184 2012-12-19 SQL Error Codes The following table lists error codes displayed by SAP HANA database and their descriptions. SAP HANA Database - SQL Reference Manual 185 2012-12-19 Error Code Description 1 General warni ng 2 General error 3 Fatal error 4 Cannot al l ocate enough memory 5 I ni ti al i zati on error 6 I nval i d data 7 Feature not supported 8 I nval i d argument 9 I ndex out of bounds 10 I nval i d username or password 11 I nval i d state 12 Cannot open fi l e 13 Cannot create/wri te fi l e 14 Cannot al l ocate enough di sk space 15 Cannot fi nd fi l e 16 Statement retry 17 Metadata schema versi on i ncompati bl e between database and executabl e fi l e 18 Servi ce shutti ng down 19 I nval i d l i cense 128 Transacti on error 129 Transacti on rol l ed back by an i nternal error 130 Transacti on rol l ed back by i ntegri ty constrai nt vi ol ati on 131 Transacti on rol l ed back by l ock wai t ti meout 132 Transacti on rol l ed back due to unavai l abl e resource 133 Transacti on rol l ed back by detected deadl ock 134 Fai l ure i n accessi ng checkpoi nt fi l e 135 Fai l ure i n accessi ng anchor fi l e 136 Fai l ure i n accessi ng l og fi l e 137 Fai l ure i n accessi ng archi ve fi l e 138 Transacti on seri al i zati on fai l ure 139 Current operati on cancel l ed by request and transacti on rol l ed back 140 I nval i d wri te-transacti on i denti fi er 141 Fai l ure i n accessi ng i nvi si bl e l og fi l e 142 Exceed max num of concurrent transacti ons 143 Transacti on seri al i zati on fai l ure unti l ti meout expi res 144 Transacti on rol l back, uni que constrai nt vi ol ated 145 Transacti on di stri buti on work fai l ure 146 Resource busy and acqui re wi th NOWAI T speci fi ed 147 I nconsi stency between data and l og 148 Transacti on start i s bl ocked unti l Master_Restart fi ni shes 149 Di stri buted transacti on commi t fai l ure 150 Statement cancel l ed due to ol d snapshot 256 SQL processi ng error 257 SQL syntax error 258 I nsuffi ci ent pri vi l ege 259 I nval i d tabl e name 260 I nval i d col umn name 261 I nval i d i ndex name 262 I nval i d query name 263 I nval i d al i as name 264 I nval i d datatype 265 Expressi on mi ssi ng 266 I nconsi stent datatype 267 Speci fi ed l ength too l ong for i ts datatype 268 Col umn ambi guousl y defi ned SAP HANA Database - SQL Reference Manual 186 2012-12-19 269 Too many val ues 270 Not enough val ues 271 Dupl i cate al i as 272 Dupl i cate col umn name 273 Not a si ngl e character stri ng 274 I nserted val ue too l arge for col umn 275 Aggregate functi on not al l owed 276 Mi ssi ng aggregati on or groupi ng 277 Not a GROUP BY expressi on 278 Nested group functi on wi thout GROUP BY 279 Group functi on i s nested 280 ORDER BY i tem must be the number of a SELECT-l i st 281 Outer joi n not al l owed i n operand of OR or I N 282 Two tabl es cannot be outer-joi ned to each other 283 A tabl e may be outer joi ned to at most one other tabl e 284 Joi n fi el d does not match 285 I nval i d joi n condi ti on 286 I denti fi er i s too l ong 287 Cannot i nsert NULL or update to NULL 288 Cannot use dupl i cate tabl e name 289 Cannot use dupl i cate i ndex name 290 Cannot use dupl i cate query name 291 Argument i denti fi er must be posi ti ve 292 wrong number of arguments 293 Argument type mi smatch 294 Cannot have more than one pri mary key 295 Too l ong mul ti key l ength 296 Repl i cated tabl e must have a pri mary key 297 Cannot update pri mary key fi el d i n repl i cated tabl e 298 Cannot store DDL 299 Cannot drop i ndex used for enforcement of uni que/pri mary key 300 Argument i ndex i s out of range 301 Uni que constrai nt vi ol ated 302 I nval i d CHAR or VARCHAR val ue 303 I nval i d DATE, TI ME or TI MESTAMP val ue 304 Di vi si on by zero undefi ned 305 Si ngl e-row query returns more than one row 306 I nval i d cursor 307 Numeri c val ue out of range 308 Col umn name al ready exi sts 309 Correl ated subquery cannot have TOP or ORDER BY 310 SQL error i n procedure 311 Cannot drop al l col umns i n a tabl e 312 Sequence i s exhausted 313 I nval i d sequence 314 Numeri c overfl ow 315 I nval i d synonym 316 wrong number of arguments i n functi on i nvocati on 317 P_QUERYPLANS not exi sts nor val i d format 318 Deci mal preci si on speci fi er i s out of range 319 Deci mal scal e speci fi er i s out of range 320 Cannot create i ndex on expressi on wi th datatype LOB 321 I nval i d vi ew name 322 Cannot use dupl i cate vi ew name 323 Dupl i cate repl i cati on I D 324 Cannot use dupl i cate sequence name 325 I nval i d escape sequence SAP HANA Database - SQL Reference Manual 187 2012-12-19 326 CURRVAL of gi ven sequence i s not yet defi ned i n thi s sessi on 327 Cannot expl ai n pl an of gi ven statement 328 I nval i d name of functi on or procedure 329 Cannot use dupl i cate name of functi on or procedure 330 Cannot use dupl i cate synonym name 331 User name al ready exi sts 332 I nval i d user name 333 Col umn not al l owed 334 I nval i d user pri vi l ege 335 Fi el d al i as name al ready exi sts 336 I nval i d defaul t val ue 337 I NTO cl ause not al l owed for thi s SELECT statement 338 Zero-l ength col l umns are not al l owed 339 I nval i d number 340 Not al l vari abl es bound 341 Numeri c underfl ow 342 Col l ati on confl i ct 343 I nval i d col l ate name 344 Parse error i n data l oader 345 Not a repl i cati on tabl e 346 I nval i d repl i cati on I D 347 I nval i d opti on i n moni tor 348 I nval i d dateti me format 349 Cannot CREATE UNI QUE I NDEX 350 Cannot drop col umns i n the pri mary-key col umn l i st 351 Col umn i s referenced i n a mul ti -col umn constrai nt 352 Cannot create uni que i ndex on CDX tabl e 353 Update l og group name al ready exi sts 354 I nval i d update l og group name 355 The base tabl e of the update l og tabl e must have a pri mary key 356 Exceed maxi mum number of update l og group 357 The base tabl e al ready has a update l og tabl e 358 Update l og tabl e can not have a update l og tabl e 359 Concatenated stri ng i s too l ong 360 Vi ew WI TH CHECK OPTI ON where-cl ause vi ol ati on 361 Data mani pul ati on operati on not l egal on thi s vi ew 362 I nval i d schema name 363 Number of i ndex col umns exceeds i ts maxi mum 364 I nval i d parti al key si ze 365 No matchi ng uni que or pri mary key for thi s col umn l i st 366 Referenced tabl e does not have a pri mary key 367 Number of referenci ng col umns must match referenced col umns 368 Uni que constrai nt not al l owed on temporary tabl e 369 Exceed maxi mum vi ew depth l i mi t 370 Cannot perform DI RECT I NSERT operati on on tabl e wi th uni que i ndexes 371 I nval i d XML document 372 I nval i d XPATH 373 I nval i d XML durati on val ue 374 I nval i d XML functi on usage 375 I nval i d XML i ndex operati on 376 Python stored procedure error 377 JI T operati on error 378 I nval i d col umn vi ew 379 Tabl e schema mi smatch 380 Fai l to change run l evel 381 Fai l to restart 382 Fai l to col l ect al l versi on garbage SAP HANA Database - SQL Reference Manual 188 2012-12-19 383 I nval i d i denti fi er 384 Constant stri ng i s too l ong 385 Coul d not restore sessi on 386 Cannot use dupl i cate schema name 387 Tabl e ambi guousl y defi ned 388 Rol e al ready exi sts 389 I nval i d rol e name 390 I nval i d user type 391 I nval i dated vi ew 392 Can't assi gn cycl i c rol e 393 Rol es must not recei ve a pri vi l ege wi th grant opti on 394 Error revoki ng rol e 395 I nval i d user-defi ned type name 396 Cannot use dupl i cate user-defi ned type name 397 I nval i d object name 398 Cannot have more than one order by 399 Rol e tree too deep 400 Pri mary key not al l owed on i nsert-onl y tabl e 401 Uni que constrai nt not al l owed on i nsert-onl y tabl e 402 The user was al ready dropped before query executi on 403 I nternal error 404 I nval i d (non-exi stent) structured pri vi l ege name 405 Cannot use dupl i cate structured pri vi l ege name 406 I NSERT, UPDATE and UPSERT are di sal l owed on the generated fi el d 407 I nval i d date format 408 Password or parameter requi red for user 409 Mul ti pl e val ues for a parameter not supported 410 I nval i d pri vi l ege namespace 411 I nval i d tabl e type 412 I nval i d password l ayout 413 Last n passwords can not be reused 414 User i s forced to change password 415 User i s deacti vated 416 User i s l ocked 417 Can't drop wi thout CASCADE speci fi cati on 418 I nval i d vi ew query for creati on 419 Can't drop wi th RESTRI CT speci fi cati on. 420 Password change currentl y not al l owed 421 Cannot create ful l text i ndex 422 Pri vi l eges must be ei ther al l SQL or al l from one namespace 423 Li veCache error 424 I nval i d name of package 425 Dupl i cate package name 426 Number of col umns mi smatch 427 Cannot reserve i ndex I D any more 428 I nval i d query pl an I D 429 I ntegri ty check fai l ed 430 I nval i dated procedure 431 User's password wi l l expi re wi thi n few days 432 Thi s syntax has been deprecated and wi l l be removed i n next rel ease 433 Nul l val ue found 434 I nval i d object I D 435 I nval i d expressi on 436 Coul d not set system l i cense 437 Onl y commands for l i cense handl i ng are al l owed i n current state 438 I nval i d user parameter val ue 439 Composi te error SAP HANA Database - SQL Reference Manual 189 2012-12-19 440 Tabl e type conversi on error 441 Thi s feature has been deprecated and wi l l be removed i n next rel ease 442 Number of col umns exceeds i ts maxi mum 443 I nval i d cal cul ati on scenari o name 444 Package manager error 512 Repl i cati on error 513 Cannot execute DDL statement on repl i cati on tabl e whi l e repl i cati ng 514 Fai l ure i n accessi ng anchor fi l e 515 Fai l ure i n accessi ng l og fi l e 516 Repl i cati on tabl e has not confl i ct report tabl e 517 Confl i ct report tabl e al ready enabl ed 518 Confl i ct report tabl e al ready di sabl ed 576 API error 577 Cursor type of forward i s not al l owed 578 I nval i d statement 579 Exceed maxi mum batch si ze 580 Server rejected the connecti on(protocol versi on mi smatch) 581 Thi s functi on can be cal l ed onl y i n the case of si ngl e statement 582 Thi s query does not have resul t set 583 Connecti on does not exi st 584 No more l ob data 585 Operati on i s not permi tted 586 I nval i d parameter i s recei ved from server 587 Resul t set i s currentl y i nval i d 588 Next() i s not cal l ed for thi s resul t set 589 Too many parameters are set 590 Some paramters are mi ssi ng 591 I nternal error 592 Not supported type conversi on 593 Remote-onl y functi on 594 No more resul t row i n resul t set 595 Speci fi ed parameter i s not output parameter 596 LOB streami ng i s not permi tted i n auto-commi t mode 597 Sessi on context error 598 Fai l ed to execute the external statement 599 Sessi on l ayer i s not i ni ti al i zed yet 600 Fai l ed routed executi on 601 Too many sessi on vari abl es are set 602 Cannot set readonl y sessi on vari abl e 603 I nval i d LOB 604 Remote temp tabl e access fai l ure 605 I nval i d XA joi n request 606 Exceed maxi mum LOB si ze 607 Fai l ed to cl eanup resources 608 Exceed maxi mum number of prepared statements 1024 Sessi on error 1025 Communi cati on error 1026 Cannot bi nd a communi cati on port 1027 Communi cati on i ni ti al i zati on error 1028 I /O control error 1029 Connecti on fai l ure 1030 Send error 1031 Recei ve error 1032 Cannot create a thread 1033 Error whi l e parsi ng protocol 1034 Exceed maxi mum number of sessi ons 1035 Not supported versi on SAP HANA Database - SQL Reference Manual 190 2012-12-19 1036 I nval i d sessi on I D 1037 Unknown hostname 1280 Sql Scri pt error 1281 Wrong number or types of parameters i n cal l 1282 Output parameter not avari abl e 1283 OUT and I N OUT parameters may not have defaul t expressi ons 1284 Dupl i cate parameters are not permi tted 1285 At most one decl arati on i s permi tted i n the decl arati on secti on 1286 Cursor must be decl ared by SELECT statement 1287 I denti fi er must be decl ared 1288 Expressi on cannot be used as an assi gnment target 1289 Expressi on cannot be used as an I NTO-target of SELECT/FETCH statement 1290 Expressi on i s i nappropri ate as the l eft hand si de of an assi gnment statement 1291 Expressi on i s of wrong type 1292 I l l egal EXI T statement, i t must appear i nsi de a l oop 1293 I denti fi er name must be an excepti on name 1294 An I NTO cl ause i s expected i n SELECT statement 1295 EXPLAI N PLAN and CALL statement are not al l owed 1296 I denti fi er i s not a cursor 1297 Wrong number of val ues i n the I NTO l i st of a FETCH statement 1298 Unhandl ed user-defi ned excepti on 1299 No data found 1300 Fetch returns more than requested number of rows 1301 Numeri c or val ue error 1302 Paral l el i zabl e functi on cannot have OUT or I N OUT parameter 1303 User-defi ned excepti on 1304 Cursor i s al ready opened 1305 Return type i s i nval i d 1306 Return type mi smatch 1307 Unsupported datatype i s used 1308 I l l egal si ngl e assi gnment 1309 I nval i d use of tabl e vari abl e 1310 Scal ar type i s not al l owed 1311 Out parameter i s not speci fi ed 1312 At most one output parameter i s al l owed 1313 Output parameter shoul d be a tabl e or a tabl e vari abl e 1314 I nappropri ate vari abl e name: do not al l ow "" for the name of vari abl e or parameter 1315 Return resul t set from sel ect stmt exi st when resul t vi ew i s defi ned 1316 Some out tabl e var i s not assi gned 1317 Functi on name exceedes max. l i mi t 1318 Bui l t-i n functi on not defi ned 1319 Parameter must be a tabl e name 1320 Parameter must be an attri bute name wi thout a tabl e name upfront 1321 Parameter must be an attri bute name wi thout an al i as 1322 CE_CALC not al l owed 1323 Parameter must be a vector of col umns or aggregati ons 1324 Joi n attri bute must be avai l abl e i n projecti on l i st 1325 Parameter must be a vector of SQL i denti fi ers 1326 Dupl i cate attri bute name 1327 Parameter has a non supported type 1328 Attri bute not found i n col umn tabl e 1329 Dupl i cate col umn name 1330 Syntax Error for cal cul ated Attri bute 1331 Syntax Error i n fi l ter expressi on 1332 Parameter must be a val i d col umn tabl e name 1333 Joi n attri butes not found i n vari abl e 1334 I nput parameters do not have the same tabl e type SAP HANA Database - SQL Reference Manual 191 2012-12-19 1335 Cycl i c dependency found i n a runti me procedure 1336 Unexpected i nternal excepti on caught i n a runti me procedure 1337 Vari abl e depends on an unassi gned vari abl e 1338 CE_CONVERSI ON: customi zi ng tabl e mi ssi ng 1339 Too many parameters 1340 The depth of the nested cal l i s too deep 1536 Swapx error 1537 Thi s tabl e has no swap space 1538 Swap al ready acti vated 1539 Swap not yet acti vated 1540 Swap space i s not created 1541 Fai l ure i n unpi nni ng a swap page 1542 Fai l ure i n swap fi l e 1543 Fai l ure i n accessi ng swap data fi l e 1544 Fai l ure i n accessi ng swap l og fi l e 1545 Swap buffer overfl ow 1546 Swap buffer reservati on fai l ure 1792 Shared memory error 1793 I nval i d key or i nval i d si ze 1794 The segment al ready exi sts 1795 Exceed the system-wi de l i mi t on shared memory 1796 No segment exi sts for the gi ven key, and I PC_CREAT was not speci fi ed 1797 The user does not have permi ssi on to access the shared memory segment 1798 No memory coul d be al l ocated for segment overhead 1799 I nval i d shmi d 1800 Al l ow read access for shmi d 1801 Shmi d poi nts to a removed i denti fi er 1802 The effecti ve user I D of the cal l i ng process i s not the creator 1803 The GI D or UI D val ue i s too l arge to be stored i n the structure 1804 The user does not have permi ssi on to access the shared memory segment 1805 I nval i d shmi d 1806 No memory coul d be al l ocated for the descri ptor or for the page tabl es 1807 Unknown shared memory error 2048 Col umn store error 2049 Pri mary key i s not speci fi ed for col umn tabl e 2050 Not supported ddl type for col umn tabl e 2051 Not supported data type for col umn tabl e 2052 Not supported dml type for col umn tabl e 2053 I nval i d returned val ue from attri bute engi ne 2304 Python DBAPI error 2305 I nterface fai l ure 2306 Programmi ng mi stake 2307 I nval i d query parameter 2308 Not supported encodi ng for stri ng 2560 Di stri buted metadata error 2561 DDL redi rect error 2562 DDL noti fi cati on error 2563 DDL i nval i d contai ner I D 2564 DDL i nval i d i ndex I D 2565 Di stri buted envi ronment error 2566 Network error 2567 Metadata update not supported i n sl ave 2568 Metadata update of master i ndexserver i s fai l ed 2816 Sql Scri pt Error 2817 Sql Scri pt Bui l ti n Functi on 2818 - 2889 Sql Scri pt 3584 Di stri buted SQL error SAP HANA Database - SQL Reference Manual 192 2012-12-19 3585 Expressi on shi ppi ng fai l ure 3586 Operator shi ppi ng fai l ure 3587 I nval i d protocol or i ndexserver (stati sti csserver) shutdown duri ng di stri buted query executi on 3588 Sequence shi ppi ng fai l ure 3589 Remote query exectui on fai l ure 3840 general audi ti ng error 3841 I nval i d pri vi l ege 3842 Audi t trai l wri ter i s bl ocked 3843 Audi t pol i cy wi th current name al ready exi sts 3844 I nval i d combi nati on of audi t acti ons 3845 I nval i d acti on status for audi ti ng 3846 I nval i d audi ti ng l evel 3847 I nval i d pol i cy name 4096 General error i n the process of stored pl an 4097 I nval i d operati on i n generati ng pl ans 4098 I nval i d operati on i n executi on the chosen pl an 4099 I nval i d operati on i n stori ng the pi nned pl an 4100 I nval i d operati on i n l oadi ng the stored pl an 4101 I nval i d operati on i n del eti ng the chosen pl an 4103 Fai l ed to prepare for runti me reorgani zati on 4104 Transacti on bl ocked si nce runti me reorgani zati on i s i n progress 4105 ERR_REORG_TRANS_EXI STS_GENERAL. Cannot start reorgani zati on due to the transacti ons i n executi on SAP HANA Database - SQL Reference Manual 193 2012-12-19