Sadas SQL Reference
Transcription
Sadas SQL Reference
SQL Reference Guide Release: 6.0.6.0 Last update: 18/02/2014 Sadas SQL Reference © 2014 Advanced Systems srl All rights reserved. No parts of this work may be reproduced in any form or by any means - graphic, electronic, or mechanical, including photocopying, recording, taping, or information storage and retrieval systems - without the written permission of the publisher. Products that are referred to in this document may be either trademarks and/or registered trademarks of the respective owners. The publisher and the author make no claim to these trademarks. While every precaution has been taken in the preparation of this document, the publisher and the author assume no responsibility for errors or omissions, or for damages resulting from the use of information contained in this document or from the use of programs and source code that may accompany it. In no event shall the publisher and the author be liable for any loss of profit or any other commercial damage caused or alleged to have been caused directly or indirectly by this document. The SQL Reference Guide for the SADAS dbms by Advanced Systems srl This reference guide contains a complete description of the Structured Query Language (SQL) used to manage information in a SADAS database. SADAS SQL is a subset of the American National Standards Institute (ANSI) and the International Standards Organization (ISO) SQL:1999 standard. This document is intended for all users of SADAS SQL and SADAS database. The SQL Reference Guide for the SADAS dbms by Advanced Systems srl This is the SQL Reference for the SADAS database on release 6.0.6.0 Copyright © 2005, 2014, SADAS. All rights reserved. Author: Vincenzo Minei Table of Contents 0 Part I Introduction to SADAS SQL 18 1 History................................................................................................................................... of SQL 18 2 SQL Standards ................................................................................................................................... 18 How SQL Works .......................................................................................................................................................... 19 Common Language .......................................................................................................................................................... for All Relational Databases 20 3 Lexical ................................................................................................................................... Conventions 20 4 Tools ................................................................................................................................... 21 5 SADAS ................................................................................................................................... Datatypes 22 6 SADAS ................................................................................................................................... Supported Datatypes 23 7 Character ................................................................................................................................... datatypes 25 8 Numeric ................................................................................................................................... datatypes 25 9 Datetime ................................................................................................................................... datatypes 27 DATE Datatype .......................................................................................................................................................... 27 TIME Datatype .......................................................................................................................................................... 27 TIMESTAMP Datatype .......................................................................................................................................................... 28 10 Code datatype ................................................................................................................................... 28 11 Datatype ................................................................................................................................... Comparison Rules 28 Numeric Values.......................................................................................................................................................... 28 Datetime Values.......................................................................................................................................................... 28 Character Values .......................................................................................................................................................... 28 Binary Comparisons ......................................................................................................................................................... 29 Blank-Padded ......................................................................................................................................................... Comparison Semantics 29 12 Literals ................................................................................................................................... 32 Text Literals .......................................................................................................................................................... 32 Numeric Literals.......................................................................................................................................................... 33 Integer Literals ......................................................................................................................................................... 33 NUMBER and ......................................................................................................................................................... Floating-Point Literals 34 Datetime Literals ......................................................................................................................................................... 35 13 Comments ................................................................................................................................... 35 14 Schema/Database ................................................................................................................................... Objects 36 Schema/Database .......................................................................................................................................................... Objects 36 Nonschema Objects .......................................................................................................................................................... 37 Part II Pseudocolumns 39 1 ROWID ................................................................................................................................... Pseudocolumn 39 2 ROWNUM ................................................................................................................................... Pseudocolumn 40 Part III Operators 42 1 About................................................................................................................................... SQL Operators 42 Unary and Binary .......................................................................................................................................................... Operators 42 Operator Precedence .......................................................................................................................................................... 42 © 2014 Advanced Systems srl 2 Arithmetic ................................................................................................................................... Operators 43 3 Concatenation ................................................................................................................................... Operators 44 4 Set Operators ................................................................................................................................... 45 Part IV SQL Functions 47 1 About................................................................................................................................... SQL Functions 47 Single-Row Functions .......................................................................................................................................................... 48 Numeric Functions ......................................................................................................................................................... 48 Character Functions ......................................................................................................................................................... Returning Character Values 49 Character Functions ......................................................................................................................................................... Returning Numeric Values (COPY) 50 Datetime Functions ......................................................................................................................................................... 50 General Comparison ......................................................................................................................................................... Functions 51 Conversion......................................................................................................................................................... Functions 51 Encoding and ......................................................................................................................................................... Decoding Functions 52 Masking functions ......................................................................................................................................................... 52 Aggregate Functions .......................................................................................................................................................... 53 2 ABS ................................................................................................................................... 54 3 ACOS................................................................................................................................... 54 4 ADD_MONTHS ................................................................................................................................... 55 5 ASCII................................................................................................................................... 56 6 ASIN ................................................................................................................................... 56 7 ATAN................................................................................................................................... 57 8 AVG ................................................................................................................................... 57 9 BIN_TO_NUM ................................................................................................................................... 58 10 BITAND ................................................................................................................................... 59 11 BITOR................................................................................................................................... 59 12 BITXOR ................................................................................................................................... 60 13 CEIL[ING] ................................................................................................................................... 61 14 CHR ................................................................................................................................... 62 15 CONCAT ................................................................................................................................... 62 16 COS ................................................................................................................................... 63 17 COSH................................................................................................................................... 63 18 COUNT ................................................................................................................................... 64 19 CURDATE ................................................................................................................................... 65 20 CURRENT_DATE ................................................................................................................................... 65 21 CURRENT_TIME ................................................................................................................................... 65 22 CURRENT_TIMESTAMP ................................................................................................................................... 66 23 CURTIME ................................................................................................................................... 66 24 DATEADD ................................................................................................................................... 66 25 DATEDIFF ................................................................................................................................... 68 26 DATEPART ................................................................................................................................... 70 27 DATE_TO_JULIAN ................................................................................................................................... 72 © 2014 Advanced Systems srl 28 DAYNAME ................................................................................................................................... 72 29 DAYOFWEEK ................................................................................................................................... 73 30 DAYOFYEAR ................................................................................................................................... 74 31 DECODE ................................................................................................................................... 75 32 DIGITS ................................................................................................................................... 76 33 EXP ................................................................................................................................... 77 34 EXTFUNC ................................................................................................................................... 78 35 FIRST_DAY ................................................................................................................................... 80 36 FIRST_WORK_DAY ................................................................................................................................... 81 37 FLOOR ................................................................................................................................... 81 38 GREATEST ................................................................................................................................... 82 39 GROUPING ................................................................................................................................... 83 40 HEXTONUM ................................................................................................................................... 84 41 HEXTOSTR ................................................................................................................................... 84 42 INITCAP ................................................................................................................................... 85 43 INSTR................................................................................................................................... 86 44 JULIAN_TO_DATE ................................................................................................................................... 86 45 ISNUMERIC ................................................................................................................................... 87 46 LAST_DAY ................................................................................................................................... 87 47 LAST_WORK_DAY ................................................................................................................................... 88 48 LCASE ................................................................................................................................... 88 49 LEAST ................................................................................................................................... 89 50 LENGTH ................................................................................................................................... 89 51 LN ................................................................................................................................... 90 52 LOCALTIMESTAMP ................................................................................................................................... 90 53 LOG ................................................................................................................................... 91 54 LOWER ................................................................................................................................... 91 55 LPAD................................................................................................................................... 92 56 LTRIM................................................................................................................................... 93 57 MAX ................................................................................................................................... 94 58 MIN ................................................................................................................................... 94 59 MOD ................................................................................................................................... 95 60 MONTHNAME ................................................................................................................................... 96 61 MONTHS_BETWEEN ................................................................................................................................... 96 62 NEXT_DAY ................................................................................................................................... 97 63 NEXT_WORK_DAY ................................................................................................................................... 97 64 NOW ................................................................................................................................... 98 65 NUMTOHEX ................................................................................................................................... 98 66 PI ................................................................................................................................... 98 © 2014 Advanced Systems srl 67 POSITION ................................................................................................................................... 99 68 POWER ................................................................................................................................... 99 69 PREVIOUS_DAY ................................................................................................................................... 100 70 PREVIOUS_WORK_DAY ................................................................................................................................... 100 71 RATIO_TO_REPORT ................................................................................................................................... 101 72 REGEXP_INSTR ................................................................................................................................... 101 73 REGEXP_REPLACE ................................................................................................................................... 101 74 REGEXP_SUBSTR ................................................................................................................................... 101 75 REMAINDER ................................................................................................................................... 102 76 REPLACE ................................................................................................................................... 102 77 ROUND ................................................................................................................................... 102 78 RPAD ................................................................................................................................... 103 79 RTRIM ................................................................................................................................... 104 80 SDS_HASH ................................................................................................................................... 105 81 SDS_HASH_SH1 ................................................................................................................................... 106 82 SIGN................................................................................................................................... 107 83 SIN ................................................................................................................................... 108 84 SINH................................................................................................................................... 108 85 SHUFFLE ................................................................................................................................... 109 86 SOUNDEX ................................................................................................................................... 109 87 SQRT ................................................................................................................................... 110 88 STDDEV ................................................................................................................................... 111 89 STRTOHEX ................................................................................................................................... 112 90 SUBSTITUTE_WITH ................................................................................................................................... 112 91 SUBSTR[ING] ................................................................................................................................... 113 92 SUM................................................................................................................................... 114 93 SYSDATE ................................................................................................................................... 114 94 SYSTIME ................................................................................................................................... 115 95 SYSTIMESTAMP ................................................................................................................................... 115 96 TAN ................................................................................................................................... 115 97 TANH ................................................................................................................................... 116 98 TO_BASE ................................................................................................................................... 116 99 TO_CHAR ................................................................................................................................... (character) 117 100 TO_CHAR ................................................................................................................................... (datetime) 117 101 TO_CHAR ................................................................................................................................... (number) 122 102 TO_CODE ................................................................................................................................... 125 103 TO_DATE ................................................................................................................................... 125 104 TO_DESC ................................................................................................................................... 126 105 TO_NUMBER ................................................................................................................................... 127 © 2014 Advanced Systems srl 106 TO_TIME ................................................................................................................................... 128 107 TO_TIMESTAMP ................................................................................................................................... 128 108 TODAY ................................................................................................................................... 129 109 TRANSLATE ................................................................................................................................... 129 110 TRIM................................................................................................................................... 131 111 TRUNC[ATE] ................................................................................................................................... (number) 131 112 UCASE ................................................................................................................................... 132 113 UPPER ................................................................................................................................... 132 114 VARIANCE ................................................................................................................................... 132 115 VSIZE ................................................................................................................................... 133 Part V Expressions 135 1 About ................................................................................................................................... SQL Expressions 135 2 Simple ................................................................................................................................... Expressions 137 3 Compound ................................................................................................................................... Expressions 138 4 Case................................................................................................................................... Expressions 138 5 Datetime ................................................................................................................................... Expressions 140 6 Function ................................................................................................................................... Expressions 140 7 Scalar ................................................................................................................................... Subquery Expressions 141 8 Expression ................................................................................................................................... Lists 141 Part VI Conditions 144 1 About ................................................................................................................................... SQL Conditions 144 Condition Precedence .......................................................................................................................................................... 145 2 Comparison ................................................................................................................................... Conditions 146 Simple Comparison .......................................................................................................................................................... Conditions 147 3 Logical ................................................................................................................................... Conditions 148 4 Pattern-matching ................................................................................................................................... Conditions 150 LIKE Condition.......................................................................................................................................................... 150 Case Sensitivity .......................................................................................................................................................... 152 Pattern Matching .......................................................................................................................................................... on Indexed Columns 152 LIKE Condition:.......................................................................................................................................................... General Examples 153 5 Range ................................................................................................................................... Conditions 153 6 Null Conditions ................................................................................................................................... 154 7 Compound ................................................................................................................................... Conditions 155 8 EXISTS ................................................................................................................................... Condition 156 9 IN Condition ................................................................................................................................... 156 Part VII SQL DDL Clauses (constraint) 159 1 Primary ................................................................................................................................... Key Constraints 161 2 Foreign ................................................................................................................................... Key Constraints 161 3 Virtual ................................................................................................................................... Constraints 162 © 2014 Advanced Systems srl Part VIII SQL Queries and Subqueries 164 1 About ................................................................................................................................... Queries and Subqueries 164 2 Creating ................................................................................................................................... Simple Queries 165 3 The UNION ................................................................................................................................... [ALL], INTERSECT, MINUS Operators 166 4 Sorting ................................................................................................................................... Query Results 168 5 Joins................................................................................................................................... 169 Join Conditions.......................................................................................................................................................... 169 Equijoins .......................................................................................................................................................... 170 Self Joins .......................................................................................................................................................... 170 Special notes .......................................................................................................................................................... 171 Special outer joins .......................................................................................................................................................... 173 6 Using................................................................................................................................... Subqueries 173 7 Unnesting ................................................................................................................................... of Nested Subqueries 174 8 Selecting ................................................................................................................................... from the DUAL Table 175 Part IX SQL STATEMENTS 177 1 Types ................................................................................................................................... of SQL Statements 177 2 Data................................................................................................................................... Definition Language (DDL) Statements 177 3 Data................................................................................................................................... Manipulation Language (DML) Statements 178 4 ALTER ................................................................................................................................... TABLE 178 5 ALTER ................................................................................................................................... USER 183 6 ALTER ................................................................................................................................... VIEW 185 7 APPEND ................................................................................................................................... TABLE 186 8 COMMENT ................................................................................................................................... ON COLUMN 188 9 COMMENT ................................................................................................................................... ON TABLE 190 10 CONNECT ................................................................................................................................... 191 11 CREATE ................................................................................................................................... DATABASE 193 12 CREATE ................................................................................................................................... DBADMIN 194 13 CREATE ................................................................................................................................... DOMAIN 195 14 CREATE ................................................................................................................................... EXPRESSION 196 15 CREATE ................................................................................................................................... INDEX 198 16 CREATE ................................................................................................................................... SYNONYM 199 17 CREATE ................................................................................................................................... TABLE 200 18 CREATE ................................................................................................................................... USER 204 19 CREATE ................................................................................................................................... VIEW 206 20 DEACTIVATE ................................................................................................................................... DATABASE 208 21 DEACTIVATE ................................................................................................................................... TABLE 209 22 DELETE ................................................................................................................................... STORED QUERIES 209 23 DELETE ................................................................................................................................... TABLE 211 24 DELETE ................................................................................................................................... KEYS 213 © 2014 Advanced Systems srl 25 DESCRIBE ................................................................................................................................... TABLE 215 26 DESCRIBE ................................................................................................................................... STORED QUERIES 217 27 DESCRIBE ................................................................................................................................... SYSALLCOLUMNS 218 28 DESCRIBE ................................................................................................................................... SYSDB 219 29 DESCRIBE ................................................................................................................................... SYSDOMAINS 220 30 DESCRIBE ................................................................................................................................... SYSFOREIGNKEYS 221 31 DESCRIBE ................................................................................................................................... SYSKEYS 221 32 DESCRIBE ................................................................................................................................... SYSLOG 222 33 DESCRIBE ................................................................................................................................... SYSOBJECTS 223 34 DESCRIBE ................................................................................................................................... SYSSYNONYMS 224 35 DESCRIBE ................................................................................................................................... SYSTABLES 225 36 DESCRIBE ................................................................................................................................... SYSUSERS 226 37 DESCRIBE ................................................................................................................................... SYSVIEWS 227 38 DESCRIBE ................................................................................................................................... USER 228 39 DISABLE ................................................................................................................................... INDEXGBY 229 40 DISCONNECT ................................................................................................................................... 230 41 DROP ................................................................................................................................... DATABASE 230 42 DROP ................................................................................................................................... DOMAIN 231 43 DROP ................................................................................................................................... EXPRESSION 232 44 DROP ................................................................................................................................... EXPRESSIONS 233 45 DROP ................................................................................................................................... GENERATED COLUMNS 234 46 DROP ................................................................................................................................... INDEX 235 47 DROP ................................................................................................................................... SYNONYM 236 48 DROP ................................................................................................................................... TABLE 237 49 DROP ................................................................................................................................... USER 238 50 DROP ................................................................................................................................... VIEW 239 51 DUPLICATE ................................................................................................................................... DATABASE 240 52 DUPLICATE ................................................................................................................................... TABLE 241 53 DUPLICATE ................................................................................................................................... USER 243 54 ENABLE ................................................................................................................................... INDEXGBY 243 55 EXECUTE ................................................................................................................................... STORED QUERIES 244 56 GRANT ................................................................................................................................... 245 57 INSERT ................................................................................................................................... 247 58 INSERT ................................................................................................................................... TABLE 248 59 INTERSECT ................................................................................................................................... 251 60 LOAD ................................................................................................................................... COLUMNS 253 61 LOAD ................................................................................................................................... DATABASE 254 62 LOAD ................................................................................................................................... TABLE 255 63 LOCK ................................................................................................................................... TABLE 258 © 2014 Advanced Systems srl 64 LOCK ................................................................................................................................... USER 259 65 MINUS ................................................................................................................................... 260 66 RENAME ................................................................................................................................... COLUMN 261 67 RENAME ................................................................................................................................... DATABASE 263 68 RENAME ................................................................................................................................... DOMAIN 264 69 RENAME ................................................................................................................................... TABLE 265 70 RENAME ................................................................................................................................... VIEW 266 71 REPLICATE ................................................................................................................................... DATABASE 267 72 REPLICATE ................................................................................................................................... TABLE 268 73 REVOKE ................................................................................................................................... 270 74 REWRITE ................................................................................................................................... DATABASE 272 75 REWRITE ................................................................................................................................... TABLE 273 76 SELECT ................................................................................................................................... 275 77 SET ................................................................................................................................... LANGUAGE 293 78 SET ................................................................................................................................... VARIABLE 294 79 TRUNCATE ................................................................................................................................... DATABASE 295 80 TRUNCATE ................................................................................................................................... TABLE 296 81 UNION ................................................................................................................................... 296 82 UNLOAD ................................................................................................................................... DATABASE 298 83 UNLOAD ................................................................................................................................... TABLE 299 84 UNLOCK ................................................................................................................................... USER 301 85 UNLOCK ................................................................................................................................... TABLE 302 86 UPDATE ................................................................................................................................... 303 87 UPDATE ................................................................................................................................... COLUMNS 305 88 UPDATE ................................................................................................................................... TABLE 307 89 UNSET ................................................................................................................................... VARIABLE 308 Part X Compendium of Sadas SQL Syntax 311 Part XI Sadas Database Reserved Words 319 Part XII Sadas Database SQL Errors 326 1 SDS-0000 ................................................................................................................................... "No error" 326 2 SDS-0001 ................................................................................................................................... "Null SQL script" 326 3 SDS-0002 ................................................................................................................................... "Encountered end of file in comments" 326 4 SDS-0003 ................................................................................................................................... "Non terminated text literal" 327 5 SDS-0004 ................................................................................................................................... "Text literal too long" 327 6 SDS-0005 ................................................................................................................................... "Unknown character" 328 7 SDS-0006 ................................................................................................................................... "Identifier name too long" 328 8 SDS-0007 ................................................................................................................................... "Illegal identifier" 329 © 2014 Advanced Systems srl 9 SDS-0008 ................................................................................................................................... "Illegal numeric literal" 329 10 SDS-0009 ................................................................................................................................... "Syntax error" 330 11 SDS-0010 ................................................................................................................................... "Expected relational operator" 331 12 SDS-0011 ................................................................................................................................... "Expected logical operator" 331 13 SDS-0012 ................................................................................................................................... "Expected arithmetic operator" 332 14 SDS-0013 ................................................................................................................................... "Expected identifier after point" 332 15 SDS-0014 ................................................................................................................................... "Expected identifier or constant value" 333 16 SDS-0015 ................................................................................................................................... "Unknown table/view name" 333 17 SDS-0016 ................................................................................................................................... "Unknown column name" 334 18 SDS-0017 ................................................................................................................................... "Wrong use of function TO_DATE" 335 19 SDS-0018 ................................................................................................................................... "Operands of different datatypes" 336 20 SDS-0019 ................................................................................................................................... "Exceeded the limit of the number precision" 336 21 SDS-0020 ................................................................................................................................... "Alias name already used" 337 22 SDS-0021 ................................................................................................................................... "Wrong use of function TO_TIMESTAMP" 338 23 SDS-0022 ................................................................................................................................... "Illegal GROUP BY clause" 338 24 SDS-0023 ................................................................................................................................... "Alias name is already a column name" 339 25 SDS-0024 ................................................................................................................................... "Illegal operation on operands" 339 26 SDS-0025 ................................................................................................................................... "Wrong number of parameters" 340 27 SDS-0026 ................................................................................................................................... "Illegal function in the context" 340 28 SDS-0027 ................................................................................................................................... "Improper use of alias name" 341 29 SDS-0028 ................................................................................................................................... "Unloaded table" 341 30 SDS-0029 ................................................................................................................................... "Unsupported function/operation" 342 31 SDS-0030 ................................................................................................................................... "Wrong use of function TO_TIME" 344 32 SDS-0031 ................................................................................................................................... "Illegal ORDER BY clause" 345 33 SDS-0032 ................................................................................................................................... "Improper use of DISTINCT clause" 345 34 SDS-0033 ................................................................................................................................... "Internal error; analyze the context!" 346 35 SDS-0034 ................................................................................................................................... "GROUP BY clause required in this case" 346 36 SDS-0035 "Expected a constant positive expression in column definition" ................................................................................................................................... 346 37 SDS-0036 ................................................................................................................................... "Invalid column description" 347 38 SDS-0037 ................................................................................................................................... "Table/view already exists" 348 39 SDS-0038 ................................................................................................................................... "Table/view does not exist" 348 40 SDS-0039 ................................................................................................................................... "Invalid constraint" 349 41 SDS-0040 ................................................................................................................................... "Primary key is not unique" 350 42 SDS-0041 ................................................................................................................................... "Table/view auto-reference through FOREIGN KEY" 350 43 SDS-0042 ................................................................................................................................... "Duplicated FOREIGN KEY" 351 44 SDS-0043 ................................................................................................................................... "Column isn’t a PRIMARY KEY" 351 45 SDS-0044 ................................................................................................................................... "Column already exists" 352 46 SDS-0045 ................................................................................................................................... "Type mismatch for FOREIGN KEY" 353 © 2014 Advanced Systems srl 47 SDS-0046 "Invalid NOT STAR JOIN: SELECT clause cannot contain fields................................................................................................................................... of right table" 353 48 SDS-0047 ................................................................................................................................... "The comparison value for the coded field is too long" 354 49 SDS-0048 ................................................................................................................................... "Database already exists" 354 50 SDS-0049 ................................................................................................................................... "Database does not exist" 355 51 SDS-0050 ................................................................................................................................... "Illegal DISTINCT clause" 355 52 SDS-0051 ................................................................................................................................... "Too many DISTINCT clauses" 356 53 SDS-0052 ................................................................................................................................... "Non executable SQL" 357 54 SDS-0053 ................................................................................................................................... "Illegal UNION [ALL]/INTERSECT/MINUS" 357 55 SDS-0054 ................................................................................................................................... "User has no rights to execute this command" 359 56 SDS-0055 ................................................................................................................................... "Wrong hidden condition" 359 57 SDS-0056 ................................................................................................................................... "The user does not exist" 360 58 SDS-0057 ................................................................................................................................... "User already exists" 360 59 SDS-0058 ................................................................................................................................... "No database available" 361 60 SDS-0059 ................................................................................................................................... "No user connected" 361 61 SDS-0060 ................................................................................................................................... "Cannot DROP current database" 362 62 SDS-0061 ................................................................................................................................... "Division by zero" 362 63 SDS-0062 ................................................................................................................................... "Wrong use of function NEXT_DAY" 363 64 SDS-0063 "LPAD/RPAD functions: the second parameter must be a not negative ................................................................................................................................... integer constant" 363 65 SDS-0064 ................................................................................................................................... "LPAD/RPAD functions: the third parameter must be a char" 364 66 SDS-0065 "SUBSTR function accepts only not negative integer parameters" ................................................................................................................................... 364 67 SDS-0066 ................................................................................................................................... "Root of a negative number" 365 68 SDS-0067 ................................................................................................................................... "Improper use of INFO/SHADOW keywords" 366 69 SDS-0068 ................................................................................................................................... "Illegal HAVING clause" 366 70 SDS-0069 ................................................................................................................................... "Illegal use of function TRANSLATE" 367 71 SDS-0070 ................................................................................................................................... "Table has not a PRIMARY KEY" 368 72 SDS-0071 ................................................................................................................................... "Database ID is wrong (<> 10 characters)" 368 73 SDS-0072 ................................................................................................................................... "Database ID already exists" 369 74 SDS-0073 ................................................................................................................................... "Wrong use of function DATEADD" 369 75 SDS-0074 ................................................................................................................................... "Wrong use of function DATEDIFF" 371 76 SDS-0075 ................................................................................................................................... "Wrong use of function DATEPART" 371 77 SDS-0078 ................................................................................................................................... "Wrong date" 372 78 SDS-0079 ................................................................................................................................... "Wrong time" 373 79 SDS-0089 ................................................................................................................................... "IN clause: expected constant expression" 373 80 SDS-0090 "TO_CHAR function: second and third parameter must be string................................................................................................................................... constants" 374 81 SDS-0091 ................................................................................................................................... "TO_CHAR function: erroneous NLS description" 374 82 SDS-0092 ................................................................................................................................... "TO_CHAR function: invalid numeric format model" 375 © 2014 Advanced Systems srl 83 SDS-0093 ................................................................................................................................... "TO_CHAR function: invalid date/time format model" 375 84 SDS-0094 ................................................................................................................................... "DECODE function: default parameter must be constant" 376 85 SDS-0095 ................................................................................................................................... "Scalar sub-query must return an unique value" 376 86 SDS-0096 ................................................................................................................................... "Wrong DISTRIBUTE parameter" 377 87 SDS-0097 ................................................................................................................................... "Illegal DISTRIBUTE clause" 378 88 SDS-0098 ................................................................................................................................... "Too many DISTRIBUTE column ranges" 379 89 SDS-0099 ................................................................................................................................... "Wrong DISTRIBUTE parameter configuration" 379 90 SDS-0100 ................................................................................................................................... "Too many DISTRIBUTE ranges" 380 91 SDS-0101 ................................................................................................................................... "Wrong timestamp" 380 92 SDS-0102 ................................................................................................................................... "STAR operand not supported in this context" 380 93 SDS-0103 ................................................................................................................................... "Too many elements in update list" 381 94 SDS-0104 ................................................................................................................................... "Illegal use of an aggregate function" 381 95 SDS-0105 ................................................................................................................................... "UPDATE is not allowed on primary key" 382 96 SDS-0106 ................................................................................................................................... "User domain does not exist" 382 97 SDS-0107 ................................................................................................................................... "Domain not enabled for user" 382 98 SDS-0108 "RATIO_TO_REPORT function: parameter must be a column" ................................................................................................................................... 383 99 SDS-0109 ................................................................................................................................... "VSIZE function: parameter must be a column" 383 100 SDS-0110 ................................................................................................................................... "TO_NUMBER function: unable to convert the string" 384 101 SDS-0111 ................................................................................................................................... "Invalid numeric value for the function" 384 102 SDS-0112 ................................................................................................................................... "UPDATE not allowed on column ROWID" 385 103 SDS-0113 ................................................................................................................................... "Wrong use of function SUBSTITUTE_WITH" 385 104 SDS-0114 ................................................................................................................................... "Domain already exists" 386 105 SDS-0115 ................................................................................................................................... "Domain does not exist" 386 106 SDS-0116 ................................................................................................................................... "LIKE works only on alphanumeric columns" 387 107 SDS-0117 ................................................................................................................................... "Operands of different datatypes in between" 387 108 SDS-0118 "IN clause: operands of different datatypes in the list of constants" ................................................................................................................................... 388 109 SDS-0119 ................................................................................................................................... "Join graph not supported" 388 110 SDS-0120 "Cannot use columns of code type as terms of an expressions" ................................................................................................................................... 389 111 SDS-0121 ................................................................................................................................... "Illegal identifier: the first character must be a letter" 390 112 SDS-0122 ................................................................................................................................... "Null identifier" 390 113 SDS-0123 ................................................................................................................................... "Column not found in the sub-query of the FROM clause" 391 114 SDS-0124 ................................................................................................................................... "Too much tables in DELETE statement" 391 115 SDS-0125 ................................................................................................................................... "Not supported syntax for CREATE VIEW statement" 392 116 SDS-0126 ................................................................................................................................... "Cannot nest more group functions" 392 117 SDS-0127 ................................................................................................................................... "In DUAL SELECT following clause is not allowed" 393 118 SDS-0128 ................................................................................................................................... "UPDATE: group functions are not allowed on right part" 393 119 SDS-0129 ................................................................................................................................... "TRUNC/ROUND: exceeded the limit of decimals" 393 © 2014 Advanced Systems srl 120 SDS-0130 ................................................................................................................................... "DELETE KEYS statement is not allowed on a view" 394 121 SDS-0131 ................................................................................................................................... "Internal error; undefined type; analyze the context!" 394 122 SDS-0132 ................................................................................................................................... "External function not found in Catalog" 395 123 SDS-0133 "External function needs in the first parameter an alphanumeric ................................................................................................................................... constant (FunctionId)" 395 124 SDS-0134 ................................................................................................................................... "External function error" 395 125 SDS-0135 ................................................................................................................................... "Function not available in this Sadas version" 395 126 SDS-0136 ................................................................................................................................... "Data are not compatible with the Server" 396 127 SDS-0137 "Wrong number of columns in the sub-query of the FROM clause" ................................................................................................................................... 396 128 SDS-0138 ................................................................................................................................... "INSERT: wrong number of constants" 397 129 SDS-0139 ................................................................................................................................... "INSERT: wrong type of a constant" 397 130 SDS-0140 ................................................................................................................................... "Table locked" 398 131 SDS-0141 ................................................................................................................................... "DIGITS function allows only one integer column" 398 Part XIII How to Read Syntax Diagrams 400 1 Graphic ................................................................................................................................... Syntax Diagrams 400 Required Keyw.......................................................................................................................................................... ords and Parameters 402 Optional Keyw.......................................................................................................................................................... ords and Parameters 403 Syntax Loops .......................................................................................................................................................... 403 Multipart Diagrams .......................................................................................................................................................... 404 2 Backus-Naur ................................................................................................................................... Form Syntax 404 Index © 2014 Advanced Systems srl 406 Part I Introduction to SADAS SQL 1 18 Introduction to SADAS SQL Structured Query Language (SQL) is the set of statements used by any application needing to access data in a SADAS database. Application programs and SADAS tools often allow users to access the database without using SQL directly, but these applications in turn use SQL when executing the user request. 1.1 History of SQL Dr. E. F. Codd published the paper, "A Relational Model of Data for Large Shared Data Banks", in June 1970 in the Association of Computer Machinery (ACM) journal,Communications of the ACM. Codd's model is now accepted as the definitive model for relational database management systems (RDBMS). The language, Structured English Query Language (SEQUEL) was developed by IBM Corporation, Inc., to use Codd's model. SEQUEL later became SQL (still pronounced "sequel"). In 1979, Relational Software, Inc. introduced the first commercially available implementation of SQL. Today, SQL is accepted as the standard RDBMS language. 1.2 SQL Standards Industry-accepted committees are the American National Standards Institute (ANSI) and the International Organization for Standardization (ISO), which is affiliated with the International Electrotechnical Commission (IEC). Both ANSI and the ISO/IEC have accepted SQL as the standard language for relational databases. When a new SQL standard is simultaneously published by these organizations, the names of the standards conform to conventions used by the organization, but the standards are technically identical. The latest SQL standard was adopted in July 2003 and is often called SQL:2003. One part of the SQL standard, Part 14, SQL/XML (ISO/IEC 9075-14) was revised in 2006 and is often referenced as "SQL/XML:2006". The formal names of this standard, with the exception of SQL/XML, are: ANSI/ISO/IEC 9075:2003, "Database Language SQL", Parts 1 ("SQL/Framework"), 2 ("SQL/Foundation"), 3 ("SQL/CLI"), 4 ("SQL/PSM"), 9 ("SQL/MED"), 10 © 2014 Advanced Systems srl Introduction to SADAS SQL 19 ("SQL/OLB"), 11("SQL/Schemata"), and 13 ("SQL/JRT") ISO/IEC 9075:2003, "Database Language SQL", Parts 1 ("SQL/Framework"), 2 ("SQL/Foundation"), 3 ("SQL/CLI"), 4 ("SQL/PSM"), 9 ("SQL/MED"), 10 ("SQL/ OLB"), 11("SQL/Schemata"), and 13 ("SQL/JRT") The formal names of the revised part 14 are: ANSI/ISO/IEC 9075-14:2006, "Database Language SQL", Part 14 ("SQL/XML") ISO/IEC 9075-14:2006, "Database Language SQL", Part 14 ("SQL/XML") 1.2.1 How SQL Works The strength of SQL provides benefits for all types of users, including application programmers, database administrators, managers, and end users. Technically speaking, SQL is a data sublanguage. The purpose of SQL is to provide an interface to a relational database (such as SADAS database), and all SQL statements are instructions to the database. In this SQL differs from general-purpose programming languages like C and BASIC. Among the features of SQL are the following: It processes sets of data as groups rather than as individual units. It provides automatic navigation to the data. It uses statements which are complex and powerful individually, and which therefore stand alone. SQL lets you work with data at the logical level. You need to be concerned with the implementation details only when you want to manipulate the data. For example, to retrieve a set of rows from a table, you define a condition used to filter the rows. All rows satisfying the condition are retrieved in a single step and can be passed as a unit to the user, to another SQL statement, or to an application. You need not deal with the rows one by one, nor do you have to worry about how they are physically stored or retrieved. All SQL statements use the optimizer, a part of SADAS database that determines the most © 2014 Advanced Systems srl Introduction to SADAS SQL 20 efficient means of accessing the specified data. SQL provides statements for a variety of tasks, including: Querying data Creating, replacing, altering, and dropping objects Controlling access to the database and its objects Guaranteeing database consistency and integrity SQL unifies all of the preceding tasks in one consistent language. 1.2.2 Common Language for All Relational Databases All major relational database management systems support SQL, so you can transfer all skills you have gained with SQL from one database to another. In addition, all programs written in SQL are portable. They can often be moved from one database to another with very limited changes. 1.3 Lexical Conventions The following lexical conventions for issuing SQL statements apply specifically to the SADAS database implementation of SQL, but are generally acceptable in other SQL implementations. When you issue a SQL statement, you can include one or more tabs, carriage returns, spaces, or comments anywhere a space occurs within the definition of the statement. Thus, SADAS database evaluates the following two statements in the same manner: SELECT last_name,salary*12,MONTHS_BETWEEN(hire_date, SYSDATE) FROM employees WHERE department_id = 30 ORDER BY last_name; SELECT last_name, salary * 12, MONTHS_BETWEEN( hire_date, SYSDATE ) FROM employees ORDER BY last_name; © 2014 Advanced Systems srl Introduction to SADAS SQL 21 Case is insignificant in reserved words, keywords, identifiers and parameters. However, case is significant in text literals and quoted names. SQL statements are terminated differently in different programming environments. This documentation set uses the default SQL Editor character, the semicolon (;). 1.4 Tools Sadas provides a number of utilities to facilitate your SQL development process: SADASManager is a graphical tool (based on client-server architecture) that lets you browse, create, edit, and delete (drop) database objects, run SQL statements and scripts, manipulate and export data, and create and view reports. With SADASManager, you can connect to any target SADAS database using standard SADAS database authentication. Once connected, you can perform operations on objects in the database. SCL (SADAS Console) is an interactive and batch query tool that is installed with every SADAS Database server or client installation. It has a command-line user interface. SADASWeb is a web tool that lets you browse, create, edit, and delete (drop) database objects, run SQL statements and scripts, manipulate and export data, and create and view reports. You can also connect to schemas for selected third-party (non-SADAS) databases, such as Oracle, DB2, MySQL, Microsoft SQL Server, and Microsoft Access, view metadata and data in these databases, and migrate these databases to SADAS. The SADAS Call Interface and SADAS Package let you embed standard SQL statements within a procedural programming language. The SADAS Call Interface (SCI) lets you embed SQL statements in C programs. The SADAS Package lets you embed SQL statements in GUI and WEB Delphi © 2014 Advanced Systems srl Introduction to SADAS SQL 22 programs. 1.5 SADAS Datatypes Each value manipulated by the SADAS database has a datatype. The datatype of a value associates a fixed set of properties to the value. These properties cause SADAS to treat values of each datatype differently from other datatypes. When you create a table, you must specify a datatype for each of its columns. These datatypes define the domain of values that each column can contain or each argument can have. For example, DATE columns cannot accept the value February 29 (except for a leap year) or the values 2 or 'SKY'. Each value subsequently placed in a column assumes the datatype of the column. For example, if you have '01/01/1998' into a DATE column, then Sadas treats the '01/01/1998' character string as a DATE value after verifying that it translates to a valid date. The syntax of SADAS datatypes appears in the next section diagrams. A datatype can be either scalar or nonscalar. A scalar type contains an atomic value, whereas a nonscalar (sometimes called a "collection") contains a set of values. SADAS supports only scalar datatypes. © 2014 Advanced Systems srl Introduction to SADAS SQL 1.6 23 SADAS Supported Datatypes The following table summarizes all datatypes supported by SADAS. Datatype Description CHAR CHARACTER These datatypes are included in alphanumeric domains. Size is an optional parameter and can range from 1 to 65535. © 2014 Advanced Systems srl Introduction to SADAS SQL Datatype 24 Description VARCHAR [ (size) ] NUMBER (p [, s]) It's a number having precision p (not optional) and scale s (optional): p and s are ranging from 1 to 18. The default value for p is 1, the default value for s is 0: if the scale is specified SADAS rounds values to scale. Both precision and scale are in decimal digits. NUMBER values are represented internally as INT46 using a number of bytes according to the size of max and min values. A number value generally requires from 1 to 8 bytes. DEC [ (p [, s]) ] DECIMAL [ (p [, s]) ] NUMERIC [ (p [, s]) ] FLOAT [ (p [, s]) ] REAL [ (p [, s]) ] “DOUBLE PRECISION” [ (p [, s]) ] It's a number having precision p (optional) and scale s (optional). The precision p can range from 1 to 18. The scale s can range from 1 to 18. Both precision and scale are in decimal digits. A number value internally requires from 1 to 8 bytes. The default precision value is 1. If the scale is specified, SADAS rounds values to scale; the default scale value is 0. When precision (and optional scale) is specified the field is represented internally as INT46, using a number of bytes to represent max and min value. When precision (and optional scale) is not specified the field is represented internally as DOUBLE of 8 bytes. INT [ (size) ] INTEGER [ (size) ] SMALLINT [ (size) ] It's an integer number and size is optional. The size parameter can range from 1 to 18. A number value internally requires from 1 to 8 bytes. The default value for size is 1. The field is represented internally as INT46, using a number of bytes according to the size of max and min values. DATE Valid dates range from 01/01/0001 to 31/12/9999. The default format is ‘DD/MM/YYYY’; the format can be determined explicitly by the NLS_DATE_FORMAT parameter or implicitly by the NLS_TERRITORY parameter. The internal size is fixed at 3 bytes. This datatype contains only the date fields YEAR, MONTH, DAY. TIME Valid time range from 00:00:00.001 to 23:59:59.999. The default format is ‘HH: MM:SS:MS’; the format can be determined explicitly by the NLS_DATE_FORMAT parameter or implicitly by the NLS_TERRITORY parameter. The internal size is fixed at 4 bytes. This datatype contains only the time fields DAY, HOUR, MINUTE, SECOND, MILLISECOND. TIMESTAMP Valid timestamp range from 01/01/0001-00:00:00.001 to 31/12/999923:59:59.999. The default format is ‘DD/MM/YYYY-HH:MM:SS:MS’; the format can be determined explicitly by the NLS_DATE_FORMAT parameter or implicitly by the NLS_TERRITORY parameter. The internal size is fixed at 8 bytes. This datatype contains only the timestamp fields YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, MILLISECOND. CODE This datatype is to encode discrete and known field domains: the limit of distinct values is 65535. A CODE value is represented internally as a SMALLINT (1 or 2 bytes), with a common decode table. © 2014 Advanced Systems srl Introduction to SADAS SQL 1.7 25 Character datatypes Character datatypes Character datatypes store character (alphanumeric) data, which are words and free-form text in the database character set. They are less restrictive than other datatypes and consequently have fewer properties. For example, character columns can store any alphanumeric value, while NUMBER columns can only store numeric values. Following datatypes are used for character data: CHAR Datatype CHARACTER Datatype VARCHAR Datatype All these datatypes work as ANSI CHAR DATATYPE and type string columns. The size parameter is optional. The default length for a CHAR column is 1 byte and the maximum allowed is 65535 bytes. These datatypes specify a fixed-length character string. SADAS computes at loading time the proper size (length in bytes) for each column by setting this size to the largest value found in the column (Max InfoLength). All values shorter than the column length are blank-padded to the maximum length. 1.8 Numeric datatypes The SADAS database numeric datatypes store null, positive and negative fixed and floatingpoint numbers. Size and scale can range from 1 to 18. INT, INTEGER and SMALLINT datatypes need only size parameter, for numeric values without decimals: these datatypes are represented internally as INT46 values. NUMBER datatype needs precision parameter, with scale optional. If scale is specified, this © 2014 Advanced Systems srl Introduction to SADAS SQL 26 datatype represents fixed-point values, else INT64 values. This datatype is represented internally as INT46 value. All others numeric datatypes (DEC, DECIMALS, NUMERIC, FLOAT, REAL, DOUBLE PRECISION) have optional parameters (precision and scale). If size and scale are not specified, these datatypes represent floating-point values; the absence of precision and scale designators specifies the maximum range and precision for a Sadas number. If precision only is specified, this datatype represents INT64 values. If scale is specified, this datatype represents fixed-point values. These datatypes are represented internally as INT46 or DOUBLE values. An integer can be defined in the following form: [type](p) This represents a fixed-point number with precision p and scale 0 and is equivalent to NUMBER (p,0). A fixed-point number can be defined in the following form: [type](p,s) where: p is the precision, or the maximum number of significant decimal digits, where the most significant digit is the left-most nonzero digit, and the least significant digit is the rightmost known digit. Sadas guarantees the portability of numbers with precision of up to 18 total digits, which is equivalent to max 18 decimal digits depending on the position of the decimal point. s is the scale, or the number of digits from the decimal point to the least significant digit. The scale can range from 1 to 18. It is good practice to specify the scale and precision of a fixed-point number column for extra integrity checking on input. Specifying scale and precision does not force all values to a fixed length. If a value exceeds the max precision, then Sadas returns an error. If a value exceeds the max scale, then Sadas returns an error. A floating-point number can be defined in the following form: [type] © 2014 Advanced Systems srl Introduction to SADAS SQL 1.9 27 Datetime datatypes The datetime datatypes are DATE, TIME, and TIMESTAMP. Datetime datatypes are made up of several fields and the values of such fields globally determine the value of the datatype. Following table lists the datetime fields and their possible values. Ta ble - Da t e t ime Fie lds a nd V a lue s 1.9.1 Datetime Field Valid Values for Datetime YEAR 1 to 9999 (excluding year 0) MONTH 01 to 12 DAY 01 to 31 (limited by the values of MONTH and YEAR, according to the rules of the current NLS calendar parameter) HOUR 00 to 23 MINUTE 00 to 59 SECOND 00 to 59 MILLISECOND 000 to 999 DATE Datatype The DATE datatype stores date information. Although date information can be represented in both character and numeric datatypes, the DATE datatype has special associated properties. For each DATE value, Sadas stores the following information: century, year, month, day. 1.9.2 TIME Datatype The TIME datatype stores time information. Although time information can be represented in both character and numeric datatypes, the TIME datatype has special associated properties. For each TIME value, Sadas stores the following information: hour, minutes, seconds and milliseconds. © 2014 Advanced Systems srl Introduction to SADAS SQL 1.9.3 28 TIMESTAMP Datatype The TIMESTAMP datatype stores date and time information. Although date and time information can be represented in both character and numeric datatypes, the TIMESTAMP datatype has special associated properties. For each TIMESTAMP value, Sadas stores the following information: century, year, month, day, hour, minutes, seconds and milliseconds. 1.10 Code datatype The code datatype represents discrete domains of values (example: Nation, Region, …) where each value is usually represented in input through a coding mechanism (i.e. NA=Naples, MI=Milan, …). Sadas does not store explicitly such values but internally encodes them through integer numbers, having length of 1 byte if distinct values are less than 256, or 2 bytes if distinct values are less than 65536. Sadas mantains a catalog decode table to be used at presentation time for recreating original values. 1.11 Datatype Comparison Rules This section describes how Sadas Database compares values of each datatype. 1.11.1 Numeric Values A larger value is considered greater than a smaller one. All negative numbers are lower than zero and all positive numbers greater than zero. Thus, -1 is lower than 100; -100 is lower than 1. 1.11.2 Datetime Values A later date is considered greater than an earlier one. For example, the date '29/03/2005' is lower than '05/01/2006' and '05/01/2006-13:35:00:000' is greater than '05/01/2006- 10:09:00:000'. 1.11.3 Character Values Character values are compared on the basis of two measures: Binary sorting © 2014 Advanced Systems srl Introduction to SADAS SQL 29 Blank-padded or nonpadded comparison semantics The following subsections describe the two measures. 1.11.3.1 Binary Comparisons In binary comparison, which is the default, Sadas compares character strings according to the concatenated value of the numeric codes of the characters in the database character set. One character is greater than another if it has a greater numeric value than the other in the character set. Sadas considers blanks to be less than any other character, which is true in most character sets. These are some common character sets: 7-bit ASCII (American Standard Code for Information Interchange) EBCDIC Code (Extended Binary Coded Decimal Interchange Code) 1.11.3.2 Blank-Padded Comparison Semantics With blank-padded semantics, if the two values have different lengths, then Sadas first adds blanks to the end of the shorter one so their lengths are equal. Sadas then compares the values character by character up to the first character that differs. The value with the greater character in the first differing position is considered greater. If two values have no differing characters, then they are considered equal. This rule means that two values are equal if they differ only in the number of trailing blanks. Sadas uses blank-padded comparison semantics only when values in the comparison have not same length. With nonpadded semantics, Sadas compares two values character by character up to the first character that differs. The value with the greater character in that position is considered greater. If two values of different length are identical up to the end of the shorter one, then the longer value is considered greater. If two values of equal length have no differing characters, then the values are considered equal. Sadas uses nonpadded comparison semantics only when values in the comparison have same length or one or both of values are text literals. The results of comparing two character values using different comparison semantics may vary. The table that follows shows the results of comparing five pairs of character values using each comparison semantic. Usually, the results of blank-padded and nonpadded comparisons are the © 2014 Advanced Systems srl Introduction to SADAS SQL 30 same. The last comparison in the table illustrates the differences between the blank-padded and nonpadded comparison semantics. Blank-Padded Nonpadded 'ac' > 'ab' 'ac' > 'ab' 'ab' > 'a ' 'ab' > 'a ' 'ab' > 'a' 'ab' > 'a' 'ab' = 'ab' 'ab' = 'ab' 'a ' = 'a' 'a ' > 'a' Portions of the ASCII and EBCDIC character sets appear in Table Ascii and Table EBCDIC. Uppercase and lowercase letters are not equivalent. The numeric values for the characters of a character set may not match the linguistic sequence for a particular language. Ta ble - A SCII Cha ra ct e r Se t Decimal © 2014 Advanced Systems srl Decimal Symbol value Symbol value blank 32 ; 59 ! 33 < 60 " 34 = 61 # 35 > 62 $ 36 ? 63 % 37 @ 64 & 38 A-Z 65-90 ' 39 [ 91 ( 40 \ 92 ) 41 ] 93 Introduction to SADAS SQL 31 Decimal Decimal Symbol value Symbol value * 42 ^ 94 + 43 _ 95 , 44 ' 96 - 45 a-z 97-122 . 46 { 123 / 47 | 124 0-9 48-57 } 125 : 58 ~ 126 Ta ble - EBCDIC Cha ra ct e r Se t Decimal © 2014 Advanced Systems srl Decimal Symbol value Symbol value blank 64 % 108 ¢ 74 _ 109 . 75 > 110 < 76 ? 111 ( 77 : 122 + 78 # 123 | 79 @ 124 & 80 ' 125 ! 90 = 126 Introduction to SADAS SQL 32 Decimal 1.12 Decimal Symbol value Symbol value $ 91 " 127 * 92 a-i 129-137 ) 93 j-r 145-153 ; 94 s-z 162-169 ÿ 95 A-I 193-201 - 96 J-R 209-217 / 97 S-Z 226-233 Literals The terms literal and constant value are synonymous and refer to a fixed data value. For example, 'JACK', 'BLUE ISLAND', and '101' are all character literals; 5001 is a numeric literal. Character literals are enclosed in single quotation marks so that Sadas can distinguish them from schema object names. Many SQL statements and functions require you to specify character and numeric literal values. You can also specify literals as part of expressions and conditions. You can specify character literals with the 'text' notation and numeric literals with the integer, or number notation, depending on the context of the literal. The syntactic forms of these notations appear in the sections that follow. To specify a datetime datatype as a literal, you must take into account any optional precisions included in the datatypes. 1.12.1 Text Literals Use the text literal notation to specify values whenever 'string' appears in the syntax of expressions, conditions, SQL functions, and SQL statements in other parts of this reference. © 2014 Advanced Systems srl Introduction to SADAS SQL 33 This reference uses the terms text literal, character literal, and string interchangeably. Text, character, and string literals are always surrounded by single quotation marks. Here are some valid text literals: 'Hello' 'SADAS.dbs' 'Jackie''s raincoat' '09/03/1998' The syntax of text literals or strings follows: string::= 1.12.2 Numeric Literals Use numeric literal notation to specify fixed and floating-point numbers. 1.12.2.1 Integer Literals You must use the integer notation to specify an integer whenever integer appears in expressions, conditions, SQL functions, and SQL statements described in other parts of this reference. The syntax of integer follows: integer::= where digit is one of 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. An integer can store a maximum of 20 digits of precision. Here are some valid integers: 7 +255 © 2014 Advanced Systems srl Introduction to SADAS SQL 34 1.12.2.2 NUMBER and Floating-Point Literals You must use the number or floating-point notation to specify values whenever number or n appears in expressions, conditions, SQL functions, and SQL statements in other parts of this reference. The syntax of number follows: number::= where + or - indicates a positive or negative value. If you omit the sign, then a positive value is the default. digit is one of 0, 1, 2, 3, 4, 5, 6, 7, 8 or 9. e or E indicates that the number is specified in scientific notation. The digits after the E specify the exponent. The exponent can range from -20 to 20. Here are some valid NUMBER literals: 25 +6.34 0.5 25e-03 -1 © 2014 Advanced Systems srl Introduction to SADAS SQL 35 1.12.2.3 Datetime Literals Sadas Database supports three datetime datatypes: DATE, TIME and TIMESTAMP. Date Literals: you can specify a DATE value as a string literal, or you can convert a character value to a date value with the TO_DATE function. Time Literals: you can specify a TIME value as a string literal, or you can convert a character value to a time value with the TO_TIME function. Timestamp Literals: you can specify a TIMESTAMP value as a string literal, or you can convert a character value to a timestamp value with the TO_TIMESTAMP function. The string format is fixed, as described in the following table: 1.13 Datatype Format DATE 'DD/MM/YYYY' TIME 'HH:MM:SS:MS' TIMESTAM P 'DD/MM/YYYY-HH:MM:SS:MS ' Comments You can create comments within the SQL statements, which will be stored as part of the application code that executes the SQL statements. Comments can make your application easier for you to read and maintain. For example, you can include a comment in a statement that describes the purpose of the statement within your application. Comments within SQL statements do not affect the statement execution. A comment can appear between any keywords, parameters, or punctuation marks in a statement. You can include a comment in a statement in two ways: © 2014 Advanced Systems srl Introduction to SADAS SQL 36 Begin the comment with a slash and an asterisk (/*). Proceed with the text of the comment. This text can span multiple lines. End the comment with an asterisk and a slash (*/). The opening and terminating characters need not be separated from the text by a space or a line break. Begin the comment with -- (two hyphens). Proceed with the text of the comment. This text cannot extend to a new line. End the comment with a line break. A SQL statement can contain multiple comments of both styles. The text of a comment can contain any printable characters in your database character set. Example These statements contain different comments: SELECT last_name, salary + commission_pct , job_id, e.department_id /* Select all employees whose compensation is greater than that of Pataballa.*/ FROM employees e, departments d WHERE e.department_id = d.department_id AND salary + commission_pct > 0 SELECT last_name, -- select the name salary + commission_pct, -- total compensation job_id, -- job e.department_id -- and department FROM employees e, -- of all employees departments d WHERE e.department_id = d.department_id 1.14 Schema/Database Objects Sadas Database recognizes objects that are associated with a particular schema/database and objects that are not associated with any particular schema, as described in the sections that follow. 1.14.1 Schema/Database Objects This reference uses the terms schema and database interchangeably. In Sadas a schema is a collection of logical structures of data, or schema objects. A schema is owned by a database user. Schema objects can be created and manipulated with SQL and include the following types © 2014 Advanced Systems srl Introduction to SADAS SQL 37 of objects: Indexes Tables Views Synonyms 1.14.2 Nonschema Objects Other types of objects are also stored in the database and can be created and manipulated with SQL, but are not contained in a schema: Roles Users © 2014 Advanced Systems srl Part II Pseudocolumns 2 39 Pseudocolumns A pseudocolumn is an entity which behaves like a table column, but is not always physically stored in the table. You can select from pseudocolumns, but you cannot update, or delete their values. A pseudocolumn is also similar to a function without arguments. However, functions without arguments typically return the same value for every row in the result set, whereas pseudocolumns typically return a different value for each row. This chapter contains the following sections: ¦ ROWID Pseudocolumn ¦ ROWNUM Pseudocolumn 2.1 ROWID Pseudocolumn For each row in a database table, the ROWID pseudocolumn returns the address of the row. Sadas Database rowid values contain information necessary to locate a row: ¦ In Sadas the ordinal number of record if sufficient for identifying a record in a table. Usually, a rowid value uniquely identifies a row within a table, but not within a database. Values of the ROWID pseudocolumn have the datatype INTEGER. Rowid values have several important uses: ¦ They are the fastest way to access a single row. ¦ They can show you how the rows in a table are stored. ¦ They are unique identifiers for rows in a table. You cannot use ROWID as the primary key of a table. Although you can use the ROWID pseudocolumn in the SELECT, WHERE, GROUP BY and ORDER BY clause of a query, these pseudocolumn values are not physically stored stored in the table but are referenced by all index files in the database. You cannot update a value of the ROWID pseudocolumn. © 2014 Advanced Systems srl Pseudocolumns 40 Example This statement selects the address of all rows that contain data for employees in department 20: SELECT ROWID, last_name FROM employees WHERE department_id = 20; 2.2 ROWNUM Pseudocolumn For each row returned by a query, the ROWNUM pseudocolumn represents a number indicating the order in which Sadas selects the row from a table or set of joined rows. While ROWID refers to the position of the row in the original table, ROWNUM refers to the position of the row in the output set. The first row selected has a ROWNUM of 1, the second has 2, and so on. You can use ROWNUM only to limit the number of rows returned by a query, as in this example: SELECT * FROM employees WHERE ROWNUM < 11; So you can use ROWNUM only in WHERE clause and only with (<, <=) relational operator. © 2014 Advanced Systems srl Part III Operators 3 42 Operators An operator manipulates data items and returns a result. Syntactically, an operator appears before or after an operand or between two operands. This section discusses nonlogical (non-Boolean) operators. These operators cannot be used for defining the conditions of a WHERE or HAVING clause in queries or subqueries. For information on logical operators, which define conditions, refer to section “Conditions”. 3.1 About SQL Operators Operators manipulate individual data items called operands or arguments. Operators are represented by special characters or by keywords. For example, the multiplication operator is represented by an asterisk (*). 3.1.1 Unary and Binary Operators The two general classes of operators are: unary: A unary operator operates on only one operand. A unary operator typically appears with its operand in this format: operator operand binary: A binary operator operates on two operands. A binary operator appears with its operands in this format: operand1 operator operand2 Other operators with special formats accept more than two operands. 3.1.2 Operator Precedence Precedence is the order in which Sadas Database evaluates different operators in the same expression. When evaluating an expression containing multiple operators, Sadas evaluates operators with higher precedence before evaluating those with lower precedence. Sadas evaluates operators with equal precedence from left to right within an expression. Following table lists the levels of precedence among SQL operators from high to low. Operators listed on the same line have the same precedence. Ta ble - SQL Ope ra t or Pre ce de nce © 2014 Advanced Systems srl Operators 43 Operator +, - Operation (as unary operators) Identity, negation *, / +, - Multiplication, division (as binary operators), + (as concatenation) SQL conditions are evaluated after SQL operators Addition, subtraction, concatenation See "Condition Precedence" Precedence Example: In the following expression, multiplication has a higher precedence than addition, so Sadas first multiplies 2 by 3 and then adds the result to 1. 1+2*3 You can use parentheses in an expression to override operator precedence. Sadas evaluates expressions inside parentheses before evaluating those outside. SQL also supports set operators (UNION, UNION ALL, INTERSECT, and MINUS), which combine sets of rows returned by queries, rather than individual data items. All set operators have equal precedence. 3.2 Arithmetic Operators You can use an arithmetic operator with one or two arguments to negate, add, subtract, multiply, and divide numeric values. Some of these operators are also used in arithmetic. The arguments to the operator must be numeric datatypes. Unary arithmetic operators return the same datatype as the numeric datatype of the argument. For binary arithmetic operators, Sadas determines the argument with the highest numeric precedence, implicitly converts the remaining arguments to that datatype, and returns that datatype. Following table lists arithmetic operators. Ta ble - A rit hme t ic Ope ra t ors © 2014 Advanced Systems srl Operators 44 Operator Purpose +- Example SELECT * FROM order_items When these denote a positive or negative WHERE quantity = -1 expression, they are unary operators. ORDER BY order_id, line_item_id, product_id; +- When they add or subtract, they are binary operators. */ Multiply, divide. These are binary operators. SELECT hire_date FROM employees WHERE quantiy - 100 > 1000 ORDER BY hire_date; SELECT hire_date FROM employees WHERE 100*quantiy > 100000 ORDER BY hire_date; Do not use two consecutive minus signs (--) in arithmetic expressions to indicate double negation or the subtraction of a negative value. The characters -- are used to begin comments within SQL statements. You should separate consecutive minus signs with a space or parentheses. 3.3 Concatenation Operators The concatenation operators manipulate character strings. Following table describes the concatenation operators. Ta ble - Conca t e na t ion Ope ra t ors Operator Purpose Example + Concatenates character strings. SELECT 'Name is ' + last_name FROM employees; || Concatenates character strings. SELECT 'Name is ' || last_name FROM employees; On most platforms, the concatenation operator is represented by two solid vertical bars, however Sadas platform also accepts plus sign (+) for this purpose. You can use the two concatenation operators simultaneously in the same SQL statement. Concatenation Example SELECT col1+col2+col3+col4 as "Concatenation" FROM tab1; © 2014 Advanced Systems srl Operators 45 SELECT col1||col2||col3||col4 as "Concatenation" FROM tab1; SELECT col1+col2||col3||col4 as "Concatenation" FROM tab1; 3.4 Set Operators Set operators combine the results of two component queries into a single result. Queries containing set operators are called compound queries. Following table lists SQL set operators. They are fully described, including examples and restrictions on these operators, in chapter "The UNION [ALL], INTERSECT, MINUS Operators". Ta ble - Se t Ope ra t ors Operator Returns UNION All distinct rows selected by either query UNION ALL All rows selected by either query, including all duplicates INTERSECT All distinct rows selected by both queries MINUS All distinct rows selected by the first query but not the second © 2014 Advanced Systems srl Part IV SQL Functions 4 47 SQL Functions SQL functions are similar to operators since they manipulate data items and return a result, however they differ from operators in the format of their arguments. This format enables them to operate on zero, one, two, or more arguments: function(argument, argument, ...) 4.1 About SQL Functions SQL functions are built into Sadas Database and are available for use in various appropriate SQL statements. If a SQL function is called with an argument of a datatype other than the datatype expected by the SQL function, then Sadas returns an error. In the syntax diagrams for SQL functions, arguments are indicated by their datatypes. When the parameter function appears in SQL syntax, replace it with one of the functions described in this section. Functions are grouped by the datatypes of their arguments and their return values. The syntax for the different categories of functions is as follows: function::== single_row_function::= © 2014 Advanced Systems srl SQL Functions 48 numeric_function character_function datetime_function conversion_function code_function The following sections will list the built-in SQL functions for each of the groups illustrated in the preceding diagrams. All of the built-in SQL functions will be described in alphabetical order. 4.1.1 Single-Row Functions Single-row functions return a single result row for every row of a queried table or view. These functions can appear in select lists, WHERE clauses and HAVING clauses. 4.1.1.1 Numeric Functions Numeric functions accept numeric input and return numeric values. Most numeric functions that return NUMBER values that are accurate to 18 decimal digits. The numeric functions are: ABS ACOS ASIN ATAN BITAND BITOR © 2014 Advanced Systems srl SQL Functions 49 BITXOR CEIL(ING) COS COSH EXP FLOOR LN LOG M OD PI POWER REM AINDER ROUND SIGN SIN SINH SQRT TAN TANH TRUNC(ATE) 4.1.1.2 Character Functions Returning Character Values Character functions that return character values return values of the CHAR, CHARACTER and VARCHAR datatypes, which have the same internal representation. The length of the value returned by the function is limited by the maximum length of column and constant parameters. In any case the maximum length can range from 1 to 2^32 bytes. The character functions that return character values are: CHR CONCAT INITCAP LCASE LOWER LPAD LTRIM © 2014 Advanced Systems srl SQL Functions 50 REGEXP_REPLACE REGEXP_SUBSTR REPLACE RPAD RTRIM SOUNDEX SUBSTR(ING) TRANSLATE TRIM UCASE UPPER 4.1.1.3 Character Functions Returning Numeric Values (COPY) Character functions that return numeric values can accept arguments of any character datatype. The character functions that return numeric values are: ASCII INSTR LENGTH POSITION REGEXP_INSTR 4.1.1.4 Datetime Functions Datetime functions operate on DATE, TIME and TIMESTAMP The datetime functions are: ADD_M ONTH CURDATE CURRENT_DATE CURRENT_TIM E CURRENT_TIM ESTAM P CURTIM E DATEADD © 2014 Advanced Systems srl SQL Functions 51 DATEDIFF DATEPART DAY_OF_TEAR DAY_OF_WEEK DAYNAM E LAST_DAY LAST_WORK_DAY LOCALTIM ESTAM P M ONTHNAM E M ONTHS_BETWEEN NEXT_DAY NOW SYSDATE SYSTIM E SYSTIM ESTAM P TODAY 4.1.1.5 General Comparison Functions The general comparison functions determine the greatest and or least value from a set of values. The general comparison functions are: GREATEST LEAST 4.1.1.6 Conversion Functions Conversion functions convert a value from one datatype to another. Generally, the form of the function names follows the convention " TO datatype ", where the datatype is the output datatype. The SQL conversion functions are: BIN_TO_NUM © 2014 Advanced Systems srl SQL Functions 52 HEXTOSTR STRTOHEX TO_NUM BER TO_TIM ESTAM P TO_BASE TO_CHAR TO_CODE TO_DATE TO_DESC TO_TIM E 4.1.1.7 Encoding and Decoding Functions The encoding and decoding functions allow to inspect and decode data in the database. The encoding and decoding functions are: DECODE SDS_HASH VSIZE 4.1.1.8 Masking functions Masking functions allow to change attribute values of each single row in a table while preserving global characteristics of such values (i.e. distribution of effective values, form of names, etc.) . They are normally used in order to easily derive from a production environment a realistic test database having similar size and data characteristics, but without the same combination of data for each single row (so inhibiting the reconstruction of attributes for the original items). This activity is greatly facilitated by the physical column-based organization adopted by Sadas, where each column can be easily manipulated on its own without impacting on the remaining attributes of the table. Masking functions are: © 2014 Advanced Systems srl SQL Functions 53 SHUFFLE SUBSTITUTE_WITH 4.1.2 Aggregate Functions Aggregate functions return a single result row based on groups of rows, rather than on single rows. Aggregate functions can appear in select lists and in ORDER BY and HAVING clauses. They are commonly used with the GROUP BY [DISTRIBUTE BY] clause in a SELECT statement, where Sadas Database divides the rows of a queried table or view into groups. In a query containing a GROUP BY [DISTRIBUTE BY] clause, the elements of the select list can be aggregate functions, GROUP BY [DISTRIBUTE BY] expressions, constants, or expressions involving one of these. Sadas applies the aggregate functions to each group of rows and returns a single result row for each group. If you omit the GROUP BY [DISTRIBUTE BY] clause, then Sadas applies aggregate functions in the select list to all the rows in the queried table or view. You use aggregate functions in the HAVING clause to eliminate groups from the output based on the results of the aggregate functions, rather than on the values of the individual rows of the queried table or view. All aggregate functions except COUNT(*) and GROUPING ignore nulls. The aggregate functions are: AVG COUNT M AX M IN STDDEV SUM VARIANCE GROUPING © 2014 Advanced Systems srl SQL Functions 4.2 54 ABS Syntax Purpose ABS returns the absolute value of n. This function takes as an argument any numeric datatype. The function returns the same datatype as the numeric datatype of the argument. Examples The following example returns the absolute value of -15 and +3: SELECT ABS(-15) as "Absolute" FROM DUAL; Absolute ---------15 SELECT ABS(+3) as "Absolute" FROM DUAL; Absolute ---------3 4.3 ACOS Syntax Purpose ACOS returns the arc cosine of n. The argument n must be in the range of -1 to 1, and the function returns a value in the range of 0 to pi, expressed in radians. This function takes as an argument any numeric datatype and returns FLOAT datatype. © 2014 Advanced Systems srl SQL Functions 55 Examples The following example returns the arc cosine of 0.3: SEL ECT ACOS( 0 . 3 ) " Ar c _ Co s i n e " FROM DUAL ; Ar c _ Co s i n e ---------1. 2661036727795 4.4 ADD_MONTHS Syntax date can be of datatype DATE, TIMESTAMP. Purpose ADD_MONTHS returns the date date [timestamp] plus integer months. The date argument must be a date or timestamp value. The integer argument must be an integer. The return type is always DATE [TIMESTAMP], regardless of the datatype of date. If date [timestamp] is the last day of the month or if the resulting month has fewer days than the day component of date, then the result is the last day of the resulting month. Otherwise, the result has the same day component as date [timestamp]. Examples The following example returns the month after the hire_date in the sample table employees: SELECT ADD_MONTHS(hire_date,1) as "Next month" FROM employees WHERE last_name = 'Baer'; Next Month ----------07/07/1994 © 2014 Advanced Systems srl SQL Functions 4.5 56 ASCII Syntax Purpose ASCII returns the decimal representation in the database character set of the first character of char. char can be of datatype CHAR, VARCHAR, CHARACTER. The value returned is of datatype INTEGER. The database character set is 7-bit ASCII, then this function returns an ASCII value. Examples The following example returns employees whose last names begin with the letter L, whose ASCII equivalent is 76: SELECT last_name FROM employees WHERE ASCII(SUBSTR(last_name, 1, 1,)) = 76; LAST_NAME ------------------------Ladwig Landry Lee Livingston 4.6 ASIN Syntax Purpose ASIN returns the arc sine of n. The argument n must be in the range of -1 to 1, and the function returns a value in the range of - pi/2 to pi/2, expressed in radians. This function takes as an argument any numeric datatype and returns FLOAT datatype. © 2014 Advanced Systems srl SQL Functions 57 Examples The following example returns the arc sine of 0.3: SELECT ASIN(0.3) "Arc_Sine" FROM DUAL; Arc_Sine -----------------0.304692654015398 4.7 ATAN Syntax Purpose ATAN returns the arc tangent of n. The argument n can be in an unbounded range and returns a value in the range of - pi/2 to pi/2, expressed in radians. This function takes as an argument any numeric datatype and returns FLOAT datatype. Examples The following example returns the arc tangent of 0.3: SELECT ATAN(0.3) "Arc_Tangent" FROM DUAL; Arc_Tangent -----------------0.291456794477867 4.8 AVG Syntax Purpose © 2014 Advanced Systems srl SQL Functions AVG 58 returns average value of expr. This function takes as an argument any numeric datatype The function always returns DOUBLE datatype. Aggregate Example The following example calculates the average salary of all employees in the hr.employees table: SELECT AVG(salary) as "Average" FROM employees; Average -------------6461.68224 4.9 BIN_TO_NUM Syntax Purpose BI N_TO_NUM converts a bit vector to its equivalent number. Each argument to this function represents a bit in the bit vector. This function takes as arguments any numeric datatype. Each ex pr must evaluate to 0 or 1. This function returns I NTEGER. The supported size of bit vector is 8, then you can specify max 8 e x p r parameters. Example The following example converts a binary value to a number: SEL ECT BI N_ TO_ NUM( 1 , 0 , 1 , 0 ) Bi n a r y -----10 © 2014 Advanced Systems srl a s Bi n a r y FROM DUAL ; SQL Functions 4.10 59 BITAND Syntax Purpose The BI TAND function treats its inputs and its output as vectors of bits; the output is the bitwise AND of the inputs. The types of e x p r 1 and e x p r 2 are I NTEGER, and the result is of type I NTEGER. The arguments must be in the range -(2(n-1)) .. (2(n-1)-1). If an argument is out of this range, the result is undefined. The current implementation of BI TAND defines n = 64 . Example The following example performs an AND operation on the numbers 6 ( bi nar y 1, 1, 0) and 3 ( bi nar y 0, 1, 1) : SEL ECT BI TAND( 6 , 3 ) a s I NTAND FROM DUAL ; I NTAND -----2 This is the same as the following example, which shows the binary values of 6 and 3. The BI TAND function operates only on the significant digits of the binary values: SEL ECT BI TAND( BI N_ TO_ NUM( 1 , 1 , 0 ) , BI N_ TO_ NUM( 0 , 1 , 1 ) ) FROM DUAL ; Bi n a r y ---------2 4.11 BITOR Syntax Purpose © 2014 Advanced Systems srl a s " Bi n a r y " SQL Functions 60 The BI TOR function treats its inputs and its output as vectors of bits; the output is the bitwise OR of the inputs. The types of e x p r 1 and e x p r 2 are I NTEGER, and the result is of type I NTEGER. The arguments must be in the range -(2(n-1)) .. (2(n-1)-1). If an argument is out of this range, the result is undefined. The current implementation of BI TOR defines n = 64 . Example The following example performs an OR operation on the numbers 6 ( bi nar y 1, 1, 0) and 3 ( bi nar y 0, 1, 1) : SEL ECT BI TOR( 6 , 3 ) a s I NTOR FROM DUAL ; I NTOR -----7 This is the same as the following example, which shows the binary values of 6 and 3. The BI TOR function operates only on the significant digits of the binary values: SEL ECT BI TOR( BI N_ TO_ NUM( 1 , 1 , 0 ) , BI N_ TO_ NUM( 0 , 1 , 1 ) ) FROM DUAL ; a s " Bi n a r y " Bi n a r y ---------7 4.12 BITXOR Syntax Purpose The BI TXOR function treats its inputs and its output as vectors of bits; the output is the bitwise XOR of the inputs. The types of e x p r 1 and e x p r 2 are I NTEGER, and the result is of type I NTEGER. The arguments must be in the range -(2(n-1)) .. (2(n-1)-1). If an argument is out of this range, the result is undefined. The current implementation of BI TXOR defines n = 64 . © 2014 Advanced Systems srl SQL Functions 61 Example The following example performs an XOR operation on the numbers 6 ( bi nar y 1, 1, 0) and 3 ( bi nar y 0, 1, 1) : SEL ECT BI TXOR( 6 , 3 ) a s I NTXOR FROM DUAL ; I NTXOR -----5 This is the same as the following example, which shows the binary values of 6 and 3. The BI TOR function operates only on the significant digits of the binary values: SEL ECT BI TXOR( BI N_ TO_ NUM( 1 , 1 , 0 ) , BI N_ TO_ NUM( 0 , 1 , 1 ) ) FROM DUAL ; a s " Bi n a r y " Bi n a r y ---------5 4.13 CEIL[ING] Syntax Purpose CEIL (or CEILING) returns the smallest integer greater than or equal to n. This function takes as an argument any numeric datatype. The function returns the same datatype as the numeric datatype of the argument. Examples The following example returns the smallest integer greater than or equal to the order total of a specified order: SELECT order_total, CEIL(order_total) FROM orders WHERE order_id = 2434; ORDER_TOTAL CEIL(ORDER_TOTAL) ----------- ----------------268651.8 268652 © 2014 Advanced Systems srl SQL Functions 4.14 62 CHR Syntax Purpose CHR returns the character having the binary equivalent to n as a CHAR value in 7-bit ASCII character set. If n > 256, then Sadas Database returns the binary equivalent of n mod 256. This function takes as an argument a NUMBER value; if value has decimals, then Sadas truncate input value. Use of the CHR function results in code that is not portable between ASCII- and EBCDICbased machine architectures. Example SELECT CHR(67)+CHR(65)+CHR(84) "Dog" FROM DUAL; Dog --CAT 4.15 CONCAT Syntax Purpose CONCAT returns char1 concatenated with char2. Both char1 and char2 can be any of the datatypes CHAR, CHARACTER, VARCHAR. This function is equivalent to the concatenation operator (||). © 2014 Advanced Systems srl SQL Functions 63 Example SELECT CONCAT('PRE ','COMPUTING') AS CTC FROM DUAL CTC -------------PRE COMPUTING 4.16 COS Syntax Purpose COS returns the cosine of n (an angle expressed in radians). The function returns FLOAT datatype. Examples The following example returns the cosine of 180 degrees: SELECT COS(180 * 3.14159265359/180) as "Cosine of 180 degrees" FROM DUAL; Cosine of 180 degrees ---------------------1 4.17 COSH Syntax Purpose COSH returns the hyperbolic cosine of n. The function returns FLOAT datatype. Examples The following example returns the hyperbolic cosine of zero: © 2014 Advanced Systems srl SQL Functions 64 SELECT COSH(0) "Hyperbolic cosine of 0" FROM DUAL; Hyperbolic cosine of 0 ---------------------1 4.18 COUNT Syntax Purpose COUNT returns the number of rows returned by the query. You can use it as an aggregate. If you specify expr, then COUNT returns the number of rows where expr is not null. You can count either all rows, or only distinct values of expr. If you specify the asterisk (*), then this function returns all rows, including duplicates. In Sadas null value is as others value, then, if you specify the asterisk (*) or expr, the result is the same. COUNT never returns null. Aggregate Examples The following examples use COUNT as an aggregate function: SELECT COUNT(*) as "Total" FROM employees; Total ---------107 SELECT COUNT(*) as "Allstars" FROM employees WHERE commission_pct > 0; Allstars --------- © 2014 Advanced Systems srl SQL Functions 65 35 SELECT COUNT(commission_pct) as "Count" FROM employees; Count ---------35 SELECT COUNT(DISTINCT manager_id) as "Managers" FROM employees; Managers ---------18 4.19 CURDATE Refer to SYSDATE function. 4.20 CURRENT_DATE Syntax Purpose CURRENT_DATE returns the current date of system. Example SELECT CURRENT_DATE FROM DUAL; CURRENT_DATE -----------19/06/2008 4.21 CURRENT_TIME Syntax Purpose © 2014 Advanced Systems srl SQL Functions 66 CURRENT_TIME returns the current time of system. Example SELECT CURRENT_TIME FROM DUAL; CURRENT_TIME -----------12:28:38:375 4.22 CURRENT_TIMESTAMP Syntax Purpose CURRENT_TIMESTAMP returns the current timestamp of system. Example SELECT CURRENT_TIMESTAMP FROM DUAL; CURRENT_TIMESTAMP ----------------------19/06/2008-12:28:38:375 4.23 CURTIME Refer to SYSTIME function. 4.24 DATEADD Syntax date can be of datatype DATE, TIME or TIMESTAMP. © 2014 Advanced Systems srl SQL Functions 67 The DATEADD function syntax has these parts: Part Description interval Required. String expression that is the interval you want to add. See Settings section for values. number Required. Numeric expression that is the number of interval you want to add. The numeric expression can either be positive, for dates in the future, or negative, for dates in the past. If the numeric expression has decimals or is float value, Sadas truncate the value. date Required. DATE, TIME or TIMESTAMP representing the datetime to which interval is added. The interval argument can have the following values (case insensitive): Setting Descriptio n YY Year QQ Quarter MM Month DD Day WK Week HH Hour MI Minute SS Second MS Millisecond Purpose Returns a date to which a specified date interval has been added. You can use the DATEADD function to add or subtract a specified time interval from a date. For © 2014 Advanced Systems srl SQL Functions 68 example, you can use DATEADD to calculate a date 30 days from today or a time 45 minutes from now. Example The DATEADD function won't return an invalid date. SELECT DATEADD(‘MM’,1,’19/06/2008’) as NewDate FROM DUAL; NEWDATE ---------19/07/2008 SELECT DATEADD('Mi',1,'01:01:56:001') as NewTime FROM DUAL; NEWTIME -----------01:02:56:001 4.25 DATEDIFF Syntax date1, date2 can be of datatype DATE, TIME or TIMESTAMP. The DATEDIFF function syntax has these parts: Part Description interval Required. String expression that is the interval you want to use to calculate the differences between date1 and date2. See Settings section for values. date1, Required. Date, time or timestamp expressions. Two dates you want to use in the date2 calculation. The interval argument can have the following values: Setting Descriptio n © 2014 Advanced Systems srl SQL Functions 69 YY Year QQ Quarter MM Month DD Day WK Week HH Hour MI Minute SS Second MS Millisecond Purpose Returns the number of intervals between two dates. You can use the DATEDIFF function to determine how many specified time intervals exist between two dates. For example, you might use DATEDIFF to calculate the number of days between two dates, or the number of weeks between today and the end of the year. If interval is Week (‘WK’), however, the DATEDIFF function returns the number of calendar weeks between the two dates. It counts the number of Sundays between date1 and date2. DATEDIFF counts date2 if it falls on a Sunday; but it does not count date1, even if it does fall on a Sunday. When comparing December 31 to January 1 of the immediately succeeding year, DATEDIFF for Year (‘YY’) returns 1 even though only a day has elapsed. Example SELECT DATEDIFF(‘DD’, ’19/06/2009’,’19/06/2008’) as Interval FROM DUAL; INTERVAL ----------365 SELECT DATEDIFF('DD', '31/12/2007','01/01/2008') as Interval FROM DUAL; INTERVAL ---------1 © 2014 Advanced Systems srl SQL Functions 70 SELECT DATEDIFF('Mi','31/12/2007-12:10:12:900','01/02/2008-15:43:55:899') as Interval FROM DUAL; INTERVAL ---------46293 SELECT DATEDIFF('Mi','12:10:12:900','15:43:55:899') as Interval FROM DUAL; INTERVAL ---------213 4.26 DATEPART Syntax date can be of datatype DATE, TIME or TIMESTAMP. The DATEPART function syntax has these parts: Part Description interval Required. String expression that is the interval of time you want to return. See Settings section for values. date Required. Date, time or timestamp expression you want to evaluate. The interval argument can have the following values (case insensitive): Setting Descriptio n © 2014 Advanced Systems srl YY Year QQ Quarter MM Month SQL Functions 71 DD Day WK Week HH Hour MI Minute SS Second MS Millisecond Purpose Returns the specified part of a given date. You can use the DATEPART function to evaluate a date and return a specific interval of time. For example, you might use DATEPART to calculate the day of the month or the current hour. Example SELECT DATEPART(‘DD’,’19/06/2009’) as Part FROM DUAL; PART ---------19 SELECT DATEPART(‘YY’,’19/06/2009’) as Part FROM DUAL; PART ---------2009 SELECT DATEPART(‘MS’,’19/06/2009-12:12:32:998’) as Part FROM DUAL; PART ---------998 SELECT DATEPART(‘Mi’,’12:12:32:998’) as Part FROM DUAL; PART © 2014 Advanced Systems srl SQL Functions 72 ---------12 4.27 DATE_TO_JULIAN Syntax DATE_TO_JULIAN ( date ) Purpose Julian day refers to a continuous count of days since the beginning of the Julian Period used primarily by astronomers. The Julian Day Number (JDN) is the integer assigned to a whole solar day in the Julian day count starting from noon Greenwich Mean Time, with Julian day number 0 assigned to the day starting at noon on January 1, 4713 BC proleptic Julian calendar. (November 24, 4714 BC in the proleptic Gregorian calendar.). For example, the Julian day number for 1 January 2000 was 2,451,545 The DATE_TO_JULIAN function a data type converts a JDN integer. Examples select date_to_julian('01/01/2000') as JulDate from dual; DateJul ---------2451545 4.28 DAYNAME Syntax date can be of datatype DATE, TIMESTAMP. © 2014 Advanced Systems srl SQL Functions 73 Purpose Returns the name (string) of the day of a given date, using language of Sadas Server installation. Example SELECT DAYNAME('01/10/1998-00:01:12:233') as Name FROM DUAL; NAME ---------Thursday SELECT DAYNAME('01/11/2008') as Name FROM DUAL; NAME ---------Saturday 4.29 DAYOFWEEK Syntax date can be of datatype DATE, TIMESTAMP. Purpose Returns the ordinal of the day in the week of a given date. Day Ordin al © 2014 Advanced Systems srl Monday 1 Tuesday 2 Wednesday 3 Thursday 4 Friday 5 Saturday 6 SQL Functions 74 Sunday 7 Example SELECT DAYOFWEEK('01/10/1998-00:01:12:233') as Prog_Day FROM DUAL; PROG_DAY ---------4 SELECT DAYOFWEEK('01/11/2008') as Prog_Day FROM DUAL; PROG_DAY ---------6 4.30 DAYOFYEAR Syntax date can be of datatype DATE, TIMESTAMP. Purpose Returns the ordinal of the day in the year of a given date. Day Ordina l 01/01/ 1 YYYY Example © 2014 Advanced Systems srl … … 31/12/ YYYY 365 [366] SQL Functions 75 SELECT DAYOFYEAR('01/10/1998-00:01:12:233') as Prog_Day FROM DUAL; PROG_DAY ---------274 SELECT DAYOFYEAR('01/11/2008') as Prog_Day FROM DUAL; PROG_DAY ---------306 4.31 DECODE Syntax Purpose DECODE compares expr to each search value one by one. If expr is equal to a search, then Sadas returns the corresponding result. If no match is found, then Sadas returns default. If default is omitted, then Sadas returns null value. The arguments can be any of the numeric types or character types. If expr and search are character data, then Sadas compares them using nonpadded comparison semantics. expr, search, and result can be any of the datatypes CHAR, CHARACTER, VARCHAR. The string returned is of string datatype. If the first search-result pair are numeric, then Sadas compares all search-result expressions and the first expr to determine the argument with the highest numeric precedence, implicitly converts the remaining arguments to that numeric (integer or double) datatype, and returns that datatype. The search, result, and default values can be derived from expressions. Sadas uses shortcircuit evaluation. The database evaluates each search value only before comparing it to expr, © 2014 Advanced Systems srl SQL Functions 76 rather than evaluating all search values before comparing any of them with expr. Consequently, Sadas never evaluates a search if a previous search is equal to expr. Sadas automatically converts expr and each search value to the datatype of the first search value before comparing. Sadas automatically converts the return value to the same datatype as the first result. You can also specify only expr and default parameters; in this case the default parameter must be a constant. Examples This example decodes the value warehouse_id. If warehouse_id is 1, then the function returns 'Southlake'; if warehouse_id is 2, then it returns 'San Francisco'; and so forth. If warehouse_id is not 1, 2, 3, or 4, then the function returns 'Non domestic'. SELECT product_id, DECODE (warehouse_id, 1, 2, 3, 4, 'Southlake', 'San Francisco', 'New Jersey', 'Seattle', 'Non domestic') as "Location" FROM inventories WHERE product_id < 1775 ORDER BY product_id, "Location"; 4.32 DIGITS Syntax DIGITS ( col ) Purpose The DIGITS function returns a character string representation of the absolute value of a number. The argument must be a column of one of the following built-in numeric data types: SMALLINT, INTEGER, or DECIMAL. The result of the function is a fixed-length character string representing the absolute value of the argument without regard to its scale. The result does not include a sign or a decimal point. Instead, it consists exclusively of digits, including, if necessary, leading zeros to fill out the string. The length of the string is equal to the column length declared in the schema. © 2014 Advanced Systems srl SQL Functions 77 Examples Assume that COLUMNX has the data type DECIMAL(6,2), and that one of its values is -6.28. Then, for this value: SELECT DIGITS(COLUMNX) FROM T the value '000628' is returned. The result is a string of length six (the precision of the column) with leading zeros padding the string out to this length. Neither sign nor decimal point appear in the result. 4.33 EXP Syntax Purpose EXP returns e raised to the nth power, where e = 2.71828183 ... The function returns a value of the same type as the argument. This function takes as an argument any numeric datatype. Examples The following example returns e to the 4th power: SELECT EXP(4) "e to the 4th power" FROM DUAL; E TO THE 4TH POWER -----------------54.5981500331442 © 2014 Advanced Systems srl SQL Functions 4.34 78 EXTFUNC External Functions To enable external functions, you need to create a file named ExternalFunctions.sad in the SADAS security folder (PATHS variable in the setting.txt configuration file) ExternalFunctions.sad is a linesequential file and uses the ‘;’ character as a separator. The semantics of the attributes is: Identifier of Function It is the identifier of the function. In the call to EXTFUNC the function identifier must be defined as a constant alphanumeric and as the first parameter. It is not case sensitive. DLL It’s the full name of the DLL including the absolute or relative path to the current execution path of the Sadas server. It is case sensitive on non-Windows systems (Linux, Unix, etc.). Function It’s the name of the function exported from the DLL. It’s case sensitive on non-Windows systems (Linux, Unix, etc.). It’s a required value. The function’s prototype implemented in the DLL must have this syntax: int64_t Funzione(void* out,void** inParam); out points to the value returned by the function. The output area is allocated outside the function. The ‘inParam’ parameters are the possible pointers to the input values. The maximum number of input parameters is 5. If the return value is less than zero the function is in error. Before the return stage starts, the function must deallocate all allocated variables on the heap to avoid memory leaks. Initialization Name of the function exported by the DLL to initialize the DLL itself. It's case sensitive on © 2014 Advanced Systems srl SQL Functions 79 non-Windows systems (Linux, Unix,etc.). It’s called only once in connection with the LoadLibrary. Definition is not compulsory. The function’s prototype implemented in the DLL must have this syntax: void Inizializza(void* Istanza); The pointer to ‘Istanza’ must be casted to char* and contain the name of the SADAS’ instance. Closing Name of the function exported by the DLL to initialize the DLL itself. It's case sensitive on non-Windows systems (Linux, Unix, etc.). It is called only once when the SADAS server shutdown event occurs. Definition is not required. The prototype implemented in the DLL must have this syntax: void Chiudi(void* Istanza); The pointer to ‘Istanza’ must be casted to char * and contain the name of the SADAS’ instance. Output type Required. Indicates the type of output returned. Can take the following values: C string I signed integer on 64 bit F float (double precision) Output lenght Required. Indicates the length of the output returned. It is meaningless for integer or float (set at 8 at runtime) data types while for string (C) data types, if greater than 0, it indicates the length of the string without the null terminator: if lower than 0, the absolute value of the parameter indicates the progressive input from which to copy the length at runtime. If the value is 0, the length is calculated as the sum of the lengths of all input parameters of type C. © 2014 Advanced Systems srl SQL Functions 80 Number of Input parameters Required. Indicates the number of input parameters. It ranges between 0 and 8. The next two attributes are repeated for all the input parameters. Parameters will be passed to the function call in the same order: this order needs to be respected when writing in SQL (excluding in this case the implicit parameters). Input type Required. Indicates the type of input to be passed to the function. Can take the following values: C string I signed integer on 64 bit F float (double precision) U string with the name of the current user D string with the name of the current DB S string with the name of the current instance The values U, D and S do not correspond to the SQL syntax for the function call. They are passed to the DLL implicitly using the values of the current session's connection. The implicit values are always passed as strings. 4.35 FIRST_DAY Syntax date can be DATE or TIMESTAMP. Purpose FIRST_DAY returns the date of the first day of the month that contains date. The return type is DATE [TIMESTAMP]. Examples SELECT SYSDATE, FIST_DAY(SYSDATE) as "First" © 2014 Advanced Systems srl SQL Functions 81 FROM DUAL; SYSDATE First ---------- ---------20/06/2008 01/06/2008 4.36 FIRST_WORK_DAY Syntax date can be DATE or TIMESTAMP. Purpose FIRST_WORK_DAY returns the date of the first day of the month that contains date, after first saturday and sunday of month. The return type is DATE [TIMESTAMP]. Examples SELECT '12/12/2012' as DTA, FIRST_WORK_DAY(DTA) as "FirstWorking" FROM DUAL; DTA FirstWorking ---------- ---------12/12/2012 03/12/2012 4.37 FLOOR Syntax Purpose FLOOR returns the largest integer equal to or less than n. This function takes as an argument any numeric datatype. The function returns the same datatype as the numeric datatype of the argument. © 2014 Advanced Systems srl SQL Functions 82 Examples The following example returns the largest integer equal to or less than 15.7: SELECT FLOOR(15.7) as "Floor" FROM DUAL; Floor ---------15 4.38 GREATEST Syntax Purpose GREATEST returns the greatest of the list of one or more expressions. Sadas uses the first expr to determine the type of return field . If all expr are numeric, then Sadas determines the argument with the highest numeric precedence, implicitly converts the remaining arguments to that numeric datatype (integer or double) before the comparison, and returns that datatype. If there is any not numeric expr , than all others expr must be of the same type. In this case Sadas compares each expr using nonpadded comparison semantics. Examples The following statement selects the string with the greatest value: SELECT GREATEST ('HARRY', 'HARRIOT', 'HAROLD') As "Great" FROM DUAL; Great -------HARRY SELECT GREATEST(1.8,2) FROM DUAL; © 2014 Advanced Systems srl SQL Functions 83 Greatest -------2 4.39 GROUPING Syntax Purpose GROUPI NG distinguishes superaggregate rows from regular grouped rows. GROUP BY extensions such as ROLLUP and CUBE produce superaggregate rows where the set of all values is represented by null. Using the GROUPING function, you can distinguish a null representing the set of all values in a superaggregate row from a null in a regular row. The expr in the GROUPI NG function must match one of the expressions in the GROUP BY clause. The function returns a value of 1 if the value of expr in the row is a null representing the set of all values. Otherwise, it returns zero. The datatype of the value returned by the GROUPI NG function is I NTEGER. . Examples Cube SELECT O_ORDERSTATUS, COUNT(*), SUM(O_TOTALPRICE), MAX(O_SHIPPRIORITY), CASE GROUPING(O_ORDERSTATUS) WHEN 0 THEN 'YES' ELSE 'NO' END as FLAG FROM ORDERS WHERE O_ORDERDATE < '01/02/1992' GROUP BY CUBE(O_ORDERSTATUS) © 2014 Advanced Systems srl SQL Functions 84 Rollup SELECT O_ORDERSTATUS, COUNT(*), SUM(O_TOTALPRICE), MAX(O_SHIPPRIORITY), CASE GROUPING(O_ORDERSTATUS) WHEN 0 THEN 'YES' ELSE 'NO' END as FLAG FROM ORDERS WHERE O_ORDERDATE < '01/02/1992' GROUP BY ROLLUP(O_ORDERSTATUS) 4.40 HEXTONUM Syntax HEXTONUM ( char ) Purpose HEXTONUM converts char containing hexadecimal digits in the corresponding integer (64-bit) value. Examples SELECT HEXTONUM('61626364') as HTONUM FROM DUAL; HTONUM ---------1633837924 4.41 HEXTOSTR Syntax Purpose HEXTOSTR converts char containing hexadecimal digits in the CHAR, CHARACTER, VARCHAR value. © 2014 Advanced Systems srl SQL Functions 85 Examples SELECT HEXTOSTR('61626364') as HTOSTR FROM DUAL; HTOSTR -----abcd 4.42 INITCAP Syntax Purpose INITCAP returns string, with the first letter of each word in uppercase, all other letters in lowercase. Words are delimited by white space or characters that are not alphanumeric. char can be of any of the datatypes CHAR, CHARACTER, VARCHAR. The return value is the same datatype as char. Examples The following example capitalizes each word in the string: SELECT INITCAP('the soap') "Capitals" FROM DUAL; Capitals --------The Soap SELECT INITCAP('the@soap') "Capitals" FROM DUAL; Capitals --------The@Soap © 2014 Advanced Systems srl SQL Functions 4.43 86 INSTR Syntax Purpose The INSTR functions search string for substring. The function returns an integer indicating the position of the character in string that is the first character of first occurrence. Both string and substring can be any of the datatypes CHAR, CHARACTER, VARCHAR. The value returned is of NUMBER datatype (integer). Examples SELECT INSTR('CORPORATE FLOOR','OR') as "Instring" FROM DUAL; Instring ---------2 4.44 JULIAN_TO_DATE Syntax JULIAN_TO_DATE ( n ) Purpose Julian day refers to a continuous count of days since the beginning of the Julian Period used primarily by astronomers. The Julian Day Number (JDN) is the integer assigned to a whole solar day in the Julian day count starting from noon Greenwich Mean Time, with Julian day number 0 assigned to the day starting at noon on January 1, 4713 BC proleptic Julian calendar. (November 24, 4714 BC in the proleptic Gregorian calendar.). For example, the Julian day number for 1 January 2000 was 2,451,545 . © 2014 Advanced Systems srl SQL Functions 87 The JULIAN_TO_DATE function converts an integer (as JDN) in a data type. Examples select julian_to_date(2451545) as DateJul from dual; DateJul ---------01/01/2000 4.45 ISNUMERIC Syntax expr ( ISNUMERIC CC expr ) can be all character datatypes. Purpose IS_NUMERIC try to convert expr to a value of NUMBER datatype. The expr can be a value of CHAR, CHARACTER, VARCHAR datatype containing a number. The result type is an integer and assumes 1 if expr is numeric, else 0. Example SEL ECT I SNUMERI C( ' - 1 0 0 ' ) a s " I SNUM" FROM DUAL ; I SNUM ------1 4.46 LAST_DAY Syntax date can be DATE or TIMESTAMP. Purpose LAST_DAY returns the date of the last day of the month that contains date. The return type is DATE [TIMESTAMP]. © 2014 Advanced Systems srl SQL Functions 88 Examples SELECT SYSDATE, LAST_DAY(SYSDATE) as "Last" FROM DUAL; SYSDATE Last ---------- ---------20/06/2008 30/06/2008 4.47 LAST_WORK_DAY Syntax date can be DATE or TIMESTAMP. Purpose LAST_WORK_DAY returns the date of the last day of the month that contains date, before last saturday and sunday of month. The return type is DATE [TIMESTAMP]. Examples SELECT SYSDATE, LAST_WORK_DAY(SYSDATE) as "LastWorking" FROM DUAL; SYSDATE LastWorking ---------- ---------20/06/2008 30/06/2008 4.48 LCASE Refer to LOWER function. © 2014 Advanced Systems srl SQL Functions 4.49 89 LEAST Syntax Purpose LEAST returns the least of the list of one or more expressions. Sadas uses the first expr to determine the type of the return field . If all expr are numeric, then Sadas determines the argument with the highest numeric precedence, implicitly converts the remaining arguments to that numeric datatype (integer or double) before the comparison, and returns that datatype. If there is any not numeric expr , than all others expr must be of the same type. Sadas compares each expr using nonpadded comparison semantics. Examples The following statement selects the string with the least value: SELECT LEAST('HARRY','HARRIOT','HAROLD') "LEAST" FROM DUAL; LEAST -----HAROLD 4.50 LENGTH Syntax Purpose The LENGTH functions return the length of char. char can be any of the datatypes CHAR, CHARACTER, VARCHAR. The return value is of datatype © 2014 Advanced Systems srl SQL Functions 90 NUMBER (integer). Examples SELECT LENGTH('CANDIDE') as "LengthO" FROM DUAL; LengthO ------7 4.51 LN Syntax Purpose LN returns the natural logarithm of n, where n is greater than 0. This function takes as an argument any numeric datatype. The function returns always FLOAT datatype. Examples The following example returns the natural logarithm of 95: SELECT LN(95) "Natural log of 95" FROM DUAL; Natural log of 95 ----------------4.55387689160054 4.52 LOCALTIMESTAMP Refer to SYSTIMESTAMP function. © 2014 Advanced Systems srl SQL Functions 4.53 91 LOG Syntax Purpose LOG returns the logarithm, base n2, of n1. The base n1 can be any positive value other than 0 or 1 and n2 can be any positive value. This function takes as arguments any numeric datatype and returns always FLOAT. Examples The following example returns the log of 100: SELECT LOG( 10, 100) " Log bas e 10 of 100" FROM DUAL; Log bas e 10 of 100 -----------------2 4.54 LOWER Syntax Purpose LOWER returns char, with all letters lowercase. char can be any of the datatypes CHAR, CHARACTER, VARCHAR. The return value is the same datatype as char. Examples The following example returns a string in lowercase: SELECT LOWER('MR. SCOTT MCMILLAN') "Lowercase" FROM DUAL; Lowercase -------------------mr. scott mcmillan © 2014 Advanced Systems srl SQL Functions 4.55 92 LPAD Syntax expr1 n can be a char expression. must be a constant cardinal number. expr2 must be a single char. If a longer string is specified, SADAS will use only its first character to process the function. Purpose LPAD returns expr1, left-padded to length n (cardinal) characters with the character in expr2. This function is useful for formatting the output of a query. expr1 can be any of the datatypes CHAR, CHARACTER, VARCHAR. The argument n must be a NUMBER integer and cannot be an expression or field. If you do not specify expr2, then the default is a single blank. If expr1 is longer than n, then this function returns the portion of expr1 that fits in n. Examples The following example left-pads a string with the asterisk (*) characters: SELECT LPAD('Page 1',15,'*') "LPAD example" FROM DUAL; LPAD example --------------*********Page 1 © 2014 Advanced Systems srl SQL Functions 4.56 93 LTRIM Syntax Purpose LTRIM removes from the left end of char all of the characters contained in set. If you do not specify set, then it defaults to a single blank. Sadas Database begins scanning char from its first character and removes all characters that appear in set until reaching a character not in set and then returns the result. Both char and set can be any of the string datatypes. Examples SELECT Ltrim(' X10') "LTRIM example" FROM DUAL; LTRIM example ------------X10 SELECT product_name, LTRIM(product_name, 'Monitor ') "Short Name" FROM products WHERE product_name LIKE 'Monitor%'; PRODUCT_NAME -------------------Monitor 17/HR Monitor 17/HR/F Monitor 17/SD Monitor 19/SD Monitor 19/SD/M Monitor 21/D Monitor 21/HR Monitor 21/HR/M Monitor 21/SD Monitor Hinge - HD Monitor Hinge - STD © 2014 Advanced Systems srl Short Name --------------17/HR 17/HR/F 17/SD 19/SD 19/SD/M 21/D 21/HR 21/HR/M 21/SD Hinge - HD Hinge - STD SQL Functions 4.57 94 MAX Syntax Purpose MAX returns maximum value of expr. You can only use it as an aggregate. Aggregate Example The following example determines the highest salary in the hr.employees table: SELECT MAX(salary) as "Maximum" FROM employees; Maximum ---------24000 4.58 MIN Syntax Purpose MIN returns minimum value of expr. You can only use it as an aggregate. Aggregate Example The following statement returns the earliest hire date in the hr.employees table: SELECT MIN(hire_date) as "Earliest" FROM employees; Earliest ---------17/06/2004 © 2014 Advanced Systems srl SQL Functions 4.59 95 MOD Syntax Purpose MOD returns the remainder of n2 divided by n1. Returns n2 if n1 is 0. This function takes as arguments any numeric datatype. Sadas determines the argument with the highest numeric precedence, implicitly converts the remaining arguments to that datatype, and returns that datatype. The following example returns the remainder of 11 divided by 4: SELECT MOD(11,4) as "Modulus" FROM DUAL; Modulus ---------3 This function behaves differently from the classical mathematical modulus function when m is negative. The classical modulus can be expressed using the MOD function with this formula: m - n * FLOOR(m/n) The following table illustrates the difference between the MOD function and the classical modulus: © 2014 Advanced Systems srl MOD(m, Classical m n n) Modulus 11 4 3 3 11 -4 3 -1 -11 4 -3 1 -11 -4 -3 -3 SQL Functions 4.60 96 MONTHNAME Syntax date can be DATE or TIMESTAMP. Purpose MONTHNAME returns the name of the month (in the date language of your session) of the date. The return type is string. Examples select MONTHNAME('12/02/2008') as MName from lineitem MName ---------February 4.61 MONTHS_BETWEEN Syntax date1, date2 can be DATE or TIMESTAMP. Purpose MONTHS_BETWEEN returns number of months between dates date1 and date2. If date1 is later than date2, then the result is positive. If date1 is earlier than date2, then the result is negative. The result is always an integer. Examples The following example calculates the months between two dates: select MONTHS_BETWEEN('12/02/2008','01/08/2009') as Months from dual Months ------18 © 2014 Advanced Systems srl SQL Functions 4.62 97 NEXT_DAY Syntax Purpose NEXT_DAY returns the date of the first weekday named by char that is later than the date date. The return type is always DATE, regardless of the datatype of date. The argument char must be a day of the week in the date language of your session, either the full name or the abbreviation. The minimum number of letters required is the number of letters in the abbreviated version. If date is TIMESTAMP type, the return value has the same hours, minutes, and seconds component as the argument date. Examples This example returns the date of the next Tuesday after February 2, 2001: SELECT NEXT_DAY('02/01/2001','TUESDAY') as "NEXT DAY" FROM DUAL; NEXT DAY ---------06/02/2001 4.63 NEXT_WORK_DAY Syntax date can be DATE or TIMESTAMP. Purpose NEXT_WORK_DAY returns the date of the next working day of the month that contains date, skipping saturday and sunday of month. The return type is DATE [TIMESTAMP]. © 2014 Advanced Systems srl SQL Functions 98 Examples SELECT '12/12/2012' as DTA, FIRST_WORK_DAY(DTA) as "FirstWorking" FROM DUAL; DTA FirstWorking ---------- ---------12/12/2012 03/12/2012 4.64 NOW Refer to SYSTIMESTAMP function. 4.65 NUMTOHEX Syntax NUMTOHEX ( int ) Purpose NUMTOHEX converts integer value in hexadecimal digits. Examples SELECT NUMTOHEX(1633837924) as NTOHEX FROM DUAL NTOHEX -------61626364 4.66 PI Syntax Purpose PI returns the value of greek pi constant. © 2014 Advanced Systems srl SQL Functions 99 Example SELECT PI as PIGREEK FROM DUAL; PIGREEK ---------------3.14159265358979 4.67 POSITION Refer to INSTR function. 4.68 POWER Syntax Purpose POWER returns n2 raised to the n1 power. The base n2 and the exponent n1 can be any numbers, but if n2 is negative, then n1 must be an integer. This function takes as arguments any numeric datatype. The function always returns DOUBLE. Examples The following example returns 3 squared: SELECT POWER(3,2) as "Raised" FROM DUAL; Raised ---------9 SELECT POWER(9,0.5) as "Raised" FROM DUAL; Raised ---------3 SELECT POWER(10,-1) as "Raised" FROM DUAL; Raised ---------0.1 © 2014 Advanced Systems srl SQL Functions 4.69 100 PREVIOUS_DAY Syntax date can be DATE or TIMESTAMP. Purpose PREVIOUS_DAY returns the date of the previous weekday named by char that is earlier than the date date. The return type is always DATE, regardless of the datatype of date. The argument char must be a day of the week in the date language of your session, either the full name or the abbreviation. The minimum number of letters required is the number of letters in the abbreviated version. If date is TIMESTAMP type, the return value has the same hours, minutes, and seconds component as the argument date. Examples This example returns the date of the previous Tuesday after February 2, 2001: SELECT PREVIOUS_DAY('02/01/2001','TUESDAY') as "PREV DAY" FROM DUAL; PREV DAY ---------26/12/2000 4.70 PREVIOUS_WORK_DAY Syntax date can be DATE or TIMESTAMP. Purpose PREVIOUS_WORK_DAY date, returns the date of the previous working day of the month that contains skipping saturday and sunday of month. The return type is DATE [TIMESTAMP]. © 2014 Advanced Systems srl SQL Functions 101 Examples SELECT '03/12/2012' as DTA, PREVIOUS_WORK_DAY(DTA) as "PreviousWorking" FROM DUAL; DTA PreviousWorking ---------- --------------03/12/2012 30/11/2012 4.71 RATIO_TO_REPORT Syntax Purpose RATIO_TO_REPORT is an analytic function. It computes the ratio of a value of column to the total sum over all table. The input parameter (expr) must be a column. Examples SELECT QUANTITY, RATIO_TO_REPORT(QUANTITY) AS RTP FROM PURCHASE WHERE QUANTITY > 1100 QUANTI TY RTP -------- ------10100 0. 1387 2100 0. 0288 ... 4.72 REGEXP_INSTR Refer to INSTR function. 4.73 REGEXP_REPLACE Refer to REPLACE function. 4.74 REGEXP_SUBSTR Refer to SUBSTR[ING] function. © 2014 Advanced Systems srl SQL Functions 4.75 102 REMAINDER Refer to MOD function. 4.76 REPLACE Syntax Purpose REPLACE returns char with every occurrence of search_string replaced with replacement_string. Sadas REPLACE needs all parameters: if replacement_string is null string (“''”), Sadas delete search_string from string value; if search_string is null string (“''”), Sadas returns input string value. Both search_string and replacement_string, as well as char, can be any of the datatypes CHAR, CHARACTER or VARCHAR. Examples The following example replaces occurrences of J with BL: SELECT REPLACE('JACK and JUE','J','BL') "Changes" FROM DUAL; Changes -------------BLACK and BLUE 4.77 ROUND Syntax , ROUND Purpose © 2014 Advanced Systems srl ( n scale e ) SQL Functions ROUND 103 returns n rounded to scale places to the right of the decimal point. If you don't specify scale parameter, Sadas assumes 0 for scale parameter. n can be any numeric datatype. The function returns NUMBER. Examples SELECT ROUND(15.193) "Round" FROM DUAL; Round ---------15 SELECT ROUND(15.193,2) "Round" FROM DUAL; Round ---------15.19 SELECT ROUND(1.5), ROUND(2.5) FROM DUAL; ROUND(1.5) ROUND(2.5) ---------- ---------2 3 SELECT ROUND(19.9) "Round" FROM DUAL; Round ---------20 4.78 RPAD Syntax expr1 n can be a char expression. must be a constant cardinal number. expr2 must be a single char. If a longer string is specified, SADAS will use only its first character to process the function. © 2014 Advanced Systems srl SQL Functions 104 Purpose RPAD returns expr1, right-padded to length n (cardinal) characters with the character in expr2. This function is useful for formatting the output of a query. expr1 can be any of the datatypes CHAR, CHARACTER, VARCHAR. The argument n must be a NUMBER integer and cannot be an expression or field. If you do not specify expr2, then the default is a single blank. If expr1 is longer than n, then this function returns the portion of expr1 that fits in n. Examples The following example right-pads a string with the asterisk (*) characters: SELECT RPAD('Page 1',15,'*') "RPAD example" FROM DUAL; RPAD example --------------Page 1********* 4.79 RTRIM Syntax Purpose RTRIM removes from the right end of char all of the characters that appear in set. This function is useful for formatting the output of a query. If you do not specify set, then it defaults to a single blank. RTRIM works similarly to LTRIM. Both char and set can be any of the string datatypes. Examples SELECT RTRIM('X10 ') "RTRIM example" FROM DUAL; RTRIM example © 2014 Advanced Systems srl SQL Functions 105 ------------X10 SELECT RTRIM('BROWNING: /=./=./=./=./=.','/=.') "RTRIM example" FROM DUAL RTRIM exam ---------BROWNING: 4.80 SDS_HASH Syntax Purpose SDS_HASH is a function that computes a hash value for a given expression. This function is useful for operations such as analyzing a subset of data and generating a random sample. The expr argument determines the data for which you want Sadas Database to compute a hash value. There are no restrictions on the length of data represented by expr, which commonly resolves to a column name. The expr must be a string datatype. The optional max_bucket argument determines the maximum bucket value returned by the hash function. You can specify any value between 0 and 264. The default is 264. The optional seed_value argument enables Sadas to produce many different results for the same set of data. Sadas applies the hash function to the combination of expr and seed_value. You can specify any value between 0 and 264. The default is 31. The function returns a INT64 value. Examples © 2014 Advanced Systems srl SQL Functions 106 SELECT SDS_HASH('SADAS') AS SADASHASH FROM DUAL SADASHASH --------78656104 SELECT SDS_HASH(TO_CHAR(20090101)) AS SADASHASH FROM DUAL SADASHASH ----------2319993427 4.81 SDS_HASH_SH1 Syntax SDS_HASH_SH1 ( expr ) Purpose SDS_HASH_SH1 is a function that computes a hash value for a given expression based on the cryptographic hash function SHA-1. In cryptography, SHA-1 is a cryptographic hash function designed by the National Security Agency and published by the NIST as a U.S. Federal Information Processing Standard. SHA stands for Secure Hash Algorithm. SHA-1 is the most widely used of the existing SHA hash functions, and is employed in several widely-used security applications and protocols. SHA-1 produces a 160-bit message digest based on principles similar to those used by Ronald L. Rivest of MIT in the design of the MD4 and MD5 message digest algorithms, but has a more conservative design. The original specification of the algorithm was published in 1993 as the Secure Hash Standard, FIPS PUB 180, by US government standards agency NIST (National Institute of Standards and Technology). This version is now often referred to as SHA-0. It was withdrawn by NSA shortly after publication and was superseded by the revised version, published in 1995 in FIPS PUB 180-1 and commonly referred to as SHA-1. SHA-1 differs from SHA-0 only by a single bitwise rotation in the message schedule of its compression function; this was done, according to NSA, to correct a flaw in the original algorithm which reduced its cryptographic security. However, NSA did not provide any further explanation or identify the flaw that was corrected. © 2014 Advanced Systems srl SQL Functions 107 Weaknesses have subsequently been reported in both SHA and SHA-1. SHA-1 appears to provide greater resistance to attacks, supporting the NSA’s assertion that the change increased the security. The expr argument determines the data for which you want Sadas Database to compute a SHA-1 hash value. There are no restrictions on the length of data represented by expr, which commonly resolves to a column name. The expr must be a string datatype. The function returns a string in HEXADECIMAL format. Example SELECT SDS_HASH_SH1('SADAS') AS SADASHASH FROM DUAL SADASHASH ---------------------------------------AE985C1820D588ECEE9BA150351EE8911BF58C67 4.82 SIGN Syntax Purpose SIGN returns the sign of n. This function takes as an argument any numeric datatype and returns NUMBER. For value of NUMBER type, the sign is: -1 if n<0 0 if n=0 1 if n>0 Examples The following example indicates that the argument of the function (-15) is <0: SELECT SIGN(-15) "LSign" FROM DUAL; LSign ---------© 2014 Advanced Systems srl SQL Functions 108 -1 4.83 SIN Syntax Purpose SIN returns the sine of n (an angle expressed in radians). The function returns FLOAT datatype. Examples The following example returns the sine of 30 degrees: SELECT SIN(30 * 3.14159265359/180) "Sine of 30 degrees" FROM DUAL; Sine of 30 degrees -----------------0.5 4.84 SINH Syntax Purpose SINH returns the hyperbolic sine of n. The function returns FLOAT datatype. Examples The following example returns the hyperbolic sine of 1: SELECT SINH(1) "Hyperbolic sine of 1" FROM DUAL; Hyperbolic sine of 1 -------------------- © 2014 Advanced Systems srl SQL Functions 109 1.1752011936438 4.85 SHUFFLE Syntax Purpose A technique similar to substitution except that the substitution data is derived from the column itself. Shuffle rules are designed to randomly re-distribute the data in a table column that means the data in a column is randomly moved between rows until there is no longer any reasonable correlation with the remaining information in the row. Each Shuffle Rule affects only a specified column in a specified table. One of the interesting benefits of shuffle rules is that if applied against a column of number data they can scramble the contents of a table column while still preserving the total sum of the column. Since no new data has been added, (the numbers have just been moved around), the total of all of the numbers will remain the same. This technique can be used to mask data in the tables. Examples update employees set last_name = SHUFFLE(last_name); 4.86 SOUNDEX Syntax Purpose SOUNDEX returns a character string containing the phonetic representation of char. This function lets you compare words that are spelled differently, but sound alike in English. © 2014 Advanced Systems srl SQL Functions 110 The phonetic representation is defined in The Art of Computer Programming, Volume 3: Sorting and Searching, by Donald E. Knuth, as follows: Retain the first letter of the string and remove all other occurrences of the following letters: a, e, h, i, o, u, w, y. Assign numbers to the remaining letters (after the first) as follows: b, f, p, v = 1 c, g, j, k, q, s, x, z = 2 d, t = 3 l = 4 m, n = 5 r = 6 If two or more letters with the same number were adjacent in the original name (before step 1), or adjacent except for any intervening h and w, then omit all but the first. Return the first four bytes padded with 0. char can be of any of the datatypes CHAR, CHARACTER or VARCHAR. The return value is the same datatype as char. Examples The following example returns the employees whose last names are a phonetic representation of "Smyth": SELECT last_name, first_name FROM hr.employees WHERE SOUNDEX(last_name) = SOUNDEX('SMYTHE') ORDER BY last_name, first_name; LAST_NAME ---------Smith Smith 4.87 FIRST_NAME ---------Lindsey William SQRT Syntax © 2014 Advanced Systems srl SQL Functions 111 Purpose SQRT returns the square root of n. This function takes as an argument any numeric datatype. The function always returns a real number. If n is negative, Sadas returns error. Example The following example returns the square root of 26: SELECT SQRT(26) "Square root" FROM DUAL; Square root ----------5.09901951 4.88 STDDEV Syntax Purpose STDDEV returns the sample standard deviation of expr, a set of numbers. You can only use it as an aggregate. Sadas calculates the standard deviation as the square root of the variance defined for the VARIANCE aggregate function. This function takes as an argument any numeric datatype. The function always returns a real number. Aggregate Examples The following example returns the standard deviation of the salaries in the sample hr.employees table: SELECT STDDEV(salary) "Deviation" FROM employees; Deviation ---------3909.36575 © 2014 Advanced Systems srl SQL Functions 4.89 112 STRTOHEX Syntax Purpose STRTOHEX converts char containing CHAR, CHARACTER, VARCHAR value in hexadecimal digits. Examples SELECT STRTOHEX('abc') as STRTOH FROM DUAL; STRTOH -----616263 4.90 SUBSTITUTE_WITH Syntax Purpose This technique consists of randomly replacing the contents of a column of data with information that looks similar but is completely unrelated to the real details. For example, the surnames in a customer database could be sanitized by replacing the real last names with surnames drawn from a largish random list. A parallel table is created in Sadas schema and configured with the values which will replaced the original one after the data masking procedure. © 2014 Advanced Systems srl SQL Functions 113 Through an algorithm configured on masking engine, the value in this field will be replaced with the parallel table values. This technique can be used to mask data in the tables. Examples update employees set last_name = SUBSTITUTE_WITH('T_NAME'); 4.91 SUBSTR[ING] Syntax Purpose The SUBSTR (or SUBSTRING) functions return a portion of char, beginning at character position, substring_length characters long. Position and substring_length must be cardinal (integer not negative) numbers. If position is 0, then it is treated as 0 null character of string. If position is positive, then Sadas counts from the beginning of char to find the first character. char can be any of the datatypes CHAR, CHARACTER or VARCHAR. Both position and substring_length must be cardinal (integer not negative) numbers. The return value is the same datatype as char. Floating-point are not accepted. Examples The following example returns several specified substrings of "ABCDEFG": SELECT SUBSTR('ABCDEFG',3,4) "Substring" FROM DUAL; Substring --------CDEF © 2014 Advanced Systems srl SQL Functions 4.92 114 SUM Syntax Purpose SUM returns the sample sum of expr, a set of numbers. You can only use it as an aggregate. This function takes as an argument any numeric datatype. The function returns the same datatype as the numeric datatype of the argument. Aggregate Example The following example calculates the sum of all salaries in the sample hr.employees table: SELECT SUM(salary) "Total" FROM employees; Total ---------691400 4.93 SYSDATE Syntax Purpose SYSDATE returns the current date of system. Example SELECT SYSDATE FROM DUAL; SYSDATE ---------19/06/2008 © 2014 Advanced Systems srl SQL Functions 4.94 115 SYSTIME Syntax Purpose SYSTIME returns the current time of system. Example SELECT SYSTIME FROM DUAL; SYSTIME -----------12:28:38:375 4.95 SYSTIMESTAMP Syntax Purpose SYSTIMESTAMP returns the current timestamp of system. Example SELECT SYSTIMESTAMP FROM DUAL; SYSTIMESTAMP ----------------------19/06/2008-12:28:38:375 4.96 TAN Syntax © 2014 Advanced Systems srl SQL Functions 116 Purpose TAN returns the tangent of n (an angle expressed in radians). The function returns FLOAT datatype. Examples The following example returns the tangent of 135 degrees: SELECT TAN(135 * PI/180) "Tangent of 135 degrees" FROM DUAL; Tangent of 135 degrees ---------------------- 1 4.97 TANH Syntax Purpose TANH returns the hyperbolic tangent of n. The function returns FLOAT datatype. Examples The following example returns the hyperbolic tangent of 0.5: SELECT TANH(0.5) "Hyperbolic tangent of .5" FROM DUAL; Hyperbolic tangent of .5 -----------------------.46211715726001 4.98 TO_BASE Syntax © 2014 Advanced Systems srl SQL Functions code 117 can be only a code field. Purpose In select clause Sadas usually returns the decoded description of a code field. TO_BASE returns the base of a code field. The base of a code field is the input field value. It is always a string, then the function returns a string. Example SELECT SESSO, TO_BASE(SESSO) FROM ANAGRAFICA SESSO ----------------PERSONA GIURIDICA PERSONA FISICA 4.99 TO_BASE(“Sesso”) ---------------G F TO_CHAR (character) Syntax Purpose TO_CHAR (character) converts CHAR, CHARACTER or VARCHAR data to the 7-bit ASCII set. The value returned is always VARCHAR. In this case, Sadas eliminates the function and copies input value in output. Examples The following example interprets a simple string as character data: SELECT TO_CHAR('01110') FROM DUAL; TO_CH ----01110 4.100 TO_CHAR (datetime) Syntax © 2014 Advanced Systems srl SQL Functions 118 datetime can be DATE, TIME or TIMESTAMP. Purpose TO_CHAR (datetime) converts a datetime value of DATE, TIME or TIMESTAMP datatype to a value of VARCHAR datatype in the format specified by the date format fmt. If you omit fmt, then date is converted to a VARCHAR value as follows: DATE values are converted to values in the default date format (DD/MM/YYYY). TIME values are converted to values in the default time format (HH:MM:SS:MS). TIMESTAMP values are converted to values in the default timestamp format (DD/MM/ YYYY-HH:MM:SS:MS). The 'nlsparam' argument specifies the language in which month and day names and abbreviations are returned. This argument can have this form: 'NLS_DATE_LANGUAGE = language' If you omit 'nlsparam', then this function uses the default date language for your session. Following tables show the supported fmt and NLS parameters Ta ble – Da t e t ime support e d fmt pa ra me t e r Fmt Description / , . ; : "text" Copies character AD A.D. Indicator "Anno Domini" AM A.M. Indicator "Ante Meridiem" or text done © 2014 Advanced Systems srl Notes SQL Functions 119 BC B.C. Indicator "Befor Christ" CC SCC Century D Day of week (17) DAY Day of (name) DD Day of month (131) DDD Day of year (1365/366) DL Long date format Used only after 'TS' + blank parameter DS Short date format Used only after 'TS' + blank parameter DY Short name of day week Filled with blank (see FM and FX) FF[1..9] Tenth of a second FM Eliminates in the output value unused blanks and '0' not significants FX Not eliminate in the output value unused blanks and '0' not significants HH Hour (1-12) HH12 Hour (1-12) HH24 Hour (0-23) J Julian Day MI Minutes (0-59) MM Month (1-12) MON Month name) (short MONT Month (full name) © 2014 Advanced Systems srl SQL Functions 120 H PM P.M. Indicator "Post Meridiem" Q Quarter RM Month format) RR RRRR Year SS Seconds (0-59) SSSSS Seconds midnight 86399). after (0- TS Standard format date See DL and DS WW Week of year (153) W Week of month (1-4[5]) Y,YYY Year (',' in specified position) (roman YEAR Year; for BC SYEAR generates initial '-' YYYY Year; for BC SYYYY generates initial '-' YYY YY Y Last 3, 2 o 1 digits of year Ta ble – Da t e t ime support e d NLS pa ra me t e r Parametro NLS Sup Effect Notes port ed NLS_CALENDAR YE Calendar type S NLS_CHARACTERSET NO NLS_COMP NO © 2014 Advanced Systems srl GREGORIAN Comparison type for order by clause and where clause SQL Functions 121 NLS_CURRENCY YE Currency S NLS_DATE_FORMAT YE Date format S NLS_DATE_LANGUAGE YE Date format S NLS_DUAL_CURRENCY YE Currency 2 S NLS_ISO_CURRENCY YE Currency S Territory currency NLS_LANGUAGE YE Language S ENGLISH, ITALIAN, ROMANIAN NLS_LENGTH_SEMANTICS NO Set string datatypes length NLS_NCHAR_CHARACTER_SET NO NLS_NCHAR_CONV_EXCP NO NLS_NUMERIC_CHARACTERS YE Numeric format S NLS_RDBMS_VERSION NO Version NLS_SORT NO Sort NLS_TERRITORY YE Territory S EUROPE, ITALY, ROMANIA NLS_TIMESTAMP_FORMAT NO TIMESTAMP default Signal error for type conversions format NLS_TIMESTAMP_TZ_FORMAT NO NLS_TIME_FORMAT YE Time format S NLS_TIME_TZ_FORMAT NO TIMESTAMP default format with TIMEZONE TIME default format with TIMEZONE NLS_TERRITORY parameter has following dependencies: NLS_DATE_FORMAT, NLS_TIME_FORMAT, NLS_NUMERIC_CHARACTERS, NLS_CURRENCY, NLS_DUAL_CURRENCY, NLS_ISO_CURRENCY, NLS_LANGUAGE, NLS_DATE_LANGUAGE Ta ble – Da t e t ime support e d NLS t e rrit ory NLS_TERRITORY © 2014 Advanced Systems srl EUROPE ITALY ROMANIA SQL Functions 122 NLS_DATE_FORMAT DD/MM/YYYY DD/MM/YYYY DD/MM/YYYY NLS_TIME_FORMAT HH:MM:SS HH:MM:SS HH:MM:SS NLS_NUMERIC_CHARACTERS ,. ,. ,. NLS_CURRENCY € € RON NLS_DUAL_CURRENCY € € RON NLS_ISO_CURRENCY EUROPE ITALY ROMANIA NLS_LANGUAGE ENGLISH ITALIAN ROMANIAN NLS_DATE_LANGUAGE ENGLISH ITALIAN ROMANIAN Examples SELECT TO_CHAR('05/01/2007', 'YY-MM-DD') FROM DUAL DATE -------07-01-05 SELECT TO_CHAR(L_SHIPTIMESTAMP, 'DD-MON-YYYY HH24:MI:SS.FF3') AS TS_DATE FROM PROVATS TS_DATE -----------------------13-Mar-1996 11:17:25.776 12-Apr-1996 17:15:34.393 4.101 TO_CHAR (number) Syntax Purpose TO_CHAR (number) converts n to a value of string datatype, using the optional number format fmt. The value n can be any numeric types. If you omit fmt, then n is converted to a © 2014 Advanced Systems srl SQL Functions 123 value exactly long enough to hold its significant digits. string The 'nlsparam' argument specifies these characters that are returned by number format elements: Decimal character Group separator Local currency symbol International currency symbol This argument can have this form: NLS_NUMERIC_CHARACTERS = ''dg'' NLS_CURRENCY = ''text'' NLS_ISO_CURRENCY = territory The characters d and g represent the decimal character and group separator, respectively. They must be different single-byte characters. Within the quoted string, you must use two single quotation marks around the parameter values. Ten characters are available for the currency symbol. If you omit 'nlsparam' or any one of the parameters, then this function uses the default parameter values for your session. Examples SELECT TO_CHAR(0111 + 1000) FROM dual; TO_C ---1111 In the next example, the output is blank padded to the left of the currency symbol. SELECT TO_CHAR(-10000,'L99G999D99MI') "Amount" FROM DUAL; Amount -------------€10,000.00- Ta ble – Nume ric support e d forma t Forma Exampl Description t e © 2014 Advanced Systems srl Notes SQL Functions 124 , 9,999 Generates ',' in specified position ',' is generated "in situ"; to specify territory is (group separator) preferable 'G' format . 9.99 Generates '.' in specified position '.' is generated "in situ"; to specify territory is (decimal character) preferable 'G' format $ $9999 Generates '$' € €9999 Generates '€' 0 0999 9990 Generates leading blanks Generates trealing blanks 9 9999 Generates output vlaue with If the input value has less digits, generates leading specified digits; positive value blanks has leading blank, negative value has trailing ‘-‘ B B9999 Leading blanks C C999 ISO symbol for currency See NLS_ISO_CURRENCY D 99D99 Generates decimal character in specified position See NLS_NUMERIC_CHARACTERS E EEEE Generates scientific format G 9G999 Generates group separator in specified position See NLS_NUMERIC_CHARACTERS L L999 Cuurency local symbol See NLS_CURRENCY MI 9999MI Generates trailing '-' for negative Allowed only at the end of format values (blank for positive values) PR 9999PR Generates negative values in brackets (< >); otherwise blanks RN RN rn rn S S9999 9999S Generates '+' o '-' (at end or begin) TM TM TM9 TME "Text Minimum" : generates the shorter format. © 2014 Advanced Systems srl Allowed only at the end of format Generates value in upper roman Only for values 1 – 3999 format Generates value in lower roman format Allowed only at the end or begin of format SQL Functions 125 4.102 TO_CODE Syntax code can be only a code field. Purpose In select clause Sadas usually returns the decoded description of code field. TO_CODE returns the internal code of a code field. The internal code of a code field is the internally representation of the field (numeric short value). The function returns a unsigned short. Example SELECT SESSO, TO_CODE(SESSO) FROM ANAGRAFICA SESSO ----------------PERSONA GIURIDICA PERSONA FISICA TO_CODE(“Sesso”) ---------------3 2 4.103 TO_DATE Syntax datetime date_format TO_DATE string datetime string can be DATE or TIMESTAMP datatypes. can be all character datatypes. Purpose TO_DATE converts char, character, varchar, date or timestamp to a value of DATE © 2014 Advanced Systems srl SQL Functions 126 datatype. If string is not a DATE, Sadas returns error. If you don't specify format_date, the input string must have the default date format of Sadas: ‘DD/MM/YYYY’ You ca use the following format_date values: DDMMYY YYMMDD MMDDYY DDMMYYYY YYYYMMDD MMDDYYYY YYYYDDD DD-MM-YY YY-MM-DD MM-DD-YY DD-MM-YYYY YYYY-MM-DD MM-DD-YYYY YYYY-DDD In format_date values you can use any char for separator. Examples SELECT TO_DATE('01/01/2000-12:46:23:001') AS LDATE FROM DUAL LDATE ---------01/01/2000 4.104 TO_DESC Syntax code can be only a code field. Purpose In select clause Sadas usually returns the decoded description of code field. TO_DESC returns the description of a code field. © 2014 Advanced Systems srl SQL Functions 127 The function always returns a string. Example SELECT SESSO, TO_DESC(SESSO) FROM ANAGRAFICA SESSO ----------------PERSONA GIURIDICA PERSONA FISICA TO_DESC(“Sesso”) ---------------PERSONA GIURIDICA PERSONA FISICA 4.105 TO_NUMBER Syntax default value TO_NUMBER expr ( expr ) can be all character datatypes. Purpose TO_NUMBER converts expr to a value of NUMBER datatype. The expr can be a value of CHAR, CHARACTER, TO_NUMBER VARCHAR datatype containing a number. The result type is always FLOAT. converts expr to a value of NUMBER datatype, considering decimal point e thousands separator in the current national format: ITA: decimal separator is comma, thousands separator is point ENG: decimal separator is point, thousands separator is comma If expr cannot converted: withouth default value, Sadas stops the query execution at the current row, with default value, Sadas put default value in the returned value for the current row. The default value is optional. Example SEL ECT TO_ NUMBER( ' - 1 0 0 ' ) Amo u n t ------- © 2014 Advanced Systems srl a s " Amo u n t " FROM DUAL ; SQL Functions 128 - 100 4.106 TO_TIME Syntax datetime string can be TIME or TIMESTAMP datatypes. can be all character datatypes. Purpose TO_TIME converts char, character, varchar, time or timestamp to a value of TIME datatype. If string is not a TIME, Sadas returns error Examples SELECT TO_TIME('01/01/2000-12:46:23:001') AS LTIME FROM DUAL LTIME -----------12:46:23:001 4.107 TO_TIMESTAMP Syntax datetime can be only TIMESTAMP. © 2014 Advanced Systems srl SQL Functions 129 string can be all character datatypes. Purpose TO_TIMESTAMP TIMESTAMP converts char, character, varchar or timestamp to a value of datatype. If string is not a TIMESTAMP, Sadas returns error. The input string must have the default TIMESTAMP format of Sadas: ‘DD/MM/YYYY-HH:MI:SS:MS’ Examples SELECT TO_TIMESTAMP('01/01/2000-12:46:23:001') AS LTIMESTAMP FROM DUAL LTIMESTAMP ----------------------01/01/2000-12:46:23:001 4.108 TODAY Syntax Purpose TODAY returns the current date of system. Example SELECT TODAY FROM DUAL; TODAY ---------19/06/2008 4.109 TRANSLATE Syntax Purpose TRANSLATE returns expr with all occurrences of each character in from_string replaced by its © 2014 Advanced Systems srl SQL Functions 130 corresponding character in to_string. Characters in expr that are not in from_string are not replaced. If expr is a character string, then you must enclose it in single quotation marks. The argument from_string can contain more characters than to_string. In this case, the extra characters at the end of from_string have no corresponding characters in to_string. If these extra characters appear in char, then they are removed from the return value. You cannot use an empty string for to_string to remove all characters in from_string from the return value. Sadas interprets the empty string as null, and if this function has a null argument, then it substitutes null. TRANSLATE REPLACE provides functionalities related to those provided by the REPLACE function. lets you substitute a single string for another single string, as well as remove character strings. TRANSLATE lets you make several single-character, one-to-one substitutions in one operation. Examples The following statement translates a book title into a string that could be used (for example) as a filename. The from_string contains four characters: a space, asterisk, slash, and apostrophe (with an extra apostrophe as the escape character). The to_string contains only three underscores. This leaves the fourth character in the from_string without a corresponding replacement, so apostrophes are dropped from the returned value. SELECT TRANSLATE('SQL*Plus User''s Guide', ' */''', '___') FROM DUAL; TRANSLATE('SQL*PLUSU -------------------SQL_Plus_Users_Guide © 2014 Advanced Systems srl SQL Functions 131 4.110 TRIM Syntax Purpose TRIM removes from the left and the right end of char all of the characters that appear in set. This function is useful for formatting the output of a query. If you do not specify set, then it defaults to a single blank. Both char and set can be any of the string datatypes. Example SELECT TRIM(' X10 ') "TRIM example" FROM DUAL; TRIM example ------------X10 4.111 TRUNC[ATE] (number) Syntax TRUNC ( n,dec ) Purpose The TRUNC function returns n truncated to dec decimal places. This function takes as an argument any numeric datatype and always returns an integer type. Examples The following examples truncate numbers: SELECT TRUNC(15.79) "LTruncate" FROM DUAL; LTruncate © 2014 Advanced Systems srl SQL Functions 132 ---------15 SELECT TRUNC(15.79,1) "LTruncate" FROM DUAL; LTruncate ---------15.7 4.112 UCASE Refer to UPPER function. 4.113 UPPER Syntax Purpose UPPER returns char, with all letters uppercase. char can be any of the datatypes CHAR, CHARACTER, VARCHAR. The return value is the same datatype as char. Examples The following example returns a string in uppercase: SELECT UPPER('mr. scott mcmillan') "Uppercase" FROM DUAL; Uppercase -------------------MR. SCOTT MCMILLAN 4.114 VARIANCE Syntax Purpose VARIANCE returns the variance of expr, a set of numbers. You can only use it as an aggregate. Sadas calculates the variance. This function takes as an argument any numeric datatype and © 2014 Advanced Systems srl SQL Functions 133 always returns a real number. Aggregate Examples The following example returns the variance of the salaries in the sample hr.employees table: SELECT VARIANCE(salary) "LVar" FROM employees; LVAR ---------15283140.5 4.115 VSIZE Syntax Purpose VSIZE returns the number of bytes in the Sadas internal representation of col. Examples SELECT VSIZE(L_QUANTITY) AS INTSIZE FROM LINEITEM INTSIZE -------- 1 1 … © 2014 Advanced Systems srl Part V Expressions 5 135 Expressions This chapter describes how to combine values, operators, and functions into expressions. This chapter includes these sections: About SQL Expressions Simple Expressions Compound Expressions Case Expressions Datetime Expressions Function Expressions Scalar Subquery Expressions Expression Lists 5.1 About SQL Expressions An expression is a combination of one or more values, operators and SQL functions that evaluates to a value. An expression generally assumes the datatype of its components. This simple expression evaluates to 4 and has datatype NUMBER (the same datatype as its components): 2*2 The following expression is an example of a more complex expression that uses both functions and operators. The expression truncates 3.2 value and adds seven, and converts the result to CHAR datatype: TO_CHAR(TRUNC(3.2)+7) © 2014 Advanced Systems srl Expressions 136 You can use expressions in: The select list of the SELECT statement A condition of the WHERE clause and HAVING clause The GROUP BY clause The ORDER BY clause Expressions have several forms, as shown in the following syntax: Sadas does not accept all forms of expressions in all parts of all SQL statements. Refer to the individual SQL statements for information on restrictions on the expressions in that statement. You must use appropriate expression notation whenever expr appears in conditions, SQL functions, or SQL statements in other parts of this reference. The sections that follow describe and provide examples of the various forms of expressions. © 2014 Advanced Systems srl Expressions 5.2 Simple Expressions A simple expression specifies a column, constant, or null. Some valid simple expressions are: employees.last_name 'this is a text string' 10 'this is an NCHAR string' © 2014 Advanced Systems srl 137 Expressions 5.3 138 Compound Expressions A compound expression specifies a combination of other expressions. You can use any built-in function as an expression (See “Function Expressions” chapter). However, in a compound expression, some combinations of functions are inappropriate and are rejected. For example, the LENGTH function is inappropriate within an aggregate function. Some valid compound expressions are: ('CLARK' + 'SMITH') LENGTH('MOOSE') * 57 SQRT(144) + 72 SUBSTR(TO_CHAR(sysdate,'DD-MM-YY'),1,2) 5.4 Case Expressions expressions let you use IF ... THEN ... ELSE logic in SQL statements without having to invoke procedures. CASE © 2014 Advanced Systems srl Expressions 139 simple_case_expression ::= searched_case_expression ::= else_clause ::= In a simple CASE expression, Sadas Database searches for the first WHEN ... THEN pair for which expr is equal to comparison_expr and returns return_expr. If none of the WHEN ... THEN pairs meet this condition, and an ELSE clause exists, then Sadas returns else_expr. Otherwise, Sadas returns null (blank for alphanumerics and zero for numerics). In a searched CASE expression, Sadas searches from left to right until it finds an occurrence of condition that is true, and then returns return_expr. If no condition is found to be true, and an ELSE clause exists, then Sadas returns else_expr. Otherwise, Sadas returns null. Sadas Database uses short-circuit evaluation. For a simple CASE expression, the database evaluates each comparison_expr value only before comparing it to expr, rather than evaluating all comparison_expr values before comparing any of them with expr. Consequently, Sadas never evaluates a comparison_expr if a previous comparison_expr is equal to expr. For a searched CASE expression, the database evaluates each condition to determine whether it is true, and never evaluates a condition if the previous condition was true. For a simple CASE expression, the expr and all comparison_expr values must either have the same datatype or must all have a numeric datatype. If all expressions have a numeric datatype, then Sadas determines the argument with the highest numeric precedence, implicitly converts the remaining arguments to that datatype, and returns that datatype. © 2014 Advanced Systems srl Expressions 140 For both simple and searched CASE expressions, all of the return_exprs must either have the same datatype or must all have a numeric datatype. If all return expressions have a numeric datatype, then Sadas determines the argument with the highest numeric precedence, implicitly converts the remaining arguments to that datatype, and returns that datatype. Simple CASE Example For each customer in the sample oe. c us t omer s table, the following statement lists the credit limit as "Low" if it equals $100, "High" if it equals $5000, and "Medium" if it equals anything else. SELECT c us t _l as t _name, CASE c r edi t _l i mi t WHEN 100 THEN ' Low' WHEN 5000 THEN ' Hi gh' ELSE ' Medi um' END AS c r edi t FROM c us t omer s ORDER BY c us t _l as t _name, c r edi t ; CUST_LAST_NAME -------------------Adj ani Adj ani Al ex ander Al ex ander Al t man Al t man . . . CREDI T -----Medi um Medi um Medi um Medi um Hi gh Medi um Searched CASE Example The following statement finds the average salary of the employees in the sample table oe.employees, using $2000 as the lowest salary possible: SELECT AVG( CASE WHEN e. s al ar y > 2000 THEN e. s al ar y ELSE 2000 END) as " Av er age Sal ar y " FROM empl oy ees e; Av er age Sal ar y -------------6461. 68224 5.5 Datetime Expressions A datetime expression yields a value of one of the datetime datatypes. Datetime functions can be combined according to the rules defined in this SQL Reference. 5.6 Function Expressions You can use any built-in SQL function as an expression. Some valid built-in function expressions are: LENGTH('BLAKE') ROUND(1234.567*43) SYSDATE © 2014 Advanced Systems srl Expressions 5.7 141 Scalar Subquery Expressions A scalar subquery expression is a subquery that returns exactly one column value from one row. The value of the scalar subquery expression is the value of the select list item of the subquery. If the subquery returns 0 rows, then the value of the scalar subquery expression is NULL. If the subquery returns more than one row, then Sadas returns an error. You can use a scalar subquery expression in most syntax that calls for an expression (expr). A valid scalar subquery is SELECT MAX(L_QUANTITY) FROM LINEITEM 5.8 Expression Lists An expression list is a combination of other expressions. Expression lists can appear in comparison and membership conditions and in GROUP BY clauses of queries and subqueries. Comparison and membership conditions appear in the conditions of WHERE clauses. They can contain either one or more comma-delimited expressions or one or more sets of expressions where each set contains one or more comma-delimited expressions. Multiple sets of expressions are not supported. The following are some valid expression lists in conditions: © 2014 Advanced Systems srl Expressions 142 (10, 20, 40) ('SCOTT', 'BLAKE', 'TAYLOR') ('Guy', 'Himuro', 'GHIMURO') In this example, the number of expressions in each set must equal the number of expressions in the first part of the condition. For example: SELECT * FROM employees WHERE first_name IN ('Guy', 'Himuro', 'GHIMURO') Simple GROUP BY clause example: SELECT department_id, salary, MIN(salary) min, MAX(salary) max FROM employees GROUP BY department_id, salary ORDER BY department_id, min, max; © 2014 Advanced Systems srl Part VI Conditions 6 144 Conditions A condition specifies a combination of one or more expressions and logical (Boolean) operators and returns a value of TRUE, FALSE, or UNKNOWN. This chapter contains the following sections: About SQL Conditions Comparison Conditions Logical Conditions Pattern-matching Conditions Range Conditions Null Conditions Compound Conditions EXISTS Condition IN Condition 6.1 About SQL Conditions Conditions can have several forms, as shown in the following syntax. © 2014 Advanced Systems srl Conditions 145 The sections that follow describe the various forms of conditions. You must use appropriate condition syntax whenever condition appears in SQL statements. You can use a condition in the WHERE clause of these statements: DELETE SELECT You can use a condition in any of these clauses of the SELECT statement: WHERE HAVING A condition could be said to be of a logical datatype, although Sadas does not formally support such a datatype. The following simple condition always evaluates to TRUE: 1 = 1 The following more complex condition adds the salary value to the commission_pct value and determines whether the sum is greater than the number constant 25000: salary + (salary*commission_pct - 1000) > 25000 Logical conditions can combine multiple conditions into a single condition. For example, you can use the AND condition to combine two conditions: (1 = 1) AND (5 < 7) Here are some valid conditions: name = 'SMITH' employees.department_id_fk = departments.department_id_pk hire_date > '01/02/2001' job_id IN ('SA_MAN', 'SA_REP') salary BETWEEN 5000 AND 10000 commission_pct = 0 AND salary = 2100 6.1.1 Condition Precedence Precedence is the order in which Sadas evaluates different conditions in the same expression. When evaluating an expression containing multiple conditions, Sadas evaluates conditions with higher precedence before evaluating those with lower precedence. Sadas evaluates conditions © 2014 Advanced Systems srl Conditions 146 with equal precedence from left to right within an expression. Following table lists the levels of precedence among SQL condition from high to low. As the table indicates, Sadas evaluates operators before conditions. Conditions listed on the same line have the same precedence. The Optimizer decides the execution precedence. Ta ble – SQL Condit ion pre ce de nce Type of Condition Purpose SQL operators are evaluated before SQL See “Operator Precedence” conditions =, !=, <, >, <=, >=, [NOT] LIKE, EXISTS 6.2 BETWEEN, comparison [NOT] IN, comparison NOT exponentiation, negation AND conjunction OR disjunction logical Comparison Conditions Comparison conditions compare one expression with another. The result of such a comparison can be TRUE, FALSE, or NULL. When comparing numeric expressions, Sadas uses numeric precedence to determine whether the condition compares NUMBER or DOUBLE values. Ta ble – SQL Compa rison condit ions © 2014 Advanced Systems srl Conditions 147 Type Purpose Example = Equality test. SELECT * FROM employees WHERE salary = 2500 != ^= <> Inequality test. SELECT * FROM employees WHERE salary != 2500 > Greater-than and less-than tests. SELECT * FROM employees WHERE salary > 2500 SELECT * FROM employees WHERE salary < 2500 < >= Greater-than-or-equal-to and less-than-or-equal-to tests. <= 6.2.1 SELECT * FROM employees WHERE salary >= 2500 SELECT * FROM employees WHERE salary <= 2500 Simple Comparison Conditions A simple comparison condition specifies a comparison with expressions or scalar subquery results. simple_comparison_condition::= © 2014 Advanced Systems srl Conditions 6.3 148 Logical Conditions A logical condition combines the results of two component conditions to produce a single result based on them or to invert the result of a single condition. Following table lists logical conditions. © 2014 Advanced Systems srl Conditions 149 Ta ble – Logica l Condit ions Type Operation Examples NOT SELECT * FROM lineitem WHERE NOT (l_quantity = 1); Returns TRUE if the following condition is FALSE. Returns FALSE if it is TRUE. If it is UNKNOWN, then it remains UNKNOWN. SELECT * FROM lineitem WHERE NOT (l_quantity between 1 10); AND Returns TRUE if both component conditions are TRUE. Returns FALSE if either is FALSE. Otherwise returns UNKNOWN. SELECT * FROM lineitem WHERE l_quantity = 1 AND l_orderkey < 10000 OR Returns TRUE if either component condition is TRUE. Returns FALSE if both are FALSE. Otherwise returns UNKNOWN. SELECT * FROM lineitem WHERE l_quantity = 1 OR l_orderkey < 10000 AND Following table shows the result of applying the NOT condition to an expression. Ta ble – NOT Trut h Ta ble -- TRUE FALSE UNKNOWN NOT FALSE TRUE UNKNOWN Following table shows the results of combining the AND condition to two expressions. Ta ble - A ND Trut h Ta ble AND TRUE FALSE UNKNOWN TRUE TRUE FALSE UNKNOWN FALSE FALSE FALSE FALSE UNKNOWN UNKNOWN FALSE UNKNOWN For example, in the WHERE clause of the following SELECT statement, the AND logical condition is used to ensure that only those hired before 1989 and earning more than $2500 a month are © 2014 Advanced Systems srl Conditions 150 returned: SELECT * FROM employees WHERE hire_date < TO_DATE('01-JAN-1989', 'DD-MON-YYYY') AND salary > 2500 ORDER BY employee_id; Following table shows the results of applying OR to two expressions. Ta ble - OR Trut h Ta ble OR TRUE FALSE UNKNOWN TRUE TRUE TRUE TRUE FALSE TRUE FALSE UNKNOWN UNKNOWN TRUE UNKNOWN UNKNOWN For example, the following query returns employees who have a 40% commission rate or a salary greater than $20,000: SELECT employee_id FROM employees WHERE commission_pct = .4 OR salary > 20000 ORDER BY employee_id; 6.4 Pattern-matching Conditions The pattern-matching conditions compare character data. 6.4.1 LIKE Condition The LIKE conditions specify a test involving pattern matching. Whereas the equality operator (=) exactly matches one character value to another, the LIKE conditions match a portion of one character value to another by searching the first value for the pattern specified by the second. LIKE calculates strings using characters as defined by the 7-bit ASCII character set. © 2014 Advanced Systems srl Conditions 151 In this syntax: char1 is a character expression, such as a character column, called the search value. char2 is a character expression, usually a literal, called the pattern. The LIKE condition is the best choice in almost all situations. All of the character expressions (char1 and char2) can be of any of the datatypes CHAR, CHARACTER or VARCHAR. The pattern can contain special pattern-matching characters: A percent sign (%) in the pattern can match zero or more characters in the value. The pattern '%' cannot match a null. Following table describes the LIKE conditions. Ta ble - LIKE Condit ions Type Operation Example x [NOT] LIKE y TRUE if x does [not] match the pattern y. Within y, the character % matches any string of zero or more characters except null. SELECT last_name FROM employees WHERE last_name LIKE '%AB%'; With the LIKE conditions, you can compare a value to a pattern rather than to a constant. The pattern must appear after the LIKE keyword. For example, you can issue the following query to find the salaries of all employees with names beginning with R: SELECT salary FROM employees WHERE last_name LIKE 'R%' ORDER BY salary; The following query uses three ‘%’ characters to find the salaries of all employees with the name containing in all positions 'R' preceeding 'X': © 2014 Advanced Systems srl Conditions 152 SELECT salary FROM employees WHERE last_name = '%R%X%' ORDER BY salary; The following query uses three ‘%’ characters to find the salaries of all employees with the name containing '%': SELECT salary FROM employees WHERE last_name = '%%%' ORDER BY salary; The following query uses the = operator, rather than the LIKE condition, to find the salaries of all employees with the name 'R%': SELECT salary FROM employees WHERE last_name = 'R%' ORDER BY salary; A text literal must be always on right part of condition, if other part (left) is not a text literal. If you write the following query, Sadas will return an error. SELECT salary FROM employees WHERE 'SM%' LIKE last_name ORDER BY salary; 6.4.2 Case Sensitivity Case is significant in all conditions comparing character expressions that use the LIKE condition and the equality (=) operators. 6.4.3 Pattern Matching on Indexed Columns In loading process, Sadas creates special indexes for LIKE operations. When you use LIKE to search a like-indexed column for a pattern, Sadas can use the special index to improve performance of a query. © 2014 Advanced Systems srl Conditions 6.4.4 153 LIKE Condition: General Examples This condition is true for all last_name values beginning with Ma: last_name LIKE 'Ma%' All of these last_name values make the condition true: Mallin, Markle, Marlow, Marvins, Marvis, Matos Case is significant, so last_name values beginning with MA, ma, and mA make the condition false. Consider this condition: last_name LIKE 'SMITH%' This condition is true for these last_name values: SMITH, SMITHE, SMITHY, SMITHS 6.5 Range Conditions A range condition tests for inclusion in a range. Following table describes the range conditions. Ta ble - Ra nge Condit ions Type Operation Example [NOT] BETWEEN x AND y [Not] greater than or equal to x and less employees than or equal to y. WHERE salary SELECT * FROM BETWEEN 2000 AND 3000; Sadas tries to transform the two-collection conditions in between conditions. Following table shows range types to manage these conditions. © 2014 Advanced Systems srl Conditions 154 Ta ble –Ra nge Ty pe s 6.6 Type Operation Example CLOSED Greater than or equal to x and less than or equal to y. OPENED Greater than x and less than y. CLOSELEFT Greater than or equal to x and less than to y. A >= x and A < y [x <= y] CLOSERIGH Greater than to x and less than or equal to y. T A > x and A <= y [x <= y] A >= x and A <= y [x <= y] A > x and A < y [x <= y] Null Conditions In Sadas system the NULL values are as all other values. The NULL conditions is only supported for SQL-99 compatibility, but it returns always TRUE for IS NOT NULL condition and always FALSE for IS NULL condition. Following tables shows NULL values for all datatypes. Alphanumeric Null Value: 0x00 ( for entire field length ) Date – Time – Timestamp - Code Null Value : 0x00 Numeric Bytes number State Hexa-decimal value Value 1 unsigned FF 255 1 signed 7F 127 2 unsigned FF FF 65.535 2 signed FF 7F 32.767 © 2014 Advanced Systems srl Conditions 6.7 155 3 unsigned FF FF FF 16.777.215 3 signed FF FF 7F 8.388.607 4 unsigned FF FF FF FF 4.294.967.295 4 signed FF FF FF 7F 2.147.483.647 5 unsigned FF FF FF FF FF 1.099.511.627.775 5 signed FF FF FF FF 7F 549.755.813.887 6 unsigned FF FF FF FF FF FF 281.474.976.710.655 6 signed FF FF FF FF FF 7F 140.737.488.355.327 7 unsigned FF FF FF FF FF FF FF 72.057.594.037.927.936 7 signed FF FF FF FF FF FF 7F 36.028.797.018.963.967 8 unsigned FF FF FF FF FF FF FF FF 18.446.744.073.709.551.616 8 signed FF FF FF FF FF FF FF 7F 9.223.372.036.854.775.807 Compound Conditions A compound condition specifies a combination of other conditions. See also chapter “Logical Conditions” for more information about NOT, AND, and OR conditions © 2014 Advanced Systems srl Conditions 6.8 156 EXISTS Condition EXISTS Condition An EXISTS condition tests for existence of rows in a subquery. Following table shows the EXISTS condition. Ta ble - EX ISTS Condit ion 6.9 Type Operation Example EXISTS TRUE if a subquery returns at least one row. SELECT department_id FROM departments WHERE EXISTS (SELECT * FROM employees) ORDER BY department_id; IN Condition An in_condition is a membership condition. It tests a value for membership in a list of values or subquery in_conditions::= expression_list::= © 2014 Advanced Systems srl Conditions 157 Following table lists the form of IN condition. Ta ble - IN Condit ions Type Operation IN Equal-to-any-member-of =ANY. Example test. Equivalent to SELECT * FROM employees WHERE job_id IN ('PU_CLERK','SH_CLERK') ORDER BY employee_id; SELECT * FROM employees WHERE salary IN (SELECT dsalary FROM departments WHERE department_id =30) ORDER BY employee_id; NOT IN Equivalent to !=ALL. Evaluates to FALSE if any member of the set is NULL. Sadas does not support NOT IN with subquery SELECT * FROM employees WHERE job_id NOT IN ('PU_CLERK', 'SH_CLERK') ORDER BY employee_id; There are restrictions in WHERE Clauses: In a IN condition in a WHERE clause, if the righthand side of the condition is a subquery: you cannot use dynamic and related subqueries. © 2014 Advanced Systems srl Part VII SQL DDL Clauses (constraint) 7 159 SQL DDL Clauses (constraint) Purpose Use a constraint to define an integrity constraint that restricts the values in a database. Sadas lets you create two types of constraints and lets you declare them in two ways: A primary key constraint combines a NOT NULL constraint and a unique constraint in a single declaration. It prohibits multiple rows from having the same value in the same column and prohibits values from being null. A foreign key constraint requires values in one table to match values in another table. With virtual constraint Sadas creates a field-container for update operations. A NOT NULL constraint prohibits a database value from being null. In this version of Sadas this constraint has no effect, because the management of null values is not yet complete. You can define constraints syntactically in two ways: As part of the definition of an individual column or attribute. This is called inline specification. As part of the table definition. This is called out-of-line specification. Constraint clauses can appear in the following statements: CREATE TABLE ALTER TABLE You can specify primary key, and foreign key constraints on views. You cannot combine primary or foreign keys with virtual constraints. Prerequisites You must have the privileges necessary to issue the statement in which you are defining the constraint. To create a foreign key constraint, in addition, the parent table or view must be in your own schema or you must have the privileges necessary on the table of the columns of the referenced key in the parent table or view. © 2014 Advanced Systems srl SQL DDL Clauses (constraint) Syntax example inline spefication CREATE TABLE REGION ( R_REGIONKEY INTEGER (10) PRIMARY KEY, R_NAME CHAR (25) NOT NULL, R_COMMENT CHAR (152) ) CREATE TABLE NATION ( N_NATIONKEY INTEGER (10) PRIMARY KEY, N_NAME CHAR (25), N_REGIONKEY INTEGER (10) FOREIGN KEY REFERENCES REGION(R_REGIONKEY), N_COMMENT CHAR (152) ) CREATE TABLE REGION ( R_REGIONKEY INTEGER (10) VIRTUAL, R_NAME CHAR (25), R_COMMENT CHAR (152) ) out-of-line spefication CREATE TABLE DEMO AS SELECT * FROM NATION ALTER TABLE DEMO MODIFY (N_NATIONKEY INTEGER(2) PRIMARY KEY) ALTER TABLE DEMO MODIFY (N_NATIONKEY INTEGER(2) VIRTUAL) ALTER TABLE DEMO MODIFY (N_REGIONKEY INTEGER(10) FOREIGN KEY REFERENCES REGION © 2014 Advanced Systems srl 160 SQL DDL Clauses (constraint) 161 (R_REGIONKEY)) display constraints desc syskeys (primary keys) desc sysforeignkeys (foreign keys) 7.1 Primary Key Constraints Primary Key Constraints A primary key constraint designates a column as the primary key of a table or view. A composite primary key designates a combination of columns as the primary key. In Sadas you cannot define a composite PRIMARY KEY, but you first must define a composite field and then you can define a composite PRIMARY KEY. When you define a primary key constraint inline, you need only the PRIMARY KEY keywords. When you define a primary key constraint out of line, you must also specify one column. A primary key constraint combines a NOT NULL and unique constraint in one declaration. Therefore, to satisfy a primary key constraint: No primary key value can appear in more than one row in the table. No column that is part of the primary key can contain a null. A table or view can have only one primary key. You can designate the same column or combination of columns as both a primary key and a foreign key. 7.2 Foreign Key Constraints A foreign key constraint (also called a referential integrity constraint) designates a column as the foreign key and establishes a relationship between that foreign key and a specified primary key, called the referenced key. In Sadas you cannot define a composite FOREIGN KEY, but you first must define a composite field and then you can define a composite FOREIGN KEY. The table or view containing the foreign key is called the child object, and the table or view containing the referenced key is called the parent object. © 2014 Advanced Systems srl SQL DDL Clauses (constraint) 162 You can define a foreign key constraint on a single key column either inline or out of line. You can designate the same column or combination of columns as both a foreign key and a primary key. The referenced unique or primary key constraint on the parent table or view must already be defined. The child and parent tables must be on the same database. 7.3 Virtual Constraints Purpose A virtual constraint defines a new column within the table to be used as a container, not specifically related to input data fields. Virtual columns can be specified at table definition time, or at a later moment when table has already been loaded. When defining a virtual column, a default value can be specified. Contents of virtual columns can be modified (through i.e. values of expressions) by using the UPDATE script. Values assigned to virtual columns are lost (and reset to default) when a new loading for the table occurs. Example: ALTER TABLE TT ADD (NET_PRICE decimal(13,2) VIRTUAL) UPDATE TT SET NET_PRICE = (GROSS_PRICE-VAT_AMOUNT) In this example a new column NET-PRICE is defined in the table. The column does not correspond to any physical input field but is computed as a result of an expression on existing fields. © 2014 Advanced Systems srl Part VIII SQL Queries and Subqueries 8 164 SQL Queries and Subqueries This chapter describes SQL queries and subqueries. This chapter contains these sections: About Queries and Subqueries Creating Simple Queries The UNION [ALL], INTERSECT, MINUS Operators Sorting Query Results Joins Using Subqueries Unnesting of Nested Subqueries Selecting from the DUAL Table 8.1 About Queries and Subqueries A query is an operation that retrieves data from one or more tables or views. In this reference, a top-level SELECT statement is called a query, and a query nested within another SQL statement is called a subquery. This section describes some types of queries and subqueries and how to use them. The top level of the syntax is shown in this chapter. Refer to “SELECT” chapter for the full syntax of all the clauses and the semantics of this statement. subquery::= © 2014 Advanced Systems srl SQL Queries and Subqueries 165 query_block::= group_by_clause 8.2 can be substituted by distribute_by_clause. Creating Simple Queries The list of expressions that appears after the SELECT keyword and before the FROM clause is called the select list. © 2014 Advanced Systems srl SQL Queries and Subqueries 166 Within the select list, you specify one or more columns in the set of rows you want Sadas Database to return from one or more tables, views, or materialized views. The number of columns, as well as their datatype and length, are determined by the elements of the select list. If two or more tables have some column names in common, then you must qualify column names with names of tables. Otherwise, fully qualified column names are optional. However, it is always a good idea to qualify table and column references explicitly. Sadas often does less work with fully qualified table and column names. You can use a column alias, c_alias, to label the immediately preceding expression in the select list so that the column is displayed with a new heading. The alias effectively renames the select list item for the duration of the query. The alias can be used in all clauses in the query. 8.3 The UNION [ALL], INTERSECT, MINUS Operators You can combine multiple queries using the set operators UNION, UNION ALL, INTERSECT, and MINUS. All set operators have equal precedence. If a SQL statement contains multiple set operators, then Sadas Database evaluates them from the left to right unless parentheses explicitly specify another order. The corresponding expressions in the select lists of the component queries of a compound query must match in number and must be in the same datatype group (such as numeric or character). Sadas makes special controls for code and pseudo-code fields; in these cases the corresponding decode tables must be identical. For numeric expressions or fields, all queries must select INTEGER (with or without decimals) or FLOAT datatypes. The order by clause on total set of rows retrieved is not currently supported in Sadas. . © 2014 Advanced Systems srl SQL Queries and Subqueries 167 If component queries select character data, then the datatype of the return values are determined as follows: If both queries select values of datatype CHAR [VARCHAR] of equal length, then the returned values have datatype CHAR [VARCHAR] of that length. If the queries select values of CHAR [VARCHAR] with different lengths, then the returned value is CHAR [VARCHAR] with the length of the larger CHAR [VARCHAR] value. UNION Example The following statement combines the results of two queries with the UNION operator, which eliminates duplicate selected rows. This statement shows that you must match datatype (using the TO_CHAR function) when columns do not exist in one or the other table: SELECT location_id, department_name as "Department", ‘ ‘ as "Warehouse" FROM departments UNION SELECT location_id, ‘ ‘ as "Department", warehouse_name FROM warehouses; LOCATION_ID ----------1400 1400 1500 1500 1600 1700 1700 1700 1700 1700 1700 ... Department Warehouse ------------------------------ --------------------------IT Southlake, Texas Shipping San Francisco New Jersey Accounting Administration Benefits Construction Contracting Control And Credit UNION ALL Example The UNION operator returns only distinct rows that appear in either result, while the UNION ALL operator returns all rows. The UNION ALL operator does not eliminate duplicate selected rows: SELECT product_id FROM order_items UNION SELECT product_id FROM inventories © 2014 Advanced Systems srl SQL Queries and Subqueries SELECT location_id UNION ALL SELECT location_id 168 FROM locations FROM departments A location_id value that appears multiple times in either or both queries (such as '1700') is returned only once by the UNION operator, but multiple times by the UNION ALL operator. INTERSECT Example The following statement combines the results with the INTERSECT operator, which returns only those rows returned by both queries: SELECT product_id FROM inventories INTERSECT SELECT product_id FROM order_items MINUS Example The following statement combines results with the MINUS operator, which returns only unique rows returned by the first query but not by the second: SELECT product_id FROM inventories MINUS SELECT product_id FROM order_items 8.4 Sorting Query Results Use the ORDER BY clause to order the rows selected by a query. Sorting by position is useful to order by a lengthy select list expression, you can specify its position in the ORDER BY clause rather than duplicate the entire expression. Sadas can execute the physical sort in memory or using disk. The Sadas basic alghoritm is Quick Sort Modified, on which Sadas applies several optimizations. © 2014 Advanced Systems srl SQL Queries and Subqueries 169 The result of group by clause and distinct operations are always sorted ascending too. 8.5 Joins Joins A join is a query that combines rows from two or more tables or views. Sadas performs a join whenever multiple tables appear in the FROM clause of the query. The select list of the query can select any columns from any of these tables. If any two of these tables have a column name in common, then you must qualify all references to these columns throughout the query with table names to avoid ambiguity. 8.5.1 Join Conditions Most join queries contain at least one join condition, either in the FROM clause or in the WHERE clause. The join condition compares two or more columns, each from a different table. To execute a join, Sadas combines pairs of rows, each containing one row from each table, for which the join condition evaluates to TRUE. The columns in the join conditions need not also appear in the select list. To execute a join of three or more tables, Sadas first joins two of the tables based on the join conditions comparing their columns and then joins the result to another table based on join conditions containing columns of the joined tables and the new table. Sadas continues this process until all tables are joined into the result. The optimizer determines the order in which Sadas joins tables based on the join conditions, indexes on the tables, and, any available statistics for the tables. The join physical operators are always binary. The natural join schema for Sadas is the Star Schema or Snow Flake Schema. On this schema you can specify join conditions in where clause (implicit), or you can use the explicit join clause. © 2014 Advanced Systems srl SQL Queries and Subqueries 170 The following table contains the supported joins by Sadas. Ta ble – Sa da s Joins Standard Type 8.5.2 Supported Sadas Type Clause Type Equijoins Yes Equijoins Implicit / Explicit Selfjoins Yes Selfjoins Implicit / Explicit Cartesian product No Cartesian product -- Inner Joins Yes Inner Joins Implicit / Explicit Outer Joins Yes Outer Joins Explicit Semijoins Yes Star Join Explicit Antijoins Yes Not Star Join Explicit Equijoins An equijoin is a join with a join condition containing an equality operator. An equijoin combines rows that have equivalent values for the specified columns. Depending on the internal algorithm the optimizer chooses to execute the join, the total size of the columns in the equijoin condition in a single table may be limited to the size of a data block minus some overhead. The size of a data block is specified by the setting parameter LENGTH_BUFFER. Example SELECT L_QUANTITY, O_ORDERDATE FROM LINEITEM, ORDERS WHERE L_ORDERKEY = O_ORDERKEY 8.5.3 Self Joins A self join is a join of a table to itself. © 2014 Advanced Systems srl SQL Queries and Subqueries 171 This table appears twice in the FROM clause and is followed by table aliases that qualify column names in the join condition. To perform a self join, Sadas combines and returns rows of the table that satisfy the join condition. Example SELECT L_QUANTITY,L_SHIPDATE,L_PARTKEY,L_SUPPKEY FROM LINEITEM A INNER JOIN LINEITEM B ON A.L_ORDERKEY = B.L_QUANTITY 8.5.4 Special notes Let’s consider this query: SELECT ANAGRAFICA.NOME, REGIONE.PAESE FROM ANAGRAFICA LEFT OUTER JOIN REGIONE ON (ANAGRAFICA.CODPAE = REGIONE.CODPAE) We project from ANAGRAFICA the field NOME (all) and the name of the country only if it is encoded in the REGIONE table. In this way the result set will also include all the values for ANAGRAFICA.NOME for which the field CODPAE is not encoded in the REGION table. The result set will show: NOME PAESE ROSSI FRANCIA BIANCHI ITALIA ESPOSITO VERDI GERMANIA If a restriction in the right table in the ON clause appears in the SELECT statement: SELECT ANAGRAFICA.NOME, REGIONE.PAESE FROM ANAGRAFICA LEFT OUTER JOIN REGIONE ON (ANAGRAFICA.CODPAE = REGIONE.CODPAE AND REGIONE.PAESE = ‘ITALIA’) The number of rows in the result set will be the same but values for PAESE different from ‘ITALIA’ will not be shown: © 2014 Advanced Systems srl SQL Queries and Subqueries NOME 172 PAESE ROSSI BIANCHI ITALIA ESPOSITO VERDI If the condition PAESE = ‘ITALIA’ is moved in the WHERE clause: SELECT ANAGRAFICA.NOME, REGIONE.PAESE FROM ANAGRAFICA LEFT OUTER JOIN REGIONE ON (ANAGRAFICA.CODPAE = REGIONE.CODPAE ) WHERE REGIONE.PAESE = ‘ITALIA’ In this case the WHERE clause is applied only after the JOIN condition is processed: thus all the rows not containing the value ‘ITALIA’ in the field PAESE are excluded from the result set: NOME PAESE BIANCHI ITALIA In this particular case the LEFT OUTER JOIN clause produces the same results of an INNER JOIN clause. In SADAS, conditions for restrictions on tables not included in the relationship of equality between keys cannot be included in the ON clause, but only in the WHERE clause, because the ON clause can only contain JOIN conditions (in order to use indexes). This means that even if the statement includes a restriction in the WHERE clause, SADAS includes the restriction in the JOIN processing and does not apply the restriction on the projection stage. Thus to obtain in SADAS a result set containing only the ‘ITALIA’ values for the PAESE column, the equivalent INNER clause must be used in the query. SELECT ANAGRAFICA.NOME, REGIONE.PAESE FROM ANAGRAFICA INNER JOIN REGIONE ON (ANAGRAFICA.CODPAE = REGIONE.CODPAE ) WHERE REGIONE.PAESE = ‘ITALIA’ The result set will be: NOME © 2014 Advanced Systems srl PAESE SQL Queries and Subqueries BIANCHI 173 ITALIA The same considerations can be applied to RIGHT OUTER and FULL OUTER joins. 8.5.5 Special outer joins A SQL join clause combines records from two or more tables in a database. The result of a left outer join (or simply left join) for table A and B always contains all records of the "left" table (A), even if the join-condition does not find any matching record in the "right" table (B). This means that if the ON clause matches 0 (zero) records in B (for a given record in A), the join will still return a row in the result (for that record)—but with NULL in each column from B. A left outer join returns all the values from an inner join plus all values in the left table that do not match to the right table. In Sadas a rightnull outer join returns only all values in the left table that do not match to the right table. A right outer join (or right join) closely resembles a left outer join, except with the treatment of the tables reversed. Every row from the "right" table (B) will appear in the joined table at least once. If no matching row from the "left" table (A) exists, NULL will appear in columns from A for those records that have no match in B. A right outer join returns all the values from the right table and matched values from the left table (NULL in case of no matching join predicate). In Sadas a lefttnull outer join returns only all values in the right table that do not match to the left table. 8.6 Using Subqueries A subquery answers multiple-part questions. For example, to determine who works in Taylor's department, you can first use a subquery to determine the department in which Taylor works. You can then answer the original question with the parent SELECT statement. A subquery in the FROM clause of a SELECT statement is also called an inline view. © 2014 Advanced Systems srl SQL Queries and Subqueries 174 A subquery in the WHERE clause of a SELECT statement is also called a nested subquery. Sadas does not impose any limit on the number of subquery levels in the FROM clause and in the WHERE clause of the top-level query. If columns in a subquery have the same name as columns in the containing statement, then you must prefix any reference to the column of the table from the containing statement with the table name or alias. To make your statements easier to read, always qualify the columns in a subquery with the name or alias of the table, view, or materialized view. In the FROM clause can coexist objects (tables, views or synonyms) and subqueries. Sadas does not perform correlated subqueries (when a nested subquery references a column from a table referred to a parent statement any number of levels above the subquery). Scalar subqueries, which return a single column value from a single row, are a valid form of expression. You can use scalar subquery expressions in most of the places where expr is called for in syntax. 8.7 Unnesting of Nested Subqueries Subqueries are nested when they appear in the WHERE clause of the parent statement. When Sadas evaluates a statement with a nested subquery, it must evaluate the subquery portion multiple times and may overlook some efficient access paths or joins. Subquery unnesting unnests and merges the body of the subquery into the body of the statement that contains it, allowing the optimizer to consider them together when evaluating access paths and joins. The optimizer can unnest most subqueries, with some exceptions. Those exceptions include hierarchical subqueries, a nested aggregate function, or a correlated reference to a query block that is not the immediate outer query block of the subquery. Sadas supports all scalar sub-queries. Sadas does not support correlated subqueries. Sadas resolves only the subqueries in the WHERE clause that can be unnested. © 2014 Advanced Systems srl SQL Queries and Subqueries 8.8 175 Selecting from the DUAL Table DUAL is a table automatically created by Sadas along with the data dictionary. DUAL is in the schema of the user SYSDBA but is accessible by the name DUAL to all users. It has one column, DUMMY, defined to be VARCHAR2(1), and contains one row with a value X. Selecting from the DUAL table is useful for computing a constant expression with the SELECT statement. Because DUAL has only one row, the constant is returned only once. Alternatively, you can select a constant or expression from any table, but the value will be returned as many times as there are rows in the table. Refer to “About SQL Functions” chapter for many examples of selecting a constant value from DUAL. © 2014 Advanced Systems srl Part IX SQL STATEMENTS 9 SQL STATEMENTS 9.1 Types of SQL Statements 177 The lists in the following sections provide a functional summary of SQL statements Most SQL statements belong to these categories: Data Definition Language (DDL) Statements Data Manipulation Language (DML) Statements 9.2 Data Definition Language (DDL) Statements Data definition language (DDL) statements let you to perform these tasks: Create, alter, and drop schema objects Grant and revoke privileges and roles Analyze information on a table or index Load table or entire database The LOAD, CREATE, ALTER, and DROP commands require exclusive access to the specified object. For example, an ALTER TABLE statement fails if another user has an open transaction on the specified table. The GRANT and REVOKE commands do not require exclusive access to the specified object. The DDL statements are: ALTER CREATE DROP GRANT LOAD / APPEND REVOKE TRUNCATE © 2014 Advanced Systems srl SQL STATEMENTS 9.3 178 Data Manipulation Language (DML) Statements Data manipulation language (DML) statements access and manipulate data in existing schema objects. The data manipulation language statements are: DELETE SELECT UPDATE The SELECT statement is a limited form of DML statement in that it can only access data in the database. It cannot manipulate data in the database, although it can operate on the accessed data before returning the results of the query. 9.4 ALTER TABLE Purpose Use the ALTER TABLE statement to alter the definition of a table. The table must be in your own schema/database, and you must have CATALOG privilege on the table. If you change structure of a loaded table, the changes to the table are not immediately available, but Sadas creates a copy of catalog structure of the table (shadow table); so you can query the table with the old data (consistent with old table structure) and, on new loading process, the shadow table will substitute the catalog structure of the table. If the structure of a table does not change, the shadow table does not exist. Syntax <alter_table> ::= ALTER TABLE table_name ADD '(' <modify_list> ')' | DROP COLUMN '(' <column (, column)* © 2014 Advanced Systems srl SQL STATEMENTS 179 | MODIFY '(' <modify_list> ')' alter_table::= Groups of ALTER TABLE syntax: column_clauses::= constraint_clauses::= After each clause you will find links to its component sub-clauses. column_clauses::= add_column_clauses::= © 2014 Advanced Systems srl SQL STATEMENTS column_definition::= modify_column_clauses::= modify_col_properties::= drop_column_clause ::= © 2014 Advanced Systems srl 180 SQL STATEMENTS 181 constraint_clauses::= Semantics Many clauses of the ALTER TABLE statement have the same functionality they have in a CREATE TABLE statement. For more information on such clauses, please see chapter “Create Table”. schema Specify the schema/database containing the table. If you omit schema, then Sadas assumes the © 2014 Advanced Systems srl SQL STATEMENTS 182 table is in current database. table Specify the name of the table to be altered. column_clauses Use these clauses to add, drop, or otherwise modify a column. add_column_clause The add_column_clause lets you add a column to a table. inline_constraint Use inline_constraint to add a constraint to the new column. modify_column_clauses Use the modify_column_clauses to modify the properties of an existing column or the substitutability of an existing object type column. modify_col_properties Use this clause to modify the properties of the column. Any optional parts of the column definition (datatype, default value, or constraint) that you omit from this clause remains unchanged. datatype You can change the datatype of any column if all rows of the column contain nulls. You can always increase the size of a character or the precision of a numeric column, whether or not all the rows contain nulls. You can reduce the size of a datatype of a column. All changes will be in effect only after load (rewrite) process. inline_constraint This clause lets you add a constraint to a column you are modifying. To change the state of existing constraints on existing columns, use the constraint_clauses. © 2014 Advanced Systems srl SQL STATEMENTS 183 drop_column_clause The drop_column_clause lets you drop columns you no longer need. constraint_clauses Use the constraint_clauses to add a new constraint using out-of-line declaration, modify the state of an existing constraint, or drop a constraint. Adding a Constraint The ADD clause lets you add a new out-of-line constraint or out-of-line REF constraint to the table. Modifying a Constraint The MODIFY CONSTRAINT clause lets you change the state of an existing constraint. PRIMARY KEY Specify PRIMARY KEY to drop the primary key constraint of table. Examples ALTER TABLE DEMO_TABLE ADD (NEW_FIELD INTEGER(2)) ALTER TABLE DEMO_TABLE MODIFY (N_NATIONKEY (adding a new field) INTEGER(2) PRIMARY KEY) (modifying a field and adding a primary key) ALTER TABLE DEMO_TABLE MODIFY REFERENCES REGION(R_REGIONKEY)) 9.5 (N_REGIONKEY INTEGER(10) FOREIGN KEY (modifying a field and adding a foreing key) ALTER USER Purpose Use the ALTER USER statement to modify the characteristics of the password of a database user. With this statement you can specify the characteristics of the password: expired or life time (days). Prerequisites You must have the SECURITY system privilege on database. Each database has own set of © 2014 Advanced Systems srl SQL STATEMENTS 184 users. To create a user on database, you must be connected to that database. For add, edit and delete a privilege see the GRANT and REVOKE chapters. Syntax <alter_user> ::= ALTER USER user_name [ PASSWORD EXPIRE | PASSWORD_LIFE_TIME [ DEFAULT | days | UNLIMITED ] ] alter_user::= ALTER USER user_name PASSWORD EXPIRE DEFAULT PASSWORD_LIFE_TIME days UNLIMITED Semantics user_name Specify the name of the user to be altered. The name can be up to 128 bytes long and can contain only ASCII characters. The user name is case insensitive and is stored in uppercase ASCII characters. If you specify the user name as a quoted identifier, then the quotation marks are silently ignored. days © 2014 Advanced Systems srl SQL STATEMENTS 185 Specify the life time of the password in days. Example ALTER USER DEMO_USR PASSWORD EXPIRE ALTER USER DEMO_USR PASSWORD_LIFE_TIME 365 9.6 ALTER VIEW Purpose Use the ALTER VIEW statement to alter the definition of a view. The view must be in your own schema/database, and you must have CATALOG privilege on the view. The alter view can be used only to modify a field specification and to define constraints (primary key, foreign key). The view is not recompiled after ALTER VIEW operations. Syntax <alter_view> ::= ALTER VIEW view MODIFY '(' <modify_list> ')' alter_view::= Semantics schema Specify the schema containing the view. If you omit schema, then Sadas assumes the view is in your own schema. view Specify the name of the view to be altered. MODIFY CONSTRAINT Clause © 2014 Advanced Systems srl SQL STATEMENTS 186 Use the MODIFY CONSTRAINT clause to change or add constraints (primary key, foreign key) Examples ALTER VIEW DEMO_VIEW MODIFY (N_NATIONKEY INTEGER(2) PRIMARY KEY) (modifying a field and adding a primary key) ALTER VIEW DEMO_VIEW MODIFY (N_REGIONKEY INTEGER(10) FOREIGN KEY REFERENCES REGION(R_REGIONKEY)) 9.7 (modifying a field and adding a foreing key) APPEND TABLE Purpose Use the APPEND TABLE statement to add records to a table from an input file or from a subquery. Since this is a load process, Sadas will wait for the end of all queries running and then will start the APPEND TABLE process. While executing this process, Sadas stops all others requests. You must have LOAD privilege on table to activate this process. You can specify a list of columns that represents the sort relation of table, to be maintained in the APPEND TABLE process. If you specify DIRECT clause, Sadas uses memory buffer of file name area as a single record to append. If you specify ONLY clause, Sadas append only n_rec records. If you specify SKIP clause, Sadas skips first n_rec records. In this case the loading type is always " APPEND" . Syntax <append_table1> ::= APPEND TABLE table_name ['@' file_name] [ DIRECT | ONLY n_rec | SKIP n_rec [ONLY n_rec] ] [ORDER BY <column_list>] © 2014 Advanced Systems srl SQL STATEMENTS 187 <append_table2> ::= APPEND TABLE table_name FROM '('<SubQuery>')' append_table1::= append_table2::= APPEND TABLE table_name FROM SubQuery Semantics table_name Name of table on which Sadas will apply the APPEND TABLE process. The name can be up to 128 bytes long and can contain only ASCII characters. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. file_name © 2014 Advanced Systems srl SQL STATEMENTS 188 Name of file that contains records to append. If you omit this parameter, Sadas will read the file name from the Control Table Loader file registered in the Catalog. n_rec Number of records to skip or to append. column_list List of attributes to use for ordering purposes. subquery Specify the data that Sadas loads. For each subquery Sadas creates a temporary table, which will be deleted at the end of the query execution. Examples APPEND TABLE REGION ONLY 100; APPEND TABLE REGION SKIP 30; APPEND TABLE REGION SKIP 30 ONLY 100; APPEND TABLE DEMO_TABLE@C:\DEMO_TABLE.TXT APPEND TABLE DEMO_TABLE@C:\DEMO_TABLE.TXT ORDER BY ID_PRODUCT APPEND TABLE REGION@"0|AFRICA|special Tiresias about the furiously even dolphins are furi|" DIRECT APPEND TABLE REGION FROM (SELECT * FROM REGION2); 9.8 COMMENT ON COLUMN Purpose Use the COMMENT ON COLUMN statement to set a comment on a column of a table in the Catalog. To drop a comment from the database, set it to the empty (or with only spaces) string ' ': each COMMENT ON COLUMN statement rewrites the comment. If you specify ALL clause instead of table_name, SADAS rewrites comment in any table that © 2014 Advanced Systems srl SQL STATEMENTS 189 contains named column. Prerequisites To set the COMMENT on a column of a table in the Catalog, you must have the CATALOG system privilege on that table. Syntax <comment_on_column> ::= COMMENT ON COLUMN [ column_name OF [ ALL | table_name ] | table_name.column_name ] IS 'comment' COMMENT ON COLUMN schema . table_name column_name OF ALL schema . table_name IS comment Semantics ALL Specify ALL if you want to modify specified column in all tables of the database.. column_name © 2014 Advanced Systems srl . column_name SQL STATEMENTS 190 Specify the name of the column to be modified. The name can be up to 128 bytes long and can contain only ASCII characters. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the column name as a quoted identifier, then the quotation marks are silently ignored. table_name Specify the name of the table to be modified. The name can be up to 128 bytes long and can contain only ASCII characters. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. comment Specify the value of comment to set for the table. Comment is a constant character expression. Use the text literal notation to specify value of comment. Examples COMMENT ON PRODUCT.NAMEPR IS 'PRODUCT NAME'; COMMENT ON NAMEPR OF PRODUCT IS 'PRODUCT NAME'; COMMENT ON NAMEPR OF ALL IS 'PRODUCT NAME'; 9.9 COMMENT ON TABLE Purpose Use the COMMENT ON TABLE statement to set a comment on a table in the Catalog. To drop a comment from the database, set it to the empty (or with only spaces) string ' '; each COMMENT ON TABLE statement rewrites the comment. Prerequisites To set the COMMENT on a table in the Catalog, you must have the CATALOG system privilege on that table. © 2014 Advanced Systems srl SQL STATEMENTS 191 Syntax <comment_on_table> ::= COMMENT ON TABLE table_name IS 'comment' schema COMMENT table_name ON . TABLE IS comment Semantics table_name Specify the name of the table to be modified. The name can be up to 128 bytes long and can contain only ASCII characters. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. comment Specify the value of comment to set for the table. Comment is a constant character expression. Use the text literal notation to specify value of comment. Examples COMMENT ON PRODUCT IS 'PRODUCT LIST'; 9.10 CONNECT Purpose Use the CONNECT command to connect to a database. The connection is active until the user make requests, within time-out of server setting. © 2014 Advanced Systems srl SQL STATEMENTS 192 The Sadas master user is “SYSDBA” (reserved word). Syntax <connect> ::= CONNECT user '/' password '@' database | CONNECT SYSDBA '/' password [ '@' database ] Connecting SYSDBA connect::= Connecting user connect::= Semantics user User connecting password Password of user connecting db_name Name of schema/database to connect. The name can be up to 128 bytes long and can contain only ASCII characters. The database name is case insensitive and is stored in uppercase ASCII characters. If you specify the database name as a quoted identifier, then the quotation marks © 2014 Advanced Systems srl SQL STATEMENTS 193 are silently ignored. Examples CONNECT SYSDBA; CONNECT SMITH/SMITH@TPCH; 9.11 CREATE DATABASE Purpose Use the CREATE DATABASE statement to create a database, making it available for general use. In Sadas "database" and "schema" have the same meaning. Sadas does not require specific storage space and RAM area when creating a new database, so several databases can easily be defined in installation steps (the effective space required will depend from cardinality of data that will be loaded). Sadas does not use the "synonymous" concept, because each database has its own set of users. Prerequisites Only SYSDBA user can create a database. Syntax <create_database> ::= CREATE DATABASE db_name ['@' storage_path ] create_database::= Semantics db_name Specify the name of the database to be created. The name must match the value of the DB_NAME initialization parameter. The name can be up to 128 bytes long and can contain only ASCII characters. © 2014 Advanced Systems srl SQL STATEMENTS 194 The database name is case insensitive and is stored in uppercase ASCII characters. If you specify the database name as a quoted identifier, then the quotation marks are silently ignored. storage_path Specify the storage path of the database to be created. If the specified path does not exist, Sadas will create it. The storage path refers to the data files of the database, while the catalog files are written in the System Catalog Path. The storage path can also be a shared network drive. Examples CREATE DATABASE DB_DEMO CREATE DATABASE DB_DEMO@c:\path_db_demo 9.12 CREATE DBADMIN Purpose Use the CREATE DBADMIN statement to create a system database administrator (sysdba). With this statement you can only create the sysdba; on creating Sadas grants all privileges to this sysdba. The default administrator user is SYSDBA. Prerequisites Only SYSDBA user can create another system database administrator. Each system database administrator has all privileges of default SADAS system database administrator (SYSDBA). Syntax <create_dbadmin> create_dbadmin::= © 2014 Advanced Systems srl ::= CREATE DBADMIN user SQL STATEMENTS CREATE 195 user DBADMIN Semantics user Specify the name of the user to be created. The name can be up to 128 bytes long and can contain only ASCII characters. The user name is case insensitive and is stored in uppercase ASCII characters. If you specify the user name as a quoted identifier, then the quotation marks are silently ignored. Example CREATE DBADMIN DEMO_DBA 9.13 CREATE DOMAIN Purpose Use the CREATE DOMAIN statement to create a domain of users. With this statement you can only create the domain, but not grant any privilege; so Sadas will initially create the domain without privileges. Prerequisites Only SYSDBA user can create a domain of users. When you create a domain with the CREATE DOMAIN statement, the domain's privilege is empty. For add, edit and delete a privilege see the and REVOKE chapters. GRANT Syntax <create_domain> ::= CREATE DOMAIN domain_name create_domain::= CREATE Semantics domain_name © 2014 Advanced Systems srl DOMAIN domain_name SQL STATEMENTS 196 Specify the name of the domain to be created. The name can be up to 128 bytes long and can contain only ASCII characters. The domain name is case insensitive and is stored in uppercase ASCII characters. Example CREATE DOMAIN DEMO_DOMAIN 9.14 CREATE EXPRESSION Purpose Use the CREATE EXPRESSION statement to define an expression in a table. The expression created is a new field on the table, calculated using other fields of the same table. The table upon which an expression is based is called base table. You can create an expression also on a table not loaded. When the base table is modified through a load process all its expressions are recalculated. Prerequisites To create an expression on a table, you must have the CATALOG system privilege on the database. Syntax <create_expression> ::=CREATE EXPRESSION expr_name ON TABLE table_name AS '(' <expr> ')' create_expression::= CREATE © 2014 Advanced Systems srl EXPRESSION expr_name SQL STATEMENTS ON 197 TABLE table_name AS ( expr ) Semantics expr_name Specify the name of the expression. The name can be up to 128 bytes long and can contain only ASCII characters. The expression name is case insensitive and is stored in uppercase ASCII characters. If you specify the expression name as a quoted identifier, then the quotation marks are silently ignored. table_name Name of table on which Sadas will create the expression. The name can be up to 128 bytes long and can contain only ASCII characters. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. expr Specify an expression representing the information you want to create. Examples CREATE EXPRESSION PROVA ON TABLE SUPPLIER AS (S_ACCTBAL/100) CREATE EXPRESSION PROVA ON TABLE SUPPLIER AS (SUBSTR(S_COMMENT,1,2)) CREATE EXPRESSION PROVA ON TABLE SUPPLIER AS (S_NAME+'00') CREATE EXPRESSION PROVA ON TABLE SUPPLIER AS (S_NATIONKEY * 1000) CREATE EXPRESSION PROVA2 ON TABLE SUPPLIER AS (PROVA / 3 ) CREATE EXPRESSION PROVA ON TABLE ORDERS AS (DATEADD('DD',-100,O_ORDERDATE)) CREATE EXPRESSION PROVA ON TABLE SUPPLIER AS (S_NATIONKEY + S_ACCTBAL) CREATE EXPRESSION PROVA ON TABLE SUPPLIER AS (S_NATIONKEY + S_ACCTBAL / (100)) © 2014 Advanced Systems srl SQL STATEMENTS 9.15 198 CREATE INDEX Purpose Use the CREATE INDEX statement to create an index on a column in a table. Prerequisites To create an index on a column in a table, you must have the CATALOG system privilege on the database. Syntax <create_index> ::= CREATE INDEX ON table_name.col_name create_index::= CREATE INDEX ON table_name . col_name Semantics col_name Specify the name of the column. The name can be up to 128 bytes long and can contain only ASCII characters. The expression name is case insensitive and is stored in uppercase ASCII characters. If you specify the expression name as a quoted identifier, then the quotation marks are silently ignored. table_name Name of table on which Sadas will create the expression. The name can be up to 128 bytes long and can contain only ASCII characters. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. Examples CREATE INDEX ON PRODUCT.COLORPR © 2014 Advanced Systems srl SQL STATEMENTS 9.16 199 CREATE SYNONYM Purpose Use the CREATE SYNONYM statement to create a synonym, which is an alternative name for a table of another schema. Synonyms provide both data independence and location transparency. Synonyms permit applications to function without modification regardless of which user owns the table and regardless of which database holds the table. You can refer to synonyms only in the SELECT DML statements. You cannot create a synonym of a table of the current database. You cannot create a synonym of a view. You cannot use a synonym creating a view. You cannot create a synonym of a synonym. Prerequisites To create a synonym you must be a SYSDBA. Syntax <create_synonym> schema.table_name create_synonym::= Semantics OR REPLACE © 2014 Advanced Systems srl ::= CREATE [OR REPLACE] [PUBLIC] synonym_name FOR SQL STATEMENTS 200 Specify OR REPLACE to re-create the synonym if it already exists. You can use this clause to change the definition of an existing synonym without first dropping it. PUBLIC Actually PUBLIC clause has not effect. All synonyms are publics. synonym_name Specify the name of the synonym to be created. The name can be up to 128 bytes long and can contain only ASCII characters. The synonym name is case insensitive and is stored in uppercase ASCII characters. If you specify the synonym name as a quoted identifier, then the quotation marks are silently ignored. schema Specify the schema to contain the table. If you omit schema, then the Sadas creates the table in current database. This specification is a redundancy, because in Sadas you can create table in a database only if you are connected to that database. This redundancy is accepted for compatibility with scripts of third parties. table_name Specify the name of the table to be created. The name can be up to 128 bytes long and can contain only ASCII characters. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. Example CREATE SYNONYM MY_LINEITEM FOR TPCH.LINEITEM 9.17 CREATE TABLE Purpose Use the CREATE TABLE statement to create a relational table, which is the basic structure to hold user data. © 2014 Advanced Systems srl SQL STATEMENTS 201 Tables are created with no data (loaded with 0 records) unless a subquery is specified. You can add rows to a table only with the LOAD processes. After creating a table, you can define additional columns and integrity constraints with the ADD clause of the ALTER TABLE statement. You can change the definition of an existing column or partition with the MODIFY clause of the ALTER TABLE statement. These changes will be effective only after e new LOAD process. Prerequisites To create a relational table in a database, you must have the CATALOG system privilege on that database. In order to create a primary or foreign key constraint, you must have the CATALOG privileges necessary to create an index on the table. Syntax <create_table> ::= CREATE [GLOBAL TEMPORARY] TABLE table_name '(' <column_definition> ')' <create_table> ::= CREATE [GLOBAL TEMPORARY] TABLE table_name AS '(' <select_statement> ')' create_table::= GLOBAL CREATE © 2014 Advanced Systems srl TEMPORARY TABLE SQL STATEMENTS relational_table::= relational_properties::= column_definition::= Semantics © 2014 Advanced Systems srl 202 SQL STATEMENTS 203 relational_table Specifications of the table. GLOBAL TEMPORARY Specify GLOBAL TEMPORARY to indicate that the table is temporary and that its definition is visible to all sessions with appropriate privileges. When you first create a temporary table, its table metadata is stored in the data dictionary, but no space is allocated for table data. Space is allocated for the table segment at the time of the loading process for the table. The temporary table definitions will be maintained in the same way as the definitions of regular tables until when a drop operation is performed by the user. schema Specify the schema to contain the table. If you omit schema, then the Sadas creates the table in current database. This specification is a redundancy, because in Sadas you can create table in a database only if you are connected to that database. This redundancy is accepted for compatibility with scripts of third parties. table_name Specify the name of the table to be created. The name can be up to 128 bytes long and can contain only ASCII characters. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. relational_properties The relational properties describe the components of a relational table. column_definition The column_definition lets you define the characteristics of the column. column Specify the name of a column of the table. The name can be up to 128 bytes long and can contain only ASCII characters. The column name is case insensitive and is stored in uppercase © 2014 Advanced Systems srl SQL STATEMENTS 204 ASCII characters. If you specify the column name as a quoted identifier, then the quotation marks are silently ignored. If you also specify AS subquery, then you must omit column and datatype. datatype Specify the datatype of a column. Examples CREATE TABLE LINEITEM ( L_ORDERKEY INTEGER (10) FOREIGN KEY REFERENCES ORDERS(O_ORDERKEY), L_PARTKEY INTEGER (10) FOREIGN KEY REFERENCES PART(P_PARTKEY), L_SUPPKEY INTEGER (10) FOREIGN KEY REFERENCES SUPPLIER(S_SUPPKEY), L_LINENUMBER INTEGER (10), L_QUANTITY INTEGER (12), L_EXTENDEDPRICE DOUBLE PRECISION (12,2), L_DISCOUNT DOUBLE PRECISION (12,2), L_TAX DOUBLE PRECISION (12,2), L_RETURNFLAG CHAR (1), L_LINESTATUS CHAR (1), L_SHIPDATE DATE , L_COMMITDATE DATE , L_RECEIPTDATE DATE , L_SHIPINSTRUCT CHAR (25), L_SHIPMODE CHAR (10), L_COMMENT CHAR (44), L_PARTSUPPKEY CHAR (20) FOREIGN KEY REFERENCES PARTSUPP(PS_PARTSUPPKEY) ) CREATE TABLE SMART_LINEITEM AS (SELECT * FROM LINEITEM WHERE L_QUANTITY = 50) 9.18 CREATE USER Purpose Use the CREATE USER statement to create a database user, which is an account through which you can log in to the database, and to define the domain to which the user will be associated. © 2014 Advanced Systems srl SQL STATEMENTS 205 With this statement you can only create the user, but not grant any privileges; so Sadas will initially create the user without privileges. The default administrator user is SYSDBA. You can specify the characteristics of the password: expired or life time (days). Prerequisites You must have the SECURITY system privilege on database. Each database has own set of users. To create a user on database, you must be connected to that database. When you create a user with the CREATE USER statement, the user's privilege domain is empty. For add, edit and delete a privilege see the GRANT and REVOKE chapters. Syntax <create_user> ::= CREATE USER user_name [ '@' domain_name ] [ PASSWORD EXPIRE | PASSWORD_LIFE_TIME [ DEFAULT | days | UNLIMITED ] ] create_user::= PASSWORD EXPIRE DEFAULT PASSWORD_LIFE_TIME days UNLIMITED © 2014 Advanced Systems srl SQL STATEMENTS 206 Semantics user_name Specify the name of the user to be created. The name can be up to 128 bytes long and can contain only ASCII characters. The user name is case insensitive and is stored in uppercase ASCII characters. If you specify the user name as a quoted identifier, then the quotation marks are silently ignored. domain_name Specify the name of the domain of user. The name can be up to 128 bytes long and can contain only ASCII characters. The domain name is case insensitive and is stored in uppercase ASCII characters. days Specify the life time of the password in days. Example CREATE USER DEMO_USR CREATE USER DEMO_USR@ADVSYS CREATE USER DEMO_USR PASSWORD EXPIRE CREATE USER DEMO_USR PASSWORD_LIFE_TIME 365 9.19 CREATE VIEW Purpose Use the CREATE VIEW statement to define a view, which is a logical table based on one or more tables or views. The tables upon which a view is based are called base tables. In Sadas a view always contains data itself, and when the base tables are modified through a load process all the views linked to the reloaded tables are recalculated. Prerequisites © 2014 Advanced Systems srl SQL STATEMENTS 207 To create a view in a database, you must have the CATALOG system privilege on the database. Syntax <create_view> ::=CREATE [OR REPLACE] [MATERIALIZED] VIEW view_name AS '(' <select_statement> ')' create_view::= Semantics OR REPLACE Specify OR REPLACE to re-create the view if it already exists. You can use this clause to change the definition of an existing view. The view is recalculated. schema Specify the schema to contain the view. If you omit schema, then Sadas will create the view in current database. This specification is a redundancy, because in Sadas you can create a view in a database only if you are connected to that database, but this redundancy is accepted for compatibility with scripts of third parties. view_name Specify the name of the view. Example © 2014 Advanced Systems srl SQL STATEMENTS 208 CREATE VIEW PROVA AS SELECT * FROM NATION CREATE OR REPLACE MATERIALIZED VIEW PROVA AS SELECT * FROM NATION 9.20 DEACTIVATE DATABASE Purpose Use the DEACTIVATE DATABASE statement to empty an entire database/schema. Sadas will erase data of all tables and set their status to " unloaded". The tables in state " unloaded" are not operative for inquiry. Prerequisites Only SYSDBA user can use the DEACTIVATE DATABASE statement. Syntax <deactivate_database> ::= DEACTIVATE DATABASE db_name deactivate_database::= DEACTIVATE DATABASE db_name Semantics db_name Name of schema/database to be truncated. The name can be up to 128 bytes long and can contain only ASCII characters. The database name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. Examples DEACTIVATE DATABASE TPCH; © 2014 Advanced Systems srl SQL STATEMENTS 9.21 209 DEACTIVATE TABLE Purpose Use the DEACTIVATE TABLE statement to empty a table in current database/schema. Sadas will erase data of table and will set its status to " loaded with 0 records". The table in state " unloaded" is not operative for inquiry. Prerequisites You must have the LOAD privilege on a table in order to deactivate it. Syntax <deactivate_table> ::= DEACTIVATE TABLE table_name deactivate_table::= DEACTIVATE TABLE table_name Semantics table_name Name of table to be truncated. The name can be up to 128 bytes long and can contain only ASCII characters. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. Examples DEACTIVATE TABLE LINEITEM; 9.22 DELETE STORED QUERIES Purpose In SADAS you can memorize the results of events (query or filter) that are accessing a database, in order to improve processing for potential future requests using same parameters. Specifically, © 2014 Advanced Systems srl SQL STATEMENTS 210 you can memorize the results of a complete query or only of its where clause. These functions can be activated through the Sadas start server parameters. The stored queries refer to database level . Information saved by Sadas include: the original query source; the result (query or filter); the number of times memorized results have been subsequently used; the date of usage of query result. . Use the DELETE STORED QUERIES statement to remove Unused results; All results; Unused results and related queries; All results and related queries; Prerequisites The DELETE STORED QUERIES function requires the LOAD privilege on the database. Syntax <delete_stored_queries> ::= DELETE STORED QUERIES [ALL] [ '<' <times> | '<' <date> | '=' <hash>] delete_stored_queries::= = hash < date < times ALL DELETE © 2014 Advanced Systems srl STORED QUERIES SQL STATEMENTS 211 Semantics ALL If you specify ALL, Sadas will delete base queries and results. If you do not specify ALL, Sadas will delete only results times Specify the number of times that a single stored query result has been used. If you specify < times, Sadas will delete results (and base queries if you have specified ALL) being used less than specified number. date Specify the date that a single stored query result has been used. If you specify < date, Sadas will delete results (and base queries if you have specified ALL) being used before than specified date. hash Specify the hash code of a single stored query result. If you specify = hash, Sadas will delete results (and base queries if you have specified ALL) of the query that have this hash code. Examples DELETE STORED QUERIES; DELETE STORED QUERIES < 50; DELETE STORED QUERIES = 507392927629; 9.23 DELETE TABLE Purpose Use the DELETE statement to remove rows from a table. If you specify the CASCADE clause, Sadas delete records from all tables having a corresponding foreign key. © 2014 Advanced Systems srl SQL STATEMENTS 212 Since this is a load process, Sadas will wait for the end of all queries running and then will start the DELETE TABLE process. While executing this process, Sadas stops all others requests. Prerequisites This function requires that the table belongs to the schema/database currently connected and that user has the LOAD privilege on the table. Syntax <delete_table>::= DELETE [FROM] table_name [ WHERE <conditions> ] [ CASCADE ] delete_table::= Semantics schema Specify the schema/database containing the table. If you omit schema, then Sadas assumes the table is in the schema/database currently connected. table_name Specify the name of a table from which the rows are to be deleted. The name can be up to 128 bytes long and can contain only ASCII characters. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. © 2014 Advanced Systems srl SQL STATEMENTS 213 where_clause Use the where_clause to delete only rows that satisfy the conditions. The conditions can reference the table from which you are deleting and can contain a scalar subquery. If you omit the where_clause, then Sadas deletes all rows of the table. Examples DELETE LINEITEM; DELETE FROM LINEITEM WHERE L_QUANTITY=50; 9.24 DELETE KEYS Purpose Use the DELETE KEYS statement to remove rows from a table corresponding to a list of primary keys. If you specify the CASCADE clause, Sadas delete records from all tables having a corresponding foreign key. Sadas loads the list of primary keys from an input file. If you don’t specify this file, Sadas loads it from catalog CTL. The format of keys must be specified on catalog CTL. Since this is a load process, Sadas will wait for the end of all queries running and then will start the DELETE KEYS process. While executing this process, Sadas stops all others requests. Prerequisites This function requires that the table belongs to the schema/database currently connected and that user has the LOAD privilege on the table. Syntax <delete_keys>::= delete_keys::= © 2014 Advanced Systems srl DELETE KEYS FROM table_name ['@' file_name] [CASCADE] SQL STATEMENTS 214 Semantics schema Specify the schema/database containing the table. If you omit schema, then Sadas assumes the table is in the schema/database currently connected. table_name Specify the name of a table from which the rows are to be deleted. The name can be up to 128 bytes long and can contain only ASCII characters. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. file_name Specify the name of the input file. The file name must be complete, with absolute path. Examples DELETE KEYS FROM LINEITEM; DELETE KEYS FROM LINEITEM CASCADE; DELETE KEYS FROM LINEITEM@C:\KeysList.txt; DELETE KEYS FROM LINEITEM@C:\KeysList.txt CASCADE; © 2014 Advanced Systems srl SQL STATEMENTS 9.25 215 DESCRIBE TABLE Purpose Use the DESCRIBE TABLE statement to obtain following table information: Catalog structure of the table. Statistics (if the table has been loaded with more than 0 records). Shadow table. The catalog structure of the table is the result of the CREATE TABLE statement. The table statistics are automatically calculated by Sadas Loader. When the structure of a loaded table is modified the changes to the table are not immediately available, but Sadas creates a copy of catalog structure of the table (shadow table) or view or synonym: this allows to query the table with the old data (consistent with old table structure) and, on new loading process, the shadow table will substitute the catalog structure of the table. If the structure of a table does not change, the shadow table will not exist. Prerequisites To see the structure of a table, you must have the DESC privilege on that table. Syntax <describe> ::= table_name) describe_table::= © 2014 Advanced Systems srl DESC [ | DESCR | DESCRIBE] [SHADOW | INFO] table_name (, SQL STATEMENTS 216 Semantics SHADOW Use SHADOW to see shadow table structure, if existing. INFO Use INFO to see the statistic information of a table, if table has been loaded (more than 0 records) table_name Specify the name of a table for which information is required. The name can be up to 128 bytes long and can contain only ASCII characters. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. Examples DESC ORDERS; DESC SHADOW LINEITEM; DESC LINEITEM,ORDERS; For each field of each table selected Sadas displays: [Table, Identifier, Name, Type, Length, Decimals, Key, External Key, External Key, Prg, External Table, External Field, Modify Field, Virtual Field, Default Value, Comment] © 2014 Advanced Systems srl SQL STATEMENTS 217 DESC INFO ORDERS; DESC INFO LINEITEM,ORDERS; For each field of each table selected Sadas displays: [Table, ID Name, Name, Type, Length, Minimum, Maximum, Average, Min String, Max String, Distinct values, Sum, Field State, Variance, Deviance, Error Log, Index, Compressed] 9.26 DESCRIBE STORED QUERIES Purpose Use the DESCRIBE STORED QUERIES statement to obtain the list of query with memorized result. This list will also provide statistics on the subsequent use of stored results for each query. Prerequisites To see the list of query with memorized result, you must have the DESC privilege on schema/ database. Syntax <describe> ::= DESC [ | DESCR | DESCRIBE] STORED QUERIES ['<'|'>' <times>|<date>] describe_stored_queries::= < date < times > date > times DESC DESCR STORED QUERIES DESCRIBE © 2014 Advanced Systems srl SQL STATEMENTS 218 Semantics times Specify the number of times that a single stored query result has been used. If you specify < times, Sadas will show queries used less than specified number. date Specify the date that a single stored query result has been used. If you specify < date, Sadas will show queries used before than specified date. Example DESC STORED QUERIES; Sadas displays: [Hash, Runs, Max Elapsed, First Run, Last Run] 9.27 DESCRIBE SYSALLCOLUMNS Purpose Use the DESCRIBE SYSALLCOLUMNS statement to obtain the list of all columns of all tables created in the current schema/database. Prerequisites This function requires the DESC privilege on schema/database. Syntax <describe> ::= DESC [ | DESCR | DESCRIBE] SYSALLCOLUMNS describe_sysalcolumns::= © 2014 Advanced Systems srl SQL STATEMENTS 219 DESC DESCR SYSALLCOLUMNS DESCRIBE Examples DESC SYSALLCOLUMNS; For each column, Sadas displays: [Table, Identifier, Name, Type, Length, Decimals, Key, External Key, External Key Prg, External Table, External Field, Modify Field, Virtual Field, Default Value, Comment] 9.28 DESCRIBE SYSDB Purpose Use the DESCRIBE SYSDB statement to obtain the details of creation and usage of each database installed on a Sadas server. Prerequisites This function requires the access to the Sadas server through the SYSDBA userid. Syntax <describe> ::= describe_sysdb::= © 2014 Advanced Systems srl DESC [ | DESCR | DESCRIBE] SYSDB SQL STATEMENTS 220 Examples DESC SYSDB; For each installed database Sadas displays: [Identifier, Name, Creation Date, Creation Time, Last User, Last Client, Connection, Queries, Last Date, Last Time, First Date, First Time, File Path] 9.29 DESCRIBE SYSDOMAINS Purpose Use the DESCRIBE SYSDOMAINS statement to obtain the list of defined domains for a database on a Sadas server. Prerequisites This function requires the access to the Sadas server through the SYSDBA userid. Syntax <describe> ::= DESC [ | DESCR | DESCRIBE] SYSDOMAINS describe_sysdomains::= Examples DESC SYSDOMAINS; © 2014 Advanced Systems srl SQL STATEMENTS 221 For each domain, Sadas displays: [Domain, Id] 9.30 DESCRIBE SYSFOREIGNKEYS Purpose Use the DESCRIBE SYSFOREIGNKEYS statement to obtain the list of all defined foreign keys in current schema/database. Prerequisites Syntax <describe> ::= DESC [ | DESCR | DESCRIBE] SYSFOREIGNKEYS describe_sysforeingkeys::= Examples DESC SYSFOREIGNKEYS; Sadas displays: [Table, Field, Link Table, Foreign Key] 9.31 DESCRIBE SYSKEYS Purpose Use the DESCRIBE SYSKEYS statement to obtain the list of all defined primary keys in current © 2014 Advanced Systems srl SQL STATEMENTS 222 schema/database. Prerequisites This function requires the DESC privilege on schema/database. Syntax <describe> ::= DESC [ | DESCR | DESCRIBE] SYSKEYS describe_syskeys::= Examples DESC SYSKEYS; Sadas displays: [Table, Fieldnum, Key] 9.32 DESCRIBE SYSLOG Purpose Use the DESCRIBE SYSLOG statement to obtain the list of all queries that the Sadas server has executed since initial start. Prerequisites © 2014 Advanced Systems srl SQL STATEMENTS 223 This function requires the DESC privilege on schema/database. Syntax <describe> ::= DESC [ | DESCR | DESCRIBE] SYSLOG describe_syslog::= Examples DESC SYSLOG; For each query executed, Sadas displays: [Date, Time, IP Address, User, Database, Elapsed, Hash, SQL, Client] 9.33 DESCRIBE SYSOBJECTS Purpose Use the DESCRIBE SYSOBJECTS statement to obtain the list of all objects (tables and views) created in the current schema/database. Prerequisites This function requires the DESC privilege on schema/database. Syntax <describe> © 2014 Advanced Systems srl ::= DESC [ | DESCR | DESCRIBE] SYSOBJECTS SQL STATEMENTS 224 describe_sysobjects::= Examples DESC SYSOBJECTS; For each object, Sadas displays: [Identifier, Name, State, Creation Date, Change Date, Flag Shadow, Id Shadow, Loading Date, Loading Time, Author, Records, Loading Elapsed Time, Input Type, Loading Type, Source File, Alias, Record Length, Delimiter, Input File Date, Input File Time, Errors, Records not read, Duplicate Keys, Last Loading Type, Temporary, From Select, View, Materialized, Processed Records, File Path, Text Qualifier, Comment, Compatible Server, Synonym, Synonym DataBase Source, Synonym Table Source] 9.34 DESCRIBE SYSSYNONYMS Purpose Use the DESCRIBE SYSSYNONYMS statement to obtain the list of all synonyms created in the current schema/database. Prerequisites This function requires the DESC privilege on schema/database. Syntax <describe> © 2014 Advanced Systems srl ::= DESC [ | DESCR | DESCRIBE] SYSSYNONYMS SQL STATEMENTS 225 describe_syssynonyms::= DESC DESCR SYSSYNONYMS DESCRIBE Examples DESC SYSSYNONYMS; For each synonym, Sadas displays: [Identifier, Name, State, Creation Date, Change Date, Flag Shadow, Id Shadow, Loading Date, Loading Time, Author, Records, Loading Elapsed Time, Input Type, Loading Type, Source File, Alias, Record Length, Delimiter, Input File Date, Input File Time, Errors, Records not read, Duplicate Keys, Last Loading Type, Temporary, From Select, View, Materialized, Processed Records, File Path, Text Qualifier, Comment, Compatible Server, Synonym, Synonym DataBase Source, Synonym Table Source] 9.35 DESCRIBE SYSTABLES Purpose Use the DESCRIBE SYSTABLES statement to obtain the list of all tables created in the current schema/database. Prerequisites This function requires the DESC privilege on schema/database. Syntax <describe> ::= DESC [ | DESCR | DESCRIBE] SYSTABLES describe_systables::= © 2014 Advanced Systems srl SQL STATEMENTS 226 Examples DESC SYSTABLES; For each table, Sadas displays: [Identifier, Name, State, Creation Date, Change Date, Flag Shadow, Id Shadow, Loading Date, Loading Time, Author, Records, Loading Elapsed Time, Input Type, Loading Type, Source File, Alias, Record Length, Delimiter, Input File Date, Input File Time, Errors, Records not read, Duplicate Keys, Last Loading Type, Temporary, From Select, View, Materialized, Processed Records, File Path, Text Qualifier, Comment, Compatible Server, Synonym, Synonym DataBase Source, Synonym Table Source] 9.36 DESCRIBE SYSUSERS Purpose Use the DESCRIBE SYSUSERS statement to obtain the list of all users created in the current schema/database. If you specify the domain_name, you obtain the list of users belonging to the specified domain. Prerequisites This function requires the DESC privilege on schema/database. Syntax <describe> © 2014 Advanced Systems srl ::= DESC [ | DESCR | DESCRIBE] SYSUSERS [ @ domain_name] SQL STATEMENTS 227 describe_sysusers::= Semantics domain_name Specify the name of the domain. Examples DESC SYSUSERS; For each user, Sadas displays: [Name, Description, Role, Creation Date, Change Date, Expiration Date, Pwd Expiration Date, Pwd Life Time] 9.37 DESCRIBE SYSVIEWS Purpose Use the DESCRIBE SYSVIEWS statement to obtain the list of all views created in the current schema/database. Prerequisites This function requires the DESC privilege on schema/database. Syntax <describe> ::= DESC [ | DESCR | DESCRIBE] SYSVIEWS describe_sysviews::= © 2014 Advanced Systems srl SQL STATEMENTS 228 Examples DESC SYSVIEWS; For each view, Sadas displays: [Identifier, Name, State, Creation Date, Change Date, Flag Shadow, Id Shadow, Loading Date, Loading Time, Author, Records, Loading Elapsed Time, Input Type, Loading Type, Source File, Alias, Record Length, Delimiter, Input File Date, Input File Time, Errors, Records not read, Duplicate Keys, Last Loading Type, Temporary, From Select, View, Materialized, Processed Records, File Path, Text Qualifier, Comment, Compatible Server, Synonym, Synonym DataBase Source, Synonym Table Source] 9.38 DESCRIBE USER Purpose Use the DESCRIBE USER statement to obtain the details of the user’s privileges for each table of current schema/database. Prerequisites This function requires the DESC privilege on schema/database. Syntax <describe> ::= describe_user::= © 2014 Advanced Systems srl DESC [ | DESCR | DESCRIBE] USER user_name SQL STATEMENTS 229 Semantics user_name Specify the name of the user.. Examples DESC USER smith; Sadas displays: [Name, Table, Rule, Creation Date, Change Date, Expiration Date, Conditions] 9.39 DISABLE INDEXGBY Purpose Sadas uses two base algorithms for grouping queries: static hash group by (with use of indexes) and sort group by. Use the DISABLE INDEXGBY statement to disable use of indexes in group by queries. This is a functionality for performance tests. The Sadas server will usually start all databases with indexes enabled by default. Prerequisites The DISABLE INDEXGBY statement is allowed only to SYSDBA user. Syntax <disable_index> © 2014 Advanced Systems srl ::= DISABLE INDEXGBY SQL STATEMENTS 230 disable_indexgby::= Examples DISABLE INDEXGBY; 9.40 DISCONNECT Purpose Use the DISCONNECT command to end the current session and to disconnect from the current database. Syntax <disconnect> ::= DISCONNECT | DISC disconnect::= Examples DISCONNECT; 9.41 DROP DATABASE Purpose Use the DROP DATABASE statement to drop a database (in Sadas database and schema have the same meaning). When dropping a database, you definitively eliminate all data loaded and all © 2014 Advanced Systems srl SQL STATEMENTS 231 catalog informations. This statement is useful when you want to drop a test database or drop an old database after successful migration to a new host. Prerequisites Only SYSDBA user can drop a database. Syntax <drop_database> ::= DROP DATABASE db_name drop_database::= Semantics db_name Specify the name of the database to drop. The database name is case insensitive and is stored in uppercase ASCII characters. If you specify the database name as a quoted identifier, then the quotation marks are silently ignored. Examples DROP DATABASE DB_DEMO; 9.42 DROP DOMAIN Purpose Use the DROP DOMAIN statement to remove a domain of users. Prerequisites Only SYSDBA user can drop a domain of users. Syntax <drop_domain> © 2014 Advanced Systems srl ::= DROP USER domain_name SQL STATEMENTS 232 drop_domain::= DROP DOMAIN domain_name Semantics domain_name Specify the name of the domain. The domain name is case insensitive and is stored in uppercase ASCII characters. Examples DROP DOMAIN DEMO_DOMAIN; 9.43 DROP EXPRESSION Purpose Use the DROP EXPRESSION statement to drop an expression in a table or in all tables of database. Prerequisites To drop an expression on a table, you must have the CATALOG system privilege on the database. Syntax <drop_expression> ::=DROP EXPRESSION expr_name ON [ TABLE table_name | ALL ] drop_expression::= table_name TABLE DROP EXPRESSION expr_name ON ALL Semantics © 2014 Advanced Systems srl SQL STATEMENTS 233 expr_name Specify the name of the expression. The name can be up to 128 bytes long and can contain only ASCII characters. The expression name is case insensitive and is stored in uppercase ASCII characters. If you specify the expression name as a quoted identifier, then the quotation marks are silently ignored. table_name Name of table on which Sadas will create the expression. The name can be up to 128 bytes long and can contain only ASCII characters. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. ALL Specify ALL if you want to drop expr_name in all tables of current database. Example DROP EXPRESSION MYEXPR ON TABLE SUPPLIER DROP EXPRESSION MYEXPR ON ALL 9.44 DROP EXPRESSIONS Purpose Use the DROP EXPRESSIONS statement to drop all expressions in a table or in a database. Prerequisites To drop expressions on a table or on a database, you must have the CATALOG system privilege on the database. Syntax <drop_expressions> drop_expressions::= © 2014 Advanced Systems srl ::=DROP EXPRESSIONS ON [ TABLE table_name | ALL ] SQL STATEMENTS 234 table_name TABLE DROP EXPRESSIONS ON ALL Semantics table_name Name of table on which Sadas will create the expression. The name can be up to 128 bytes long and can contain only ASCII characters. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. ALL Specify ALL if you want to drop expr_name in all tables of current database. Example DROP EXPRESSIONS ON TABLE SUPPLIER DROP EXPRESSIONS ON ALL 9.45 DROP GENERATED COLUMNS Purpose Use the DROP GENERATED COLUMNS statement to drop fields generated automatically by Sadas. Sadas generates automatically fields fo: - multiple join, when join-keys are composed by more than one field; - join with expression, when join-keys are composed by expressions. Prerequisites To drop generated columns on a table or on a database, you must have the CATALOG system privilege on the database. Syntax © 2014 Advanced Systems srl SQL STATEMENTS 235 <drop_generated_columns> ::=DROP GENERATED COLUMNS ON [ TABLE table_name | ALL ] drop_generated_columns::= table_name TABLE DROP GENERATED COLUMNS ON ALL Semantics table_name Name of table on which Sadas will create the expression. The name can be up to 128 bytes long and can contain only ASCII characters. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. ALL Specify ALL if you want to drop expr_name in all tables of current database. Example DROP GENERATED COLUMNS ON TABLE SUPPLIER DROP GENERATED COLUMNS ON ALL 9.46 DROP INDEX Purpose Use the DROP INDEX statement to drop an index on a column of a table. Prerequisites To drop an index on a column of a table, you must have the CATALOG system privilege on the database. Syntax © 2014 Advanced Systems srl SQL STATEMENTS <drop_index> 236 ::= DROP INDEX table_name.col_name drop_index::= DROP table_name INDEX . col_name Semantics col_name Specify the name of the column. The name can be up to 128 bytes long and can contain only ASCII characters. The expression name is case insensitive and is stored in uppercase ASCII characters. If you specify the expression name as a quoted identifier, then the quotation marks are silently ignored. table_name Name of table on which Sadas will create the expression. The name can be up to 128 bytes long and can contain only ASCII characters. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. Examples DROP INDEX PRODUCT.COLORPR 9.47 DROP SYNONYM Purpose Use the DROP SYNONYM statement to remove a synonym from the database or to change the definition of a synonym by dropping and re-creating it. Prerequisites To drop a synonym you must be a SYSDBA. Syntax <drop_synonym> © 2014 Advanced Systems srl ::= DROP SYNONYM synonym SQL STATEMENTS 237 drop_synonym::= Semantics synonym Specify the name of the synonym to drop. The synonym name is case insensitive and is stored in uppercase ASCII characters. If you specify the synonym name as a quoted identifier, then the quotation marks are silently ignored. Examples DROP SYNONYM SYNONYM_DEMO; 9.48 DROP TABLE Purpose Use the DROP TABLE statement to definitively remove the table and all its data from the database . Prerequisites The table must be in current schema/database and you must have the CATALOG system privilege. Syntax <drop_table> drop_table::= © 2014 Advanced Systems srl ::= DROP TABLE table SQL STATEMENTS 238 Semantics table Specify the name of the table to drop. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. Examples DROP TABLE TABLE_DEMO; 9.49 DROP USER Purpose Use the DROP USER statement to remove a database user. Prerequisites The user must be in current schema/database and you must have the SECURITY system privilege. Syntax <drop_user> ::= DROP USER user drop_user::= Semantics user Specify the name of the user. The user name is case insensitive and is stored in uppercase ASCII characters. If you specify the user name as a quoted identifier, then the quotation marks © 2014 Advanced Systems srl SQL STATEMENTS 239 are silently ignored. Examples DROP USER SMITH; 9.50 DROP VIEW Purpose Use the DROP VIEW statement to definitively remove a view and all its data from the database . In Sadas a view always has its own data. Prerequisites The view must be in current schema/database and you must have the CATALOG system privilege. Syntax <drop_view> ::= DROP VIEW view drop_view::= Semantics view Specify the name of the view. The view name is case insensitive and is stored in uppercase ASCII characters. If you specify the view name as a quoted identifier, then the quotation marks are silently ignored. Examples DROP VIEW VIEW_DEMO; © 2014 Advanced Systems srl SQL STATEMENTS 9.51 240 DUPLICATE DATABASE Purpose Use the DUPLICATE DATABASE statement to duplicate an entire database structure, without reloading existing data. For the new database you can specify the database storage path, i.e. the path of database data. For the new database you can also specify the internal db_ID, which is an internal parameter used by Sadas as: unique key which identify the database on a Sadas server; sub-path name of catalog information in the system catalog path; sub-path name of data information in the database storage path. Prerequisites Only SYSDBA user can duplicate a database. Syntax <duplicate_database>::=DUPLICATE DATABASE db_name TO new_db_name [':' new_db_Id] ['@' storage_path ] duplicate_database::= Semantics db_name Specify the name of the database to be duplicated. The database name is case insensitive and is stored in uppercase ASCII characters. If you specify the database name as a quoted identifier, then the quotation marks are silently ignored. new_db_name © 2014 Advanced Systems srl SQL STATEMENTS 241 Specify the name of the new database to be created. The new database name is case insensitive and is stored in uppercase ASCII characters. If you specify the database name as a quoted identifier, then the quotation marks are silently ignored. new_db_Id Specify the internal db_Id of the new database duplicated. The internal db_Id must have fixed length of 10 bytes. The db_Id is case insensitive and is stored in uppercase ASCII characters. If you specify the database id as a quoted identifier, then the quotation marks are silently ignored. storage_path Specify the storage path of the new database duplicated. If the specified path does not exist, Sadas will create it. The storage path refers to the data files of the database, while the catalog files are written in the System Catalog Path. The storage path can be also a shared network drive. Examples DUPLICATE DATABASE DBSAMPLE TO DBSAMPLE2; DUPLICATE DATABASE DBSAMPLE TO DBSAMPLE2:DBSAMPLE00; DUPLICATE DATABASE DBSAMPLE TO DBSAMPLE2@C:\_TEMP; DUPLICATE DATABASE DBSAMPLE TO DBSAMPLE2:DBSAMPLE00@C:\_TEMP; 9.52 DUPLICATE TABLE Purpose Use the DUPLICATE TABLE statement to duplicate a table structure without reloading existing data. Prerequisites The table must be in current schema/database and you must have the CATALOG system privilege. Syntax <duplicate_table> © 2014 Advanced Systems srl ::= DUPLICATE TABLE table_name TO new_table_name SQL STATEMENTS 242 ['@' storage_path ] duplicate_table::= @ storage_path Semantics table_name Specify the name of the table to be duplicated. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. new_table_name Specify the name of the new table to be created. The new table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. storage_path Specify the storage path of the new table duplicated. If the specified path does not exist, Sadas will create it. The storage path refers to the data files of the table, while the catalog files are written in the System Catalog Path. The storage path can be also a shared network drive. Examples DUPLICATE TABLE TBLDEMO TO NEWTBLDEMO; © 2014 Advanced Systems srl SQL STATEMENTS 9.53 243 DUPLICATE USER Purpose Use the DUPLICATE USER statement to duplicate a user. The new duplicated user inherits all privileges from parent user. Prerequisites You must have the SECURITY system privilege to duplicate a user. Syntax <duplicate_user> ::= DUPLICATE USER user_name TO new_user_name duplicate_user::= Semantics user_name Specify the name of the user to be duplicated. The user name is case insensitive and is stored in uppercase ASCII characters. If you specify the user name as a quoted identifier, then the quotation marks are silently ignored. new_user_name Specify the name of the new user to be created. The user name is case insensitive and is stored in uppercase ASCII characters. If you specify the user name as a quoted identifier, then the quotation marks are silently ignored. Examples DUPLICATE USER SMITH TO SMITHIE; 9.54 ENABLE INDEXGBY Purpose Sadas uses two base algorithms for grouping queries: static hash group by (with use of indexes) and sort group by. Use the ENABLE INDEXGBY statement to enable use of indexes in group by © 2014 Advanced Systems srl SQL STATEMENTS 244 queries if they had been previously disabled. This is a functionality for performance tests. The Sadas server will usually start all databases with indexes enabled by default. Prerequisites The ENABLE INDEXGBY statement is allowed only to SYSDBA user. Syntax <enable_index> ::= ENABLE INDEXGBY enable_indexgby::= Examples ENABLE INDEXGBY; 9.55 EXECUTE STORED QUERIES Purpose Use the EXECUTE STORED QUERIES statement to re-execute the queries with memorized result. Sadas does not automatically recalculate these results, but you must use explicitly this command. In order to process only most frequently used or last queries, a minimum number of subsequent executions ro a date can optionally be defined for filtering the queries. Prerequisites To recalculate the queries with memorized result, you must have the LOAD privilege on schema/database. Syntax <execute> © 2014 Advanced Systems srl ::= EXEC | EXECUTE STORED QUERIES [ '>' <times>| SQL STATEMENTS 245 <date> ] execute_stored_queries::= > times > date EXEC STORED QUERIES EXECUTE Examples EXECUTE STORED QUERIES; EXECUTE STORED QUERIES > 100; Sadas displays: [Refreshed requests, Elapsed time, Errors] 9.56 GRANT Purpose Use the GRANT statement to grant system and object privileges to users. You can specify ALL to grant all privileges on table to a user or to grant privileges on all tables of current schema/database to a user. Prerequisites To grant privileges to users you must have the SECURITY privilege on schema/database. Syntax <grant> ::= GRANT ALL | <privileges_list> ON ( table_name | ALL ) TO ( user_name | domain_name ) grant::= © 2014 Advanced Systems srl SQL STATEMENTS 246 ALL domain_name TO ON table_name user_name <privileges_list> ::= PR_SELECT | PR_DESCRIBE | PR_CATALOG | PR_LOAD | PR_SECURITY (',' PR_SELECT | PR_DESCRIBE | PR_CATALOG | PR_LOAD | PR_SECURITY ) privileges_list::= Semantics table_name Specify the name of the table for grant operation. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. user_name Specify the name of the user for grant operation. The user name is case insensitive and is stored in uppercase ASCII characters. If you specify the user name as a quoted identifier, then the quotation marks are silently ignored. privileges_list Specify the list of privileges to grant on the table (or entire database) to the user. © 2014 Advanced Systems srl SQL STATEMENTS 247 privilege Specify the privilege to grant on the table (or entire database) to the user. The list of privileges defined in Sadas is: [PR_SELECT, PR_DESCRIBE, PR_CATALOG, PR_LOAD, PR_SECURITY] Examples GRANT PR_SECURITY ON LINEITEM TO SMITH; GRANT PR_SECURITY ON ALL TO SMITH; GRANT ALL ON LINEITEM TO SMITH; GRANT ALL ON ALL TO SMITH; 9.57 INSERT Purpose Use the INSERT statement to insert records in a table in current database/schema using VALUES clause. You can send multiple INSERT commands, but you cannot see the inserted records until COMMIT statement; after COMMIT statement SADAS really insert records on all tables used by INSERT statement. If you don't want to insert records, you can use ROLLBACK statement: SADAS cancels all INSERT commands. Since this is a load process, Sadas will wait for the end of all queries running and then will start the INSERT TABLE process. While executing this process, Sadas stops all others requests. Sadas uses the APPEND loading type. If you don't specify column list, SADAS assumes list of columns of table as column list. Prerequisites To use the INSERT statement, you must have the LOAD privilege on schema/database. Syntax © 2014 Advanced Systems srl SQL STATEMENTS 248 <insert> ::= INSERT INTO table_name ['(' column_list ')'] VALUES '(' values_list ')' insert::= ( INSERT VALUES INTO table_name ( values_list column_list ) Semantics table_name Specify the name of the table for load operation. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. column_list The column_list lets you define the list columns interested by insert command. values_list The values_list lets you define the list of values to insert. Examples insert into ttime values (99,99,99,99,99) insert into ttime (timeidpk,year,month,week,day) values (99,99,99,99,99) 9.58 INSERT TABLE Purpose Use the INSERT TABLE statement to insert records in a table in current database/schema from an input file or from a sub-query. © 2014 Advanced Systems srl ) SQL STATEMENTS 249 Since this is a load process, Sadas will wait for the end of all queries running and then will start the INSERT TABLE process. While executing this process, Sadas stops all others requests. The input file structure must be consistent with CTL (Control Table Loader) specifics. If input file name is not specified Sadas will use the file specified in the CTL. If you specify DIRECT clause, Sadas will use memory buffer of file name area as a single record to load. If you specify ONLY clause, Sadas will load only n_rec records. If you specify SKIP clause, Sadas will skip first n_rec records. Sadas uses the APPEND loading type. Prerequisites To use the INSERT TABLE statement, you must have the LOAD privilege on schema/database. Syntax <insert_table1> ::= INSERT TABLE table_name ['@' file_name] [ DIRECT | ONLY n_rec | SKIP n_rec [ONLY n_rec] ] <insert_table2> ::= INSERT TABLE table_name FROM '('<SubQuery>')' insert_table1::= @ INSERT © 2014 Advanced Systems srl TABLE table_name file_name SQL STATEMENTS 250 insert_table2::= INSERT TABLE table_name FROM SubQuery Semantics table_name Specify the name of the table for load operation. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. file_name Specify the name of the input file. The file name must be complete, with absolute path. n_rec Number of records to skip or to append. subquery Specify the data that Sadas loads. For each subquery Sadas creates a temporary table, which will be deleted at the end of the query execution. Examples INSERT TABLE REGION; © 2014 Advanced Systems srl SQL STATEMENTS 251 INSERT TABLE REGION ONLY 100; INSERT TABLE REGION SKIP 30; INSERT TABLE REGION SKIP 30 ONLY 100; INSERT TABLE REGION @ REGION.TBL; INSERT TABLE REGION @ "0|AFRICA|special Tiresias about the furiously even dolphins are furi|" DIRECT; INSERT TABLE REGION FROM (SELECT * FROM REGION2); 9.59 INTERSECT Purpose Use the INTERSECT statement to intersect results of several queries. There are limits on fields on the select statements (sub-query): all corresponding fields must be of the same type; also numeric fields must be of the same type: if you have an INTEGER [FLOAT] field, all corresponding fields must be INTEGER [FLOAT]; if you have a code [pseudo-code] field, all corresponding fields must be of code [pseudo-code] type, with the same decode table. Prerequisites To use the INTERSECT statement, you must have the SELECT privilege on schema/database. Syntax <intersect>::=(<select_statement> | <parenthesis>) (INTERSECT (<select_statement > | <parenthesis>)) intersect::= © 2014 Advanced Systems srl SQL STATEMENTS < parenthesis > 252 ::= select_statement> -> ‘(’ | ‘)’ see ‘SELECT’ chapter Semantics select_statement Specify one of the statements for INTERSECT operation. For more details see the “SELECT” chapter. parenthesis The select statements can be optionally in parenthesis. Example SELECT N_NATIONKEY,N_NAME,N_REGIONKEY FROM NATION WHERE N_NATIONKEY > 10 INTERSECT SELECT N_NATIONKEY,N_NAME,N_REGIONKEY FROM NATION WHERE N_NATIONKEY < 15 N_NATIONKEY N_NAME N_REGIONKEY -------------------------------11 IRAQ 4 12 JAPAN 2 13 JORDAN 4 14 KENYA 0 © 2014 Advanced Systems srl SQL STATEMENTS 253 (SELECT N_NATIONKEY,N_NAME,N_REGIONKEY FROM NATION WHERE N_NATIONKEY > 10) INTERSECT (SELECT N_NATIONKEY,N_NAME,N_REGIONKEY FROM NATION WHERE N_NATIONKEY < 15) 9.60 LOAD COLUMNS Purpose Use the LOAD COLUMNS statement to reload only some columns of a table in current database/ schema from an input file. Since this is a load process, Sadas will wait for the end of all queries running and then will start the LOAD COLUMNS process. While executing this process, Sadas stops all others requests. To use this statement the base table must be already loaded. To reload a column in a table, you must have an input file according with CTL (Control Table Loader) specifics; if the input file name is not specified in the statement Sadas will use the file specified in the CTL. Prerequisites To use the LOAD COLUMNS statement, you must have the LOAD privilege on schema/database. Syntax <load_columns>::= LOAD COLUMN <column_list> ON table_name [ '@' file_name ] load_columns::= column_list::= © 2014 Advanced Systems srl SQL STATEMENTS 254 Semantics columns_list Specify the list of columns for reload operation. table_name Specify the name of the table for reload operation. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. file_name Specify the name of the input file. The file name must be complete, with absolute path. Examples LOAD COLUMN R_NAME ON REGION; LOAD COLUMN R_NAME, R_COMMENT ON REGION @ REGION.TBL; 9.61 LOAD DATABASE Purpose Use the LOAD DATABASE statement to load an entire database/schema. Since this is a load process, Sadas will wait for the end of all queries running and then will start the LOAD DATABASE process. While executing this process, Sadas stops all others requests. © 2014 Advanced Systems srl SQL STATEMENTS 255 Sadas uses the CTL (Control Table Loader) file of each table for this operation so correct specifications must have been previously defined into all CTL files. . Prerequisites Only SYSDBA user can use the LOAD DATABASE statement. Syntax <load_database> ::= LOAD DATABASE db_name load_database::= Semantics db_name Name of schema/database to load. The name can be up to 128 bytes long and can contain only ASCII characters. The database name is case insensitive and is stored in uppercase ASCII characters. If you specify the database name as a quoted identifier, then the quotation marks are silently ignored. Examples LOAD DATABASE TPCH; 9.62 LOAD TABLE Purpose Use the LOAD TABLE statement to load a table in current database/schema from an input file or from a sub-query. © 2014 Advanced Systems srl SQL STATEMENTS 256 Since this is a load process, Sadas will wait for the end of all queries running and then will start the LOAD TABLE process. While executing this process, Sadas stops all others requests. The input file structure must be consistent with CTL (Control Table Loader) specifics. If input file name is not specified Sadas will use the file specified in the CTL. If you specify DIRECT clause, Sadas will use memory buffer of file name area as a single record to load. If you specify ONLY clause, Sadas will load only n_rec records. If you specify SKIP clause, Sadas will skip first n_rec records. Sadas uses the loading type specified in the CTL: - REWRITE - APPEND - UPDATE Prerequisites To use the LOAD TABLE statement, you must have the LOAD privilege on schema/database. Syntax <load_table1> ::= LOAD TABLE table_name ['@' file_name] [ DIRECT | ONLY n_rec | SKIP n_rec [ONLY n_rec] ] <load_table2> load_table1::= © 2014 Advanced Systems srl ::= LOAD TABLE table_name FROM '('<SubQuery>')' SQL STATEMENTS 257 load_table2::= LOAD TABLE table_name FROM SubQuery Semantics table_name Specify the name of the table for load operation. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. file_name Specify the name of the input file. The file name must be complete, with absolute path. n_rec Number of records to skip or to append. subquery Specify the data that Sadas loads. For each subquery Sadas creates a temporary table, which will be deleted at the end of the query execution. Examples LOAD TABLE REGION; © 2014 Advanced Systems srl SQL STATEMENTS 258 LOAD TABLE REGION ONLY 100; LOAD TABLE REGION SKIP 30; LOAD TABLE REGION SKIP 30 ONLY 100; LOAD TABLE REGION @ REGION.TBL; LOAD TABLE REGION @ "0|AFRICA|special Tiresias about the furiously even dolphins are furi|" DIRECT; LOAD TABLE REGION FROM (SELECT * FROM REGION2); 9.63 LOCK TABLE Purpose Use the LOCK TABLE statement to lock a table of the current database. Table locked cannot read/write by other users. Prerequisites Only a SYSDBA can lock a table. Syntax <lock_table> ::= LOCK TABLE table_name lock_table::= LOCK TABLE table_name Semantics table_name Specify the name of the table for load operation. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. © 2014 Advanced Systems srl SQL STATEMENTS 259 Examples LOCK TABLE CUSTOMER; 9.64 LOCK USER Purpose Use the LOCK USER statement to lock a database user. User locked cannot login to the current database. Prerequisites The user must be in current schema/database and you must have the SECURITY system privilege. Syntax <lock_user> ::= LOCK USER user lock_user::= Semantics user Specify the name of the user. The user name is case insensitive and is stored in uppercase ASCII characters. If you specify the user name as a quoted identifier, then the quotation marks are silently ignored. Examples LOCK USER SMITH; © 2014 Advanced Systems srl SQL STATEMENTS 9.65 260 MINUS Purpose Use the MINUS statement to subtract the result of a query from another query result. If you have several queries the subtract operation is done from right to left. There are limits on fields of the select statements (sub-query): all corresponding fields must be of the same type; also numeric fields must be of the same type: if you have an INTEGER [FLOAT] field, all corresponding fields must be INTEGER [FLOAT]; if you have a code [pseudo-code] field, all corresponding fields must be of code [pseudo-code] type, with the same decode table. Prerequisites To use the MINUS statement, you must have the SELECT privilege on schema/database. Syntax <minus>::=(<select_statement> | <parenthesis>) <parenthesis>)) minus::= < parenthesis > © 2014 Advanced Systems srl ::= ‘(’ | ‘)’ (MINUS (<select_statement > | SQL STATEMENTS select_statement> -> 261 see ‘SELECT’ chapter Semantics select_statement Specify one of the statements for INTERSECT operation. For more details see the “SELECT” chapter. parenthesis The select statements can be optionally in parenthesis. Example SELECT N_NATIONKEY,N_NAME,N_REGIONKEY FROM NATION WHERE N_NATIONKEY <= 15 MINUS SELECT N_NATIONKEY,N_NAME,N_REGIONKEY FROM NATION WHERE N_NATIONKEY <= 10 N_NATIONKEY N_NAME N_REGIONKEY -------------------------------11 IRAQ 4 12 JAPAN 2 13 JORDAN 4 14 KENYA 0 (SELECT N_NATIONKEY,N_NAME,N_REGIONKEY FROM NATION WHERE N_NATIONKEY > 10) MINUS (SELECT N_NATIONKEY,N_NAME,N_REGIONKEY FROM NATION WHERE N_NATIONKEY < 15) 9.66 RENAME COLUMN Purpose © 2014 Advanced Systems srl SQL STATEMENTS 262 Use the RENAME COLUMN statement to rename a column in a table. Prerequisites The table containing the column must be in current schema/database and you must have the CATALOG system privilege. Syntax <rename_column> ::= RENAME COLUMN col_name TO new_col_name ON table_name rename_column::= RENAME col_name COLUMN ON TO new_col_name table_name Semantics col_name Specify the name of the column to rename. The column name is case insensitive and is stored in uppercase ASCII characters. If you specify the column name as a quoted identifier, then the quotation marks are silently ignored. new_col_name Specify the new name of the column to rename. The column name is case insensitive and is stored in uppercase ASCII characters. If you specify the column name as a quoted identifier, then the quotation marks are silently ignored. table_name Specify the name of the table that contains the column to rename. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. © 2014 Advanced Systems srl SQL STATEMENTS 263 Examples RENAME COLUMN COLORPR TO COLOR ON PRODUCT; 9.67 RENAME DATABASE Purpose Use the RENAME DATABASE statement to rename a database. For the new database you can also specify the internal db_ID, which is an internal parameter used by Sadas as: unique key which identify the database on a Sadas server; sub-path name of catalog information in the system catalog path; sub-path name of data information in the database storage path. Prerequisites Only SYSDBA user can rename a database. Syntax <rename_database> ::= RENAME DATABASE db_name TO new_db_name [':' new_db_Id] rename_database::= Semantics db_name Specify the name of the database to rename. The database name is case insensitive and is stored in uppercase ASCII characters. If you specify the database name as a quoted identifier, © 2014 Advanced Systems srl SQL STATEMENTS 264 then the quotation marks are silently ignored. new_db_name Specify the new name of the renamed database. The new database name is case insensitive and is stored in uppercase ASCII characters. If you specify the database name as a quoted identifier, then the quotation marks are silently ignored. new_db_Id Specify the internal db_Id of the new renamed database. The internal db_Id must have fixed length of 10 bytes. The db_Id is case insensitive and is stored in uppercase ASCII characters. If you specify the database name as a quoted identifier, then the quotation marks are silently ignored. Examples RENAME DATABASE DBSAMPLE TO DBSAMPLE2; RENAME DATABASE DBSAMPLE TO DBSAMPLE2:DBSAMPLE00; 9.68 RENAME DOMAIN Purpose Use the RENAME DOMAIN statement to rename a domain. Prerequisites Only SYSDBA user can rename a domain. Syntax <rename_domain> ::= RENAME DOMAIN domain_name TO new_domain_name rename_domain::= RENAME © 2014 Advanced Systems srl DOMAIN domain_name TO new_domain_name SQL STATEMENTS 265 Semantics domain_name Specify the name of the domain to rename. The domain name is case insensitive and is stored in uppercase ASCII characters. new_domain_name Specify the new name of the domain renamed. The new domain name is case insensitive and is stored in uppercase ASCII characters. Examples RENAME DOMAIN GRUPPOAS TO ADVSYS; 9.69 RENAME TABLE Purpose Use the RENAME TABLE statement to rename a table. Prerequisites The table must be in current schema/database and you must have the CATALOG system privilege. Syntax <rename_table> ::= RENAME TABLE table_name TO new_table_name rename_table::= Semantics table_name Specify the name of the table to rename. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. © 2014 Advanced Systems srl SQL STATEMENTS 266 new_table_name Specify the new name of the table renamed. The new table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. Examples RENAME TABLE TBLDEMO TO NEWTBLDEMO; 9.70 RENAME VIEW Purpose Use the RENAME VIEW statement to rename a view. Prerequisites The view must be in current schema/database and you must have the CATALOG system privilege. Syntax <rename_view> ::= RENAME VIEW view_name TO new_view_name rename_view::= RENAME VIEW view_name TO new_view_name Semantics view_name Specify the name of the view to rename. The view name is case insensitive and is stored in uppercase ASCII characters. If you specify the view name as a quoted identifier, then the quotation marks are silently ignored. new_view_name Specify the new name of the view renamed. The new view name is case insensitive and is stored in uppercase ASCII characters. If you specify the view name as a quoted identifier, then the quotation marks are silently ignored. © 2014 Advanced Systems srl SQL STATEMENTS 267 Examples RENAME view VIEWDEMO TO NEWVIEWDEMO; 9.71 REPLICATE DATABASE Purpose Use the REPLICATE DATABASE statement to replicate an entire database , reloading existing data. For the new database you can specify the database storage path, i.e. the path of database data. For the new database you can also specify the internal db_ID, which is an internal parameter used by Sadas as: unique key which identify the database on a Sadas server; sub-path name of catalog information in the system catalog path; sub-path name of data information in the database storage path. Prerequisites Only SYSDBA user can replicate a database. Syntax <replicate_database>::=REPLICATE DATABASE db_name TO new_db_name [':' new_db_Id] ['@' storage_path ] replicate_database::= Semantics db_name Specify the name of the database to replicate. The database name is case insensitive and is stored in uppercase ASCII characters. If you specify the database name as a quoted identifier, © 2014 Advanced Systems srl SQL STATEMENTS 268 then the quotation marks are silently ignored. new_db_name Specify the name of the new replicated database. The new database name is case insensitive and is stored in uppercase ASCII characters. If you specify the database name as a quoted identifier, then the quotation marks are silently ignored. new_db_Id Specify the internal db_Id of the new replicated database. The internal db_Id must have fixed length of 10 bytes. The db_Id is case insensitive and is stored in uppercase ASCII characters. If you specify the database name as a quoted identifier, then the quotation marks are silently ignored. storage_path Specify the storage path of the new database replicated. If the specified path does not exist, Sadas will create it. The storage path refers to the data files of the database, while the catalog files are written in the System Catalog Path. The storage path can be also a shared network drive. Examples REPLICATE DATABASE DBSAMPLE TO DBSAMPLE2; REPLICATE DATABASE DBSAMPLE TO DBSAMPLE2:DBSAMPLE00; REPLICATE DATABASE DBSAMPLE TO DBSAMPLE2@C:\_TEMP; REPLICATE DATABASE DBSAMPLE TO DBSAMPLE2:DBSAMPLE00@C:\_TEMP; 9.72 REPLICATE TABLE Purpose Use the REPLICATE TABLE statement to replicate an entire table, reloading existing data. Prerequisites The table must be in current schema/database and you must have the CATALOG system privilege. © 2014 Advanced Systems srl SQL STATEMENTS 269 Syntax <replicate_table> ::= REPLICATE TABLE table_name TO new_table_name ['@' storage_path ] replicate_table::= @ storage_path Semantics table_name Specify the name of the table to be replicated. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. new_table_name Specify the name of the new table to be created. The new table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. storage_path Specify the storage path of the new table duplicated. If the specified path does not exist, Sadas will create it. The storage path refers to the data files of the table, while the catalog files are written in the System Catalog Path. The storage path can be also a shared network drive. Examples REPLICATE TABLE TBLDEMO TO NEWTBLDEMO; © 2014 Advanced Systems srl SQL STATEMENTS 9.73 270 REVOKE Purpose Use the REVOKE statement to revoke system and object privileges from users. You can specify ALL to revoke all privileges on table from user or to revoke privileges on all tables of current schema/database from user. Prerequisites To revoke privileges to users you must have the SECURITY privilege on schema/database. Syntax <revoke> ::= REVOKE ALL | <privileges_list> ON ( table_name | ALL ) FROM ( user_name | domain_name ) ALL domain_name FROM ON table_name user_name <privileges_list> ::= PR_SELECT | PR_DESCRIBE | PR_CATALOG | PR_LOAD | PR_SECURITY (',' PR_SECURITY ) © 2014 Advanced Systems srl PR_SELECT | PR_DESCRIBE | PR_CATALOG | PR_LOAD | SQL STATEMENTS 271 Semantics table_name Specify the name of the table for revoke operation. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. user_name Specify the name of the user for revoke operation. The user name is case insensitive and is stored in uppercase ASCII characters. If you specify the user name as a quoted identifier, then the quotation marks are silently ignored. privileges_list Specify the list of privileges to revoke on table (or entire database) from user. privilege Specify the privilege to revoke on table (or entire database) from user. This is the list of privileges defined in Sadas: [PR_SELECT, PR_DESCRIBE, PR_CATALOG, PR_LOAD, PR_SECURITY] Examples REVOKE PR_SECURITY ON LINEITEM FROM SMITH; REVOKE PR_SECURITY ON ALL FROM SMITH; REVOKE ALL ON LINEITEM FROM SMITH; REVOKE ALL ON ALL FROM SMITH; © 2014 Advanced Systems srl SQL STATEMENTS 9.74 272 REWRITE DATABASE Purpose Use the REWRITE DATABASE statement to rewrite data of an entire database/schema. Since this is a load process, Sadas will wait for the end of all queries running and then will start the REWRITE DATABASE process. While executing this process, Sadas stops all others requests. Sadas uses the CTL (Control Table Loader) file of each table for this operation so correct specifications (except for LOADING TYPE) must have been previously defined into all CTL files. In this case the loading type is always " REWRITE" . Prerequisites Only SYSDBA user can use the REWRITE DATABASE statement. Syntax <rewrite_database> ::= REWRITE DATABASE db_name rewrite_database::= REWRITE DATABASE db_name Semantics db_name Name of schema/database to load. The name can be up to 128 bytes long and can contain only ASCII characters. The database name is case insensitive and is stored in uppercase ASCII characters. If you specify the database name as a quoted identifier, then the quotation marks are silently ignored. © 2014 Advanced Systems srl SQL STATEMENTS 273 Examples REWRITE DATABASE TPCH; 9.75 REWRITE TABLE Purpose Use the REWRITE TABLE statement to rewrite a table in current database/schema from an input file or from a sub-query. Since this is a load process, Sadas will wait for the end of all queries running and then will start the REWRITE TABLE process. While executing this process, Sadas stops all others requests. The input file structure must be consistent with CTL (Control Table Loader) specifics; if input file name is not specified Sadas will use the file specified in the CTL. If you specify DIRECT clause, Sadas will use memory buffer of file name area as a single record to load. If you specify ONLY clause, Sadas will load only n_rec records. If you specify SKIP clause, Sadas will skip first n_rec records. In this case the loading type is always "REWRITE" . Prerequisites To use the REWRITE TABLE statement, you must have the LOAD privilege on schema/ database. Syntax <rewrite_table1> ::= REWRITE TABLE table_name ['@' file_name] [ DIRECT | ONLY n_rec | SKIP n_rec [ONLY n_rec] ] <rewrite_table2> © 2014 Advanced Systems srl ::= REWRITE TABLE table_name FROM '('<SubQuery>')' SQL STATEMENTS 274 rewrite_table1::= @ REWRITE TABLE file_name table_name rewrite_table2::= REWRITE TABLE table_name FROM SubQuery Semantics table_name Specify the name of the table for load operation. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. file_name Specify the name of the input file. The file name must be complete, with absolute path. n_rec Number of records to skip or to append. subquery Specify the data that Sadas loads. For each subquery Sadas creates a temporary table, which © 2014 Advanced Systems srl SQL STATEMENTS 275 will be deleted at the end of the query execution. Examples REWRITE TABLE REGION; REWRITE TABLE REGION ONLY 100; REWRITE TABLE REGION SKIP 30; REWRITE TABLE REGION SKIP 30 ONLY 100; REWRITE TABLE REGION @ REGION.TBL; REWRITE TABLE REGION @ "0|AFRICA|special Tiresias about the furiously even dolphins are furi|" DIRECT; REWRITE TABLE REGION FROM (SELECT * FROM REGION2); 9.76 SELECT Purpose Use a SELECT statement or subquery to retrieve data from one or more tables and materialized views. Prerequisites The table or materialized view must be in your own database/schema and you must have the SELECT privilege on the table or materialized view. Syntax <select> ::= SELECT [ALL | DISTINCT] <select_list> | * FROM <table_list> | table_name <join_clause> table_name ON <join_condition> | <SubQuery> [ WHERE < conditions > ] [ GROUP BY [ CUBE | ROLLUP ] <group_by_list> | DISTRIBUTE [BY] <columns_list> ON '('<parameters_list>') [ HAVING < conditions > ] ] [ ORDER BY <order_by_list> ] © 2014 Advanced Systems srl SQL STATEMENTS select::= subquery::= query_block::= © 2014 Advanced Systems srl 276 SQL STATEMENTS select_list::= table_reference::= © 2014 Advanced Systems srl 277 SQL STATEMENTS join_clause::= inner_join_clause::= star_join_clause::= © 2014 Advanced Systems srl 278 SQL STATEMENTS 279 star_join_type::= outer_join_clause::= outer_join_type::= FULL LEFT RIGHT LEFTNULL RIGHTNULL © 2014 Advanced Systems srl OUTER SQL STATEMENTS where_clause::= group_by_clause::= rollup_cube_clause::= grouping_expression_list::= expression_list::= © 2014 Advanced Systems srl 280 SQL STATEMENTS distribute_by_clause::= distribute_parameters::= order_by_clause::= © 2014 Advanced Systems srl 281 SQL STATEMENTS 282 Semantics DISTINCT Specify DISTINCT if you want the database to return only one copy of each set of duplicate rows selected. Duplicate rows are those with matching values for each expression in the select list. ALL Specify ALL if you want the database to return all rows selected, including all copies of duplicates. The default is ALL. * (asterisk) Specify the asterisk to select all columns from all tables or materialized views listed in the FROM clause. The columns are returned in the order indicated by CREATE TABLE or CREATE VIEW statement. select_list The select_list lets you specify the columns you want to retrieve from the database. table.* | view.* | materialized view.* Specify the object name followed by a period and the asterisk to select all columns from the specified table, view, or materialized view. Sadas returns a set of columns in the order in which the columns were specified when the object was created. A query that selects rows from two or more tables, views, or materialized views is a join. You can use the schema qualifier to select from a table, view, or materialized view. In any case the database assumes the table, view, or materialized view is in current database/schema, but this syntax is allowed only for compatibility with SQL standards. expr Specify an expression representing the information you want to select. A column name in this list can be qualified with schema only if the table, view, or materialized view containing the column is qualified with schema in the FROM clause. © 2014 Advanced Systems srl SQL STATEMENTS 283 c_alias Specify an alias for the column expression. Sadas will use this alias in the column heading of the result set. The AS keyword is optional. The alias effectively renames the select list item for the duration of the query. The alias can be used in the order_by_clause, group_by_clause, distribute_clause and having_clause. Restrictions on the Select List The select list is subject to the following restrictions: If you also specify a group_by_clause in this statement, then this select list can contain only the following types of expressions: Constants Aggregate functions and the functions SYSDATE, SYSTIME, SYSTIMESTAMP, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, TODAY. Expressions identical to those in the group_by_clause. Each columns or expression in group_by_clause must be also in the select list, otherwise Sadas returns error. If you also specify a distribute_clause in this statement, then this select list can contain only the following types of expressions: Only numeric and date columns (not expression and contants) as dimension of distribute operation. Aggregate functions: MAX, MIN, SUM, AVG, COUNT. Columns identical to those in the distribute_clause. group_by_clause Each columns in must be also in the select list, otherwise Sadas returns error. If you also specify a order_by_clause in this statement, then this select list can contain only the following types of expressions: Constants All defined functions. Expressions identical to those in the order_by_clause. Each columns or expression in order_by_clause must be also in the select list, otherwise Sadas returns error. © 2014 Advanced Systems srl SQL STATEMENTS 284 FROM Clause The FROM clause lets you specify the objects from which data is selected. table | view | materialized view Specify the name of a table, view, or materialized view from which data is selected. subquery Specify the data on which Sadas run the query at the top level. For each subquery Sadas creates a temporary table, which will be deleted at the end of the query execution. t_alias Specify a correlation name, which is alias for the table, view or materialized view for evaluating the query. Other references to the table, view, or materialized view throughout the query must refer to this alias. join_clause Use the appropriate join_clause syntax to identify tables that are part of a join from which data must be selected. The inner_join_clause lets you specify an inner join. The star_join_clause lets you specify an anti join or a semi join. The outer_join_clause lets you specify an outer join. When you write a join query with the only JOIN keyword, Sadas performs an inner join. Inner Joins Inner joins return only those rows that satisfy the join condition. INNER Specify INNER to explicitly specify an inner join. JOIN The JOIN keyword explicitly states that a join is being performed. You can use only this syntax to do an inner join. © 2014 Advanced Systems srl SQL STATEMENTS 285 ON condition Use the ON clause to specify a join condition. Doing so lets you specify join conditions independently from any search or filter conditions in the WHERE clause. Star Joins Star joins resolve antijoins (with NOT keyword) and semijoins (with or without KEY keyword). An antijoin returns rows from the left side of the predicate for which there are no corresponding rows on the right side of the predicate. A semijoin returns rows that match an EXISTS subquery without duplicating rows from the left side of the predicate when multiple rows on the right side satisfy the criteria of the subquery. STAR Specify STAR to explicitly specify a semi join . KEY Specify KEY STAR to explicitly specify a semi join. NOT Specify NOT to explicitly specify an anti join. JOIN The JOIN keyword explicitly states that a join is being performed. You can use only this syntax to do an anti join or a semi join. ON condition Use the ON clause to specify a join condition. Doing so lets you specify join conditions idependently from any search or filter conditions in the WHERE clause. Outer Joins © 2014 Advanced Systems srl SQL STATEMENTS 286 Outer joins return all rows that satisfy the join condition and also returns some or all of those rows from one table for which no rows from the other satisfy the join condition. outer_join_type The outer_join_type indicates the kind of outer join being performed: Specify RIGHT to indicate a right outer join. Specify LEFT to indicate a left outer join. Specify FULL to indicate a full or two-sided outer join. In addition to the inner join, rows from both tables that have not been returned in the result of the inner join will be preserved and extended with nulls. You can specify the optional OUTER keyword following RIGHT, LEFT, or FULL to explicitly clarify that an outer join is being performed. ON condition Use the ON clause to specify a join condition. Doing so lets you specify join conditions independently from any search or filter conditions in the WHERE clause. Therefore: A left outer join returns all the common column values from the left table in the FROM clause. A right outer join returns all the common column values from the right table in the FROM clause. A full outer join returns all the common column values from both joined tables. where_clause The WHERE condition lets you restrict the rows selected to those that satisfy one or more conditions. For condition, specify any valid SQL condition. If you omit this clause, then the database returns all rows from the tables, views, or materialized views in the FROM clause. © 2014 Advanced Systems srl SQL STATEMENTS 287 group_by_clause Specify the GROUP BY clause if you want the database to group the selected rows based on the value of expr(s) for each row and return a single row of summary information for each group. Expressions in the GROUP BY clause can contain any columns or combinations of columns, of the tables views, or materialized views in the FROM clause: the columns must appear also in the select list. The GROUP BY clause groups rows and guarantees the order of the result set. distribute_clause Specify the DISTRIBUTE clause if you want the database to group the selected rows based on ranges of values of expr(s) for each row and return a single row of summary information for each group. Expressions in the DISTRIBUTE clause can contain only columns of the tables, views, or materialized views in the FROM clause: the columns must appear also in the select list. DISTRIBUTE can be only of one dimensional level. The DISTRIBUTE clause groups rows and guarantees the order of the result set. HAVING Clause Use the HAVING clause to restrict the groups of returned rows to those groups for which the specified condition is TRUE. If you omit this clause, then the database returns summary rows for all groups. Specify GROUP BY [DISTRIBUTE] and HAVING after the where_clause. If you specify both GROUP BY [DISTRIBUTE] and HAVING, then they can appear in either order. In HAVING clause you can specify only a linear sequence of conditions in AND or a linear sequence of conditions in OR. Set Operators: UNION, UNION ALL, INTERSECT, MINUS The set operators combine the rows returned by two SELECT statements into a single result. © 2014 Advanced Systems srl SQL STATEMENTS 288 The number and datatypes of the columns selected by each component query must be the same, but the column lengths can be different. The names of the columns in the result set are the names of the expressions in the select list preceding the set operator. If you combine more than two queries with set operators, then the database evaluates adjacent queries from left to right. The parenthesis around the subquery are optional. You can use them to specify a different order of evaluation. order_by_clause Use the ORDER BY clause to order rows returned by the statement. Without an order_by_clause, no guarantee exists that the same query executed more than once will retrieve rows in the same order. expr expr orders rows based on their value for expr. The expression is based on columns in the select list or columns in the tables, views, or materialized views in the FROM clause. position Specify position to order rows based on their value for the expression in this position of the select list. The position value must be an integer. ASC | DESC Specify whether the ordering sequence is ascending or descending. ASC is the default. Examples The following statement selects rows from the employees table with the department number of 30: SELECT * FROM employees WHERE department_id = 30 ORDER BY last_name; The following statement selects the name, job, salary and department number of all employees except purchasing clerks from department number 30: © 2014 Advanced Systems srl SQL STATEMENTS 289 SELECT last_name, job_id, salary, department_id FROM employees WHERE NOT (job_id = 'PU_CLERK' AND department_id = 30) ORDER BY last_name; The following example selects rows from the oe.orders table for orders earlier than a specified date: SELECT * FROM orders WHERE order_date < '15/06/2000'; To return the minimum and maximum salaries for each department in the employees table, issue the following statement: SELECT department_id, MIN(salary), MAX (salary) FROM employees GROUP BY department_id ORDER BY department_id; To return the minimum and maximum salaries for the clerks in each department, issue the following statement: SELECT department_id, MIN(salary), MAX (salary) FROM employees WHERE job_id = 'PU_CLERK' GROUP BY department_id ORDER BY department_id; To return the minimum and maximum salaries for the employees in each department whose lowest salary is less than $5,000, issue the next statement: SELECT department_id, MIN(salary), MAX (salary) FROM employees GROUP BY department_id HAVING MIN(salary) < 5000 ORDER BY department_id; DEPARTMENT_ID MIN(SALARY) MAX(SALARY) ------------- ----------- ----------10 4400 4400 30 2500 11000 50 2100 8200 60 4200 9000 To select all purchasing clerk records from employees and order the results by salary in descending order, issues the following statement: SELECT * © 2014 Advanced Systems srl SQL STATEMENTS 290 FROM employees WHERE job_id = 'PU_CLERK' ORDER BY salary DESC; To select information from employees ordered first by ascending department number and then by descending salary, issue the following statement: SELECT last_name, department_id, salary FROM employees ORDER BY department_id ASC, salary DESC, last_name; To select the same information as the previous SELECT and use the positional ORDER BY notation, issue the following statement, which orders by ascending department_id, then descending salary, and finally alphabetically by last_name: SELECT last_name, department_id, salary FROM employees ORDER BY 2 ASC, 3 DESC, 1; The following example shows how a partitioned outer join fills data gaps in rows to facilitate analytic function specification and reliable report formatting. The example first creates a small data table to be used in the join: SELECT d.department_id, e.last_name FROM departments d LEFT OUTER JOIN employees e ON d.department_id = e.department_id ORDER BY d.department_id, e.last_name; The left outer join returns all departments, including those without any employees. The same statement with a right outer join returns all employees, including those not yet assigned to a department: The following example selects a list of employees who are not in a particular set of departments: SELECT last_name, department_id FROM employees e NOT STAR JOIN departments d ON e.department_id = d.department_id WHERE location_id = 1700 In the following example, only one row needs to be returned from the departments table, even though many rows in the employees table might match the subquery. If no index has been defined on the salary column in employees, then a semijoin can be used to improve query performance. © 2014 Advanced Systems srl SQL STATEMENTS 291 SELECT * FROM departments d [KEY] STAR JOIN employees e ON d.department_id = e.department_id WHERE employees.salary > 2500 ORDER BY department_name; The following statement returns the current date: SELECT SYSDATE FROM DUAL; You could select SYSDATE from the employees table, but the database would return 14 rows of the same SYSDATE, one for every row of the employees table. Selecting from DUAL is more convenient. Distribute examples Numeric columns If A is a numeric field of T table, some DISTRIBUTE examples follows: Linear ranges SELECT A, count(*), sum(B) FROM T DISTRIBUTE A ON (10,100,1000) WHERE […] ; If you specify three parameters, you distribute the numeric field (A) starting from value 10 (base value), for 100 ranges (range number) of width 1000 (range width). SELECT A, count(*), sum(B) FROM T DISTRIBUTE A ON (150) WHERE[…] ; If you specify one parameter, you distribute the numeric field (A) starting from minimum value of field (base value), for 150 ranges (range number) of width equal to (max– min)/150 (range width). SELECT A, count(*), sum(B) FROM T DISTRIBUTE A WHERE[…] ; If you don’t specify any parameter, you distribute the numeric field (A) starting from minimum value of field (base value), for 10 ranges (range number) of width equal to (max– min)/10 (range width). Manual ranges © 2014 Advanced Systems srl SQL STATEMENTS 292 SELECT A, count(*), sum(B) FROM T DISTRIBUTE A ON (10,20,21,30) WHERE […] ; In this case the number of parameters must be an even integer; the parameters indicate gradually the start and the end of each range. Date columns If A is a date field of T table, some DISTRIBUTE examples follows: Linear ranges SELECT A, count(*), sum(B) FROM T DISTRIBUTE A ON (‘01/01/2000’,100,10,day) WHERE[…] ; If you specify these four parameters, you distribute the date field (A) starting from ‘01/01/2000’ value of field (base value), for 100 ranges (range number) of 10 width (range width) in days (range type). SELECT A, count(*), sum(B) FROM T DISTRIBUTE A ON (‘01/01/2000’,52,1, week) WHERE[…]; If you specify these four parameters, you distribute the date field (A) starting from ‘01/01/2000’ value of field (base value), for 52 ranges (range number) of 1 width (range width) in weeks (range type). SELECT A, count(*), sum(B) FROM T DISTRIBUTE A ON (‘01/01/2000’,48,3, month) WHERE[…]; If you specify these four parameters, you distribute the date field (A) starting from ‘01/01/2000’ value of field (base value), for 48 ranges (range number) of 3 width (range width) in months (range type). SELECT A, count(*), sum(B) FROM T DISTRIBUTE A ON (‘01/01/2000’,5,1, year) WHERE[…]; If you specify these four parameters, you distribute the date field (A) starting from ‘01/01/2000’ value of field (base value), for 5 ranges (range number) of 1 width (range width) in years (range type). © 2014 Advanced Systems srl SQL STATEMENTS 293 Select A, count(*), sum(B) from T distribute A on (150) where … ; If you specify one parameter, you distribute the date field (A) starting from minimum value of field (base value), for 150 ranges (range number) of (max–min)/150 width (range width) in days (range type). SELECT A, count(*), sum(B) FROM T DISTRIBUTE A WHERE[…] ; If you don’t specify any parameters, you distribute the date field (A) starting from minimum value of field (base value), for 10 ranges (range number) of (max–min)/10 width (range width) in days (range type). Manual ranges SELECT A, count(*), sum(B) FROM T DISTRIBUTE A ON (‘01/01/2000’,‘01/02/2000’,‘01/04/2000’,‘01/06/2000’) WHERE[…] ; In this case the number of parameters must be an even integer; the parameters indicate gradually the start and the end of each range. 9.77 SET LANGUAGE Purpose Use a SET LANGUAGE statement to change language of SADAS error messages. You can set following values: 0 Italian 1 Romanian 2 English Syntax <set_language> ::= set_language::= © 2014 Advanced Systems srl SET LANGUAGE <value> SQL STATEMENTS 294 SET LANGUAGE value Semantics value Value of language that you are setting. Examples SET LANGUAGE 0; 9.78 SET VARIABLE Purpose Use a SET VARIABLE statement to set a variable value in the current session. Syntax <set_variable> ::= SET VARIABLE <variable_name> <value> set_variable::= SET VARIABLE variable name Semantics variable_name Value for the name of variable that you are setting. value Value for variable that you are setting. Example If the current connected user has the following hidden condition: date_ope >= $DAT_INI$ © 2014 Advanced Systems srl value SQL STATEMENTS 295 he can set the parameter DAT_INI as follow: set variable DAT_INI = '01/01/2012' so the hidden condition will be: date_ope >= '01/01/2012' 9.79 TRUNCATE DATABASE Purpose Use the TRUNCATE DATABASE statement to empty an entire database/schema. Sadas will erase data of all tables and set their status to " loaded with 0 records". Prerequisites Only SYSDBA user can use the TRUNCATE DATABASE statement. Syntax <truncate_database> ::= TRUNCATE DATABASE db_name truncate_database::= Semantics db_name Name of schema/database to be truncated. The name can be up to 128 bytes long and can contain only ASCII characters. The database name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. Examples TRUNCATE DATABASE TPCH; © 2014 Advanced Systems srl SQL STATEMENTS 9.80 296 TRUNCATE TABLE Purpose Use the TRUNCATE TABLE statement to empty a table in current database/schema. Sadas will erase data of table and will set its status to " loaded with 0 records". Prerequisites You must have the LOAD privilege on a table in order to truncate it. Syntax <truncate_table> ::= TRUNCATE TABLE table_name truncate_table::= Semantics table_name Name of table to be truncated. The name can be up to 128 bytes long and can contain only ASCII characters. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. Examples TRUNCATE TABLE LINEITEM; 9.81 UNION Purpose Use the UNION statement to merge the result of a query with another query result. © 2014 Advanced Systems srl SQL STATEMENTS 297 There are limits on fields on the select statements (sub-query): all corresponding fields must be of the same type; also numeric fields must be of the same type: if you have an INTEGER [FLOAT] field, all corresponding fields must be INTEGER [FLOAT]; if you have a code [pseudo-code] field, all corresponding fields must be of code [pseudo-code] type, with the same decode table. If you specify ALL keyword, you will get full results of base queries. If you omit ALL keyword, Sadas will eliminate duplicate rows. Prerequisites To use the UNION statement, you must have the SELECT privilege on schema/database. Syntax <union>::=(<select_statement> | <parenthesis>) <parenthesis>)) union::= < parenthesis > © 2014 Advanced Systems srl ::= ‘(’ | ‘)’ (UNION [ALL] (<select_statement > | SQL STATEMENTS select_statement> -> 298 see ‘SELECT’ chapter Semantics select_statement Specify one of the statements for UNION operation. For more details see the “SELECT” chapter. parenthesis The select statements can be optionally in parenthesis. Examples SELECT N_NATIONKEY,N_NAME,N_REGIONKEY FROM NATION WHERE N_NATIONKEY > 22 UNION SELECT N_NATIONKEY,N_NAME,N_REGIONKEY FROM NATION WHERE N_NATIONKEY < 3 N_NATIONKEY N_NAME N_REGIONKEY ---------------------------------------0 ALGERIA 0 1 ARGENTINA 1 2 BRAZIL 1 23 UNITED KINGDOM 3 24 UNITED STATES 1 SELECT N_NATIONKEY,N_NAME,N_REGIONKEY FROM NATION WHERE N_NATIONKEY > 22 UNION ALL SELECT N_NATIONKEY,N_NAME,N_REGIONKEY FROM NATION WHERE N_NATIONKEY < 3 N_NATIONKEY N_NAME N_REGIONKEY ---------------------------------------23 UNITED KINGDOM 3 24 UNITED STATES 1 0 ALGERIA 0 1 ARGENTINA 1 2 BRAZIL 1 9.82 UNLOAD DATABASE Purpose Use the UNLOAD DATABASE statement to unload an entire database/schema. This operation will re-create input data files for all tables of database. Sadas will use the CTL (Control Table Loader) file of each table for this operation, so all the CTL files must contain © 2014 Advanced Systems srl SQL STATEMENTS 299 correct specifications. Prerequisites Only SYSDBA user can use the UNLOAD DATABASE statement. Syntax <unload_database> ::= UNLOAD DATABASE db_name unload_database::= Semantics db_name Name of schema/database to be unloaded. The name can be up to 128 bytes long and can contain only ASCII characters. The database name is case insensitive and is stored in uppercase ASCII characters. If you specify the database name as a quoted identifier, then the quotation marks are silently ignored. Examples UNLOAD DATABASE TPCH; 9.83 UNLOAD TABLE Purpose Use the UNLOAD TABLE statement to unload a table in current database/schema and to recreate its original input data file. The input data file will be created accordingly with CTL (Control Table Loader) specifications; © 2014 Advanced Systems srl SQL STATEMENTS 300 if the input filename is not specified in the statement Sadas will use the file name defined in the CTL. If ONLY clause is specified, Sadas will unload only n_rec records. If SKIP clause is specified, Sadas will skip first n_rec records. Prerequisites To use the UNLOAD TABLE statement, you must have the LOAD privilege on schema/database. Syntax <unload_table> ::= UNLOAD TABLE table_name ['@' file_name] [ ONLY n_rec | SKIP n_rec [ONLY n_rec] ] unload_table::= Semantics table_name Specify the name of the table for unload operation. The table name is case insensitive and is © 2014 Advanced Systems srl SQL STATEMENTS 301 stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. file_name Specify the name of the input file. The file name must be complete, with absolute path. n_rec Number of records to skip or to unload. Examples UNLOAD TABLE REGION; UNLOAD TABLE REGION ONLY 100; UNLOAD TABLE REGION SKIP 30; UNLOAD TABLE REGION SKIP 30 ONLY 100; UNLOAD TABLE REGION @ REGION.TBL; 9.84 UNLOCK USER Purpose Use the UNLOCK USER statement to unlock a database user. User unlocked can login to the current database. All users are unlocked by default. Prerequisites The user must be in current schema/database and you must have the SECURITY system privilege. Syntax <unlock_user> unlock_user::= © 2014 Advanced Systems srl ::= UNLOCK USER user SQL STATEMENTS 302 Semantics user Specify the name of the user. The user name is case insensitive and is stored in uppercase ASCII characters. If you specify the user name as a quoted identifier, then the quotation marks are silently ignored. Examples UNLOCK USER SMITH; 9.85 UNLOCK TABLE Purpose Use the UNLOCK TABLE statement to unlock a table of the current database. Prerequisites Only a SYSDBA can unlock a table. Syntax <unlock_table> ::= UNLOCK TABLE table_name unlock_table::= UNLOCK TABLE table_name Semantics table_name Specify the name of the table for load operation. The table name is case insensitive and is © 2014 Advanced Systems srl SQL STATEMENTS 303 stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. Examples UNLOCK TABLE CUSTOMER; 9.86 UPDATE Purpose Use the UPDATE statement to update rows in a table. To use this statement the base table must be already loaded. You can specify up to 256 elements in update list. Since this is a load process, Sadas will wait for the end of all queries running and then will start the UPDATE process. While executing this process, Sadas stops all others requests. In this case the loading type is always "UPDATE" . Prerequisites The table must be contained in the current schema/database and you must have the LOAD privilege on the table. Syntax <update> ::= <conditions> ] update_table::= © 2014 Advanced Systems srl UPDATE table_name SET <update_list> [ WHERE SQL STATEMENTS 304 update_set_clause::= Semantics schema Specify the schema/database containing the table. If you omit schema, then Sadas assumes the table is in current schema/database connected. table_name Specify the name of the table which rows must be updated. The name can be up to 128 bytes long and can contain only ASCII characters. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. expr The expression is based on columns in the select list or columns in the tables in the FROM clause. where_clause Use the where_clause to update only rows that satisfy the conditions. The conditions can reference the table which you are updating and can contain a scalar subquery. © 2014 Advanced Systems srl SQL STATEMENTS 305 Examples UPDATE LINEITEM SET L_QUANTITY = 50; UPDATE LINEITEM SET L_QUANTITY = L_QUANTITY*10 WHERE L_SHIPDATE > ‘01/01/1998’; 9.87 UPDATE COLUMNS Purpose Use the UPDATE COLUMNS statement to update only some columns of a table in current database/schema. Since this is a load process, Sadas will wait for the end of all queries running and then will start the UPDATE COLUMNS process. While executing this process, Sadas stops all others requests. To use this statement the base table must be already loaded and must have a primary key. To update a column in a table, you must have an input file with explicit keys to update, according with CTL (Control Table Loader) specifics; if the input file name is not specified in the statement, Sadas will use the file specified in the CTL. Prerequisites To use the UPDATE COLUMNS statement, you must have the LOAD privilege on schema/ database. Syntax <update_columns> file_name ] update_columns::= © 2014 Advanced Systems srl ::= UPDATE COLUMN <column_list> ON table_name [ '@' SQL STATEMENTS 306 column_list::= Semantics columns_list Specify the list of columns for update operation. table_name Specify the name of the table for update operation. The table name is case insensitive and is stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. file_name Specify the name of the input file. The file name must be complete, with absolute path. Examples UPDATE R_NAME ON REGION; UPDATE R_NAME, R_COMMENT ON REGION @ REGION.TBL; © 2014 Advanced Systems srl SQL STATEMENTS 9.88 307 UPDATE TABLE Purpose Use the UPDATE TABLE statement to update a table in the current database/schema from an input file. Since this is a load process, Sadas will wait for the end of all queries running and then will start the UPDATE TABLE process. While executing this process, Sadas stops all others requests. To use this statement the base table must be already loaded and must have a primary key. An input file with explicit keys to update is required, according with CTL (Control Table Loader) specifications; if the input file name is not specified in the statement Sadas will use the file specified in the CTL. In this case the loading type is always "UPDATE" . Prerequisites To use the UPDATE TABLE statement, you must have the LOAD privilege on schema/database. If you specify the ALL clause, Sadas appends the records of file that have not the corresponding primary key in destination table. Syntax <update_table> ::= UPDATE TABLE table_name [ '@' file_name ] [ALL] update_table::= @ UPDATE TABLE file_name table_name Semantics table_name Specify the name of the table for update operation. The table name is case insensitive and is © 2014 Advanced Systems srl AL SQL STATEMENTS 308 stored in uppercase ASCII characters. If you specify the table name as a quoted identifier, then the quotation marks are silently ignored. file_name Specify the name of the input file. The file name must be complete, with absolute path. Examples UPDATE TABLE REGION; UPDATE TABLE REGION @ REGION.TBL; 9.89 UNSET VARIABLE Purpose Use a UNSET VARIABLE statement to unset a variable value in the current session. Syntax <unset_variable> ::= UNSET VARIABLE <variable_name> unset_variable::= UNSET VARIABLE variable name Semantics variable_name Value for the name of variable that you are setting. value Value for variable that you are setting. Examples UNSET VARIABLE NATION; © 2014 Advanced Systems srl SQL STATEMENTS © 2014 Advanced Systems srl 309 Part X Compendium of Sadas SQL Syntax 10 311 Compendium of Sadas SQL Syntax Select: <describe> ::= DESC [ | DESCR | DESCRIBE ] SYSDB | SYSTABLES | SYSVIEWS | SYSSYNONYMS | SYSOBJECTS | SYSALLCOLUMNS | SYSUSERS [ @ domain_name ] | SYSDOMAINS | SYSLOG | SYSKEYS | SYSFOREIGNKEYS | STORED QUERIES | USER user_name | [SHADOW | INFO] table_name (,table_name)* <select> ::= SELECT [ALL | DISTINCT] <select_list> | * FROM <table_list> | table_name <join_clause > table_name ON <join_condition> | <subquery> [ WHERE < conditions > ] [ GROUP BY [ CUBE | ROLLUP ] <groupby_list> | DISTRIBUTE [BY] <columns_list> ON '(' <parameters_list> ') [ HAVING < conditions > ] ] [ ORDER BY <orderby_list> ] <union> ::= (<select_statement> | <parenthesis>) ( UNION [ALL] (<select_statement > | <parenthesis>) )* <intersect> ::= (<select> | <parenthesis>) ( INTERSECT (<select> | <parenthesis>) )* © 2014 Advanced Systems srl Compendium of Sadas SQL Syntax <minus> 312 ::= (<select_statement> | <parenthesis>) ( MINUS (<select_statement > | <parenthesis>) )* Catalog management: <alter_table> ::= ALTER TABLE table_name ADD '(' <modify_list> ')' | DROP COLUMN '(' <column (, column)* | MODIFY '(' <modify_list> ')' <alter_view> ::= ALTER VIEW view MODIFY '(' <modify_list> ')' <append_table1> ::= APPEND TABLE table_name ['@' file_name] [ DIRECT | ONLY n_rec | SKIP n_rec [ONLY n_rec] ] [ ORDER BY <column_list> ] <append_table2> ::= APPEND TABLE table_name FROM '('<SubQuery>')' <comment_on_column> ::= COMMENT ON COLUMN [ column_name OF [ ALL | table_name ] | table_name.column_name ] IS 'comment' <comment_on_table> ::= COMMENT ON TABLE table_name IS 'comment' <create_database> ::= CREATE DATABASE db_name ['@' storage_path ] <create_expression> ::= CREATE <create_index> ::= CREATE INDEX ON table_name.col_name <create_synonym> ::= CREATE ::= CREATE EXPRESSION expr_name ON TABLE table_name AS '(' <expr> ')' [OR REPLACE] [PUBLIC] synonym_name FOR schema.table_name <create_table> '('<column_definition>')' © 2014 Advanced Systems srl [GLOBAL TEMPORARY] TABLE table_name Compendium of Sadas SQL Syntax <create_table> 313 ::= CREATE [GLOBAL TEMPORARY] TABLE table_name AS '('<select_statement>')' <create_view> ::= CREATE [OR REPLACE] [MATERIALIZED] VIEW view_name AS '('<select>')' <deactivate_database>::= DEACTIVATE DATABASE db_name <deactivate_table> ::= DEACTIVATE TABLE table_name <delete_table> ::= DELETE [FROM] table_name [ WHERE <conditions> ] <delete_keys> ::= DELETE KEYS FROM table_name <drop_database> ::= DROP DATABASE db_name <drop_expression> ::= DROP EXPRESSION expr_name ON [ TABLE table_name | ALL ] <drop_expressions> ::= DROP EXPRESSIONS ON [ TABLE table_name | ALL ] <drop_index> ::= DROP INDEX table_name.col_name [ '@' file_name ] <drop_generated_columns> ::= DROP GENERATED COLUMNS ON [ TABLE table_name | ALL ] <drop_synonym> ::= DROP SYNONYM synonym_name <drop_table> ::= DROP TABLE table_name <drop_view> ::= DROP VIEW view <duplicate_database> ::= DUPLICATE DATABASE db_name TO new_db_name [':' new_db_Id] ['@' storage_path ] <duplicate_table> storage_path ] © 2014 Advanced Systems srl ::= DUPLICATE TABLE table_name TO new_table_name ['@' Compendium of Sadas SQL Syntax <insert> 314 ::= INSERT INTO table_name ['(' column_list ::= INSERT TABLE table_name ['@' file_name] ')'] VALUES '(' values_list ')' <insert_table1> [ DIRECT | ONLY n_rec | SKIP n_rec [ONLY n_rec] ] <insert_table2> ::= INSERT TABLE table_name FROM '('<SubQuery>')' <load_columns> ::= LOAD COLUMN <column_list> ON table_name [ '@' file_name ] <load_database> ::= LOAD DATABASE db_name <load_table1> ::= LOAD TABLE table_name ['@' file_name] [ DIRECT | ONLY n_rec | SKIP n_rec [ONLY n_rec] ] <load_table2> ::= LOAD TABLE table_name FROM '('<SubQuery>')' <lock_table> ::= LOCK TABLE table_name <rename_database> ::= RENAME DATABASE db_name TO new_db_name [':' new_db_Id] <rename_table> ::= RENAME TABLE table_name TO new_table_name <rename_view> ::= RENAME VIEW view_name TO new_view_name <rename_column> ::= RENAME COLUMN col_name TO new_col_name ON table_name <replicate_database> ::= REPLICATE DATABASE db_name TO new_db_name [':' new_db_Id] ['@' storage_path ] <replicate_table> ::= REPLICATE TABLE table_name TO new_table_name ['@' <rewrite_database> ::= REWRITE DATABASE db_name <rewrite_table1> ::= REWRITE TABLE table_name ['@' file_name] storage_path ] [ DIRECT | ONLY n_rec | SKIP n_rec [ONLY n_rec] ] © 2014 Advanced Systems srl Compendium of Sadas SQL Syntax 315 <rewrite_table2> ::= REWRITE TABLE table_name FROM '('<SubQuery>')' <truncate_database> ::= TRUNCATE DATABASE db_name <truncate_table> ::= TRUNCATE TABLE table_name <unlock_table> ::= UNLOCK TABLE table_name <update> ::= UPDATE table_name SET <update_list> [ WHERE <conditions> ] <update_columns> ::= UPDATE COLUMN <column_list> ON table_name [ '@' ::= UPDATE TABLE table_name ['@' file_name ] file_name ] [ ALL ] <update_table> Security management: <alter_user> ::= ALTER USER user_name [ PASSWORD EXPIRE | PASSWORD_LIFE_TIME [ DEFAULT | days | UNLIMITED ] ] <create_user> ::= CREATE USER user [ '@' domain_name ] [ PASSWORD EXPIRE | PASSWORD_LIFE_TIME [ DEFAULT | days | UNLIMITED ] ] <drop_user> ::= DROP USER user_name <duplicate_user> ::= DUPLICATE USER user_name TO new_user_name <lock_user> ::= LOCK USER user_name <unlock_user> ::= UNLOCK USER user_name <create_domain> ::= CREATE DOMAIN domain_name <drop_domain> ::= DROP DOMAIN domain_name © 2014 Advanced Systems srl Compendium of Sadas SQL Syntax 316 <rename_domain> ::= RENAME DOMAIN domain_name TO new_domain_name <grant> ::= GRANT ALL | <privileges_list> ON ( table_name | ALL ) TO ::= REVOKE ALL | <privileges_list> ON ( table_name | ALL ) user_name <revoke> FROM user_name <privileges_list> ::= PR_SELECT | PR_DESCRIBE | PR_CATALOG | PR_LOAD | PR_SECURITY (',' PR_SELECT | PR_DESCRIBE | PR_CATALOG | PR_LOAD | PR_SECURITY )* Other: <connect> ::= CONNECT user '/' password '@' database | CONNECT SYSDBA '/' password [ '@' database ] <delete_stored_queries> ::= DELETE STORED QUERIES [ALL] [ '<' <times> | '<' <date> | '=' <hash>] <describe> ::= DESC [ | DESCR | DESCRIBE ] STORED QUERIES ['<'|'>' <disable_index> ::= DISABLE INDEXGBY <disconnect> ::= DISCONNECT | DISC <enable_index> ::= ENABLE INDEXBGY <execute> ::= EXEC | EXECUTE STORED QUERIES [ '>' <times> | <date> ] <parenthesis> ::= '(' <union> | <intersect> | <minus> ')' <set_language> ::= SET LANGUAGE <value> <set_variable> ::= SET VARIABLE <variable_name> <value> <times>|<date>] © 2014 Advanced Systems srl Compendium of Sadas SQL Syntax <unset_variable> © 2014 Advanced Systems srl 317 ::= UNSET VARIABLE <variable_name> Part XI Sadas Database Reserved Words 11 319 Sadas Database Reserved Words This chapter lists Sadas SQL reserved words. The list also includes the words that are ANSI reserved words and the words not yet used by Sadas, but that cannot be used as identifiers. Word Used ADD * ALL * ALTER * AND * ANY - APPEND * AS * ASC * ASCENDING * BETWEEN * BY * CASCADE * CASE * CHAR * CHARACTER * CODE * COLUMN COLUMNS * COMMENT * COMMIT * CONNECT * CONSTRAINT * CONTROL - CREATE * CUBE * DATABASE * DATE * DBADMIN * DEACTIVATE * © 2014 Advanced Systems srl Sadas Database Reserved Words 320 DEC * DECIMAL * DEFAULT * DELETE * DESC * DESCENDING * DESCR * DESCRIBE * DIRECT * DISABLE * DISC * DISCONNECT * DISTINCT * DISTRIBUTE * DOMAIN * DOUBLE * DROP * DUAL * DUPLICATE * ELSE * ENABLE * END * EXEC * EXECUTE * EXISTS * EXPIRE * EXPRESSION * EXPRESSIONS * FALSE * FIELDS * FIX * FLOAT * FOR * FOREIGN * FROM * © 2014 Advanced Systems srl Sadas Database Reserved Words 321 FULL * GENERATED * GLOBAL * GRANT * GROUP * HAVING * IN * INDEX * INDEXGBY * INFO * INNER * INSERT - INT * INTEGER * INTERSECT * INTO * IS * JOIN * KEY * KEYS * LANGUAGE * LEFT * LIKE * LOCK * LOAD * MATERIALIZED * MINUS * MODIFY * NATURAL - NOT * NULL * NUMBER * NUMERIC * OF * ON * © 2014 Advanced Systems srl Sadas Database Reserved Words 322 ONLY * OR * ORDER * OUTER * PASSWORD * PASSWORD_LIFE_TIME * PRECISION * PRIMARY * PR_CATALOG * PR_DESCRIBE * PR_LOAD * PR_SECURITY * PR_SELECT * PUBLIC * QUERIES * REAL * REFERENCES * RENAME * REPLACE * REPLICATE * REVOKE * REWRITE * RIGHT * ROLLBACK * ROLLUP * ROWID * ROWNUM * SELECT * SET * SHADOW * SKIP * SMALLINT * SOME - STAR * STORED * © 2014 Advanced Systems srl Sadas Database Reserved Words 323 SYNONYM * SYSALLCOLUMNS * SYSDB * SYSDBA * SYSDOMAINS * SYSFOREIGNKEYS * SYSKEYS * SYSLOG * SYSOBJECTS * SYSSYNONYMS * SYSTABLES * SYSUSERS * SYSVIEWS * TABLE * TEMPORARY * THEN * TIME * TIMESTAMP * TO * TRUE * TRUNCATE * UNION * UNLIMITED * UNLOAD * UNSET * UPDATE * USER * VALUES * VARCHAR * VARIABLE * VIEW * VIRTUAL * WHEN * WHERE * © 2014 Advanced Systems srl Sadas Database Reserved Words © 2014 Advanced Systems srl 324 Part XII Sadas Database SQL Errors 12 326 Sadas Database SQL Errors This chapter lists all SADAS SQL errors. 12.1 SDS-0000 "No error" Error Code 0000 Error Description “No error” SQL types All Reasons why - Notes Usually this message is not returned by Sadas, but if Sadas returns it a critical error occurred during parsing of SQL script (see also error 0033). 12.2 SDS-0001 "Null SQL script" Error Code 0001 Error Description “Null SQL script” SQL types All Reasons why - Notes You have tried to execute a NULL SQL script. 12.3 SDS-0002 "Encountered end of file in comments" Error Code 0002 Error Description “Encountered end of file in comments” SQL types All Reasons why You don’t have closed comments correctly. Sadas parser has encountered end of file in comments. Notes Sadas SQL comments must have a start symbol (‘{‘ or ‘/*’) and a corresponding end symbol (‘}’ or ‘*/’): for example, the comments that start with ‘{‘ must end with ‘}’ (it’s the same for ‘/*’ and ‘*/’). Sadas closes automatically comments that start with ‘--‘, at the end of a line (when Sadas encounters Line Feed and/or Carriage Return chars). © 2014 Advanced Systems srl Sadas Database SQL Errors 327 Example of error SELECT * FROM T /* This is a select 12.4 Comments not closed SDS-0003 "Non terminated text literal" Error Code 0003 Error Description “Non terminated text literal” SQL types All Reasons why SADAS parser has not encountered the end of a text literal. Notes Text, character, and string literals must be always surrounded by single quotation marks. Examples a. SELECT * FROM T WHERE city = 'Naples ^ - Text literal not terminated b. SELECT * FROM T WHERE company = 'Advanced ^ - Text literal not terminated Systems' 12.5 SDS-0004 "Text literal too long" Error Code 0004 Error Description “Text literal too long” SQL types All Reasons why SADAS parser has encountered a text literal too long (limit 128). Notes SADAS parser limits text, character, and string literals to 128 bytes. Example of error SELECT * FROM T WHERE comment = 'A.......XYZ' ^ - Text literal too long © 2014 Advanced Systems srl Sadas Database SQL Errors 12.6 328 SDS-0005 "Unknown character" Error Code 0005 Error Description “Unknown character” SQL types All Reasons why Sadas parser has encountered a unknown char for SQL environment or in a numeric literal. Notes In a SQL script Sadas parser accepts only these characters: - 'A'..'Z' , 'a'..'z' - '0'..'9' - '@', '(', ')', '.', ',', ';', '*', '=', '+', '-', ''', '"', '/', '>', '<', '!', '^', '|', '_' A numeric literal is made only with these characters: - '0'..'9' - '+', '-', 'e', 'E', '.' Sadas returns this error if it encounters a unknown character or a illegal text numeric. Examples of error a. [...] WHERE & [...] ^ - Unknown character (&) b. [...] A > 574G [...] ^ - Illegal numeric text (574G) 12.7 SDS-0006 "Identifier name too long" Error Code 0006 Error Description “Identifier name too long” SQL types All Reasons why Sadas parser has encountered a name referred to identifier too long (limit 128). Notes The name of identifiers must have always length less than Sadas parser limit (128 bytes). © 2014 Advanced Systems srl Sadas Database SQL Errors 329 Example of error SELECT * FROM T WHERE A...XYZ > 5 ^ - Identifier name too long 12.8 SDS-0007 "Illegal identifier" Error Code 0007 Error Description “Illegal identifier” SQL types All Reasons why Sadas parser has encountered a bad identifier name. Notes The name of identifiers can be of two types: 1. traditional: it can contain only following characters 'A'..'Z', 'a'..'z', '0'..'9' and '_'; the first character cannot be '0'..'9' and '_'. 2. extended: it can contain only following characters 'A'..'Z', 'a'..'z', '0'..'9', '_', ' ' (blank), ''', '-' and '.'; delimited by double quotes; an extended identifier name cannot contain in double quotes all blank characters or empty string. Sadas error message indicates the part of illegal identifier name preceding invalid character. Examples of error SELECT "Comp & Ltd" [...] ^ - Illegal identifier (COMP ) 12.9 SDS-0008 "Illegal numeric literal" Error Code 0008 Error Description “Illegal number” SQL types All Reasons why Sadas parser has encountered a bad or too long numeric literal. Notes © 2014 Advanced Systems srl Sadas Database SQL Errors 330 In numeric literals Sadas accepts integer and real numbers; the decimal separator must be the point character; you cannot write the thousands separator; you can use scientific notation, using characters 'E' or 'e' for exponential part. A numeric literal must have always length less than Sadas parser limit (128 bytes). Sadas error message indicates the illegal numeric literal. Examples of error a. [...] 123.4.5 [...] ^ - Illegal numeric literal (123.4.5) b. [...] 123E4.5 [...] ^ - Illegal numeric literal (123E4.5) c. [...] 1234E. [...] ^ - Illegal numeric literal (12345E.) 12.10 SDS-0009 "Syntax error" Error Code 0009 Error Description “Syntax error” SQL types All Reason Sadas SQL grammar is not satisfied. Notes This is a generic error, that can have several reasons. Some main reasons are given as follows: bad written keywords, missing keyword, too many keywords, missing characters spelling (comma, point, …), bad order of clauses, bad use of keyword or identifier, bad arithmetic expression, bad logic expression, bad SQL constructs, unknown datatype. © 2014 Advanced Systems srl Sadas Database SQL Errors 331 12.11 SDS-0010 "Expected relational operator" Error Code 0010 Error Description “Expected relational operator” SQL types SELECT Reasons why Missing or bad relational operator in a condition. Notes In conditions Sadas uses following relational operators: <, <=, =, >=, >, !=, <>, ^= Sadas returns this error when relational operator is missing or is not one of those used by Sadas. Examples of error a. [...] WHERE A ( 5 ^ - Expected relational operator b. [...] WHERE A ^ - Expected relational operator 12.12 SDS-0011 "Expected logical operator" Error Code 0011 Error Description “Expected logical operator” SQL types SELECT Reasons why Missing logical operator in a conditions. Notes Sample conditions (predicates) must be concatenated using logical operators: [AND , OR]. Sadas returns this error when logical operator is missing between two predicates. Examples of error a. [...] WHERE A > 5 B < 4 ^ - Expected logical operator b. [...] WHERE A > 5 NOT B < 4 ^ - Expected logical operator © 2014 Advanced Systems srl Sadas Database SQL Errors 332 12.13 SDS-0012 "Expected arithmetic operator" Error Code 0012 Error Description “Expected arithmetic operator” SQL types SELECT Reasons why Missing arithmetic operator in an expression. Notes An arithmetic expression must be written using operands (columns, functions and constant values) and arithmetic operators (+, -, *, /). Examples of error a. SELECT A 5, [...] ^ - Expected arithmetic operator b. [...] WHERE B 8 < C ^ - Expected arithmetic operator 12.14 SDS-0013 "Expected identifier after point" Error Code 0013 Error Description “Expected identifier after point” SQL types SELECT Reasons why Missing identifier after point character. Notes The complete notation for a column is: <table_name>. <column_name> If you use this notation, you must specify always an identifier after point character. Examples of error a. SELECT T.7 [...] ^ - Expected identifier after point b. [...] WHERE T. + 5 > T.B © 2014 Advanced Systems srl Sadas Database SQL Errors 333 ^ - Expected identifier after point 12.15 SDS-0014 "Expected identifier or constant value" Error Code 0014 Error Description “Expected identifier or constant value” SQL types SELECT Reasons why Missing identifier or constant value in an expression after an arithmetic operator. Notes In an arithmetic expression, after an operand (column, function or constant value) and an arithmetic operator, Sadas parser must encounter another sub-expression (delimited by parenthesis) or another operand, and so an identifier or a constant value. If these things are missing, Sadas returns this error. Examples of error a. [...] WHERE A + > B ^ - Expected identifier or constant value b. SELECT A * , B [...] ^ - Expected identifier or constant value 12.16 SDS-0015 "Unknown table/view name" Error Code 0015 Error Description “Unknown table/view name” SQL types SELECT, DESCRIBE, CREATE, ALTER, DROP, LOAD, APPEND, UPDATE, TRUNCATE, DELETE. Reasons why Sadas does not find in the catalog of current database/schema, a table/ view specified in SQL script. Notes This error refers to all parts of an SQL script in which you can specify a table/view name. © 2014 Advanced Systems srl Sadas Database SQL Errors 334 Examples of error In following examples A is an undefined table/view. a. SELECT A.Col [...] ^ - Unknown table/view name (A) b. [...] FROM A, [...] ^ - Unknown table/view name (A) c. [...] WHERE A.Col > 0 ^ - Unknown table/view name (A) 12.17 SDS-0016 "Unknown column name" Error Code 0016 Error Description “Unknown column name” SQL types SELECT, DESCRIBE, CREATE, ALTER, DROP, LOAD, APPEND, UPDATE, DELETE. Reasons why Specified column does not exist in specified table/view. Notes Sadas returns this error when the column name specified does not exist in one or all table of SQL script. You can specify a column name in two ways: 1. simple identifier: <column_name> 2. complete identifier: <table_name>. <column_name> If you have specified a column with simple identifier, Sadas returns this error if it does not find column in all table of FROM clause. If you have specified a column with complete identifier, Sadas returns this error if it does not find column in table preceding point character. Examples of error a. SELECT A FROM T1, T2 [...] © 2014 Advanced Systems srl Sadas Database SQL Errors 335 ^ - Unknown column name (A) [A does not exist in T1 and in T2] b. SELECT T1.A FROM [...] ^ - Unknown column name (A) [A does not exist in T1] c. [...] WHERE T1.A > 0 [...] ^ - Unknown column name (A) [A does not exist in T1] d. [...] FROM T1, T2, T3 WHERE A > T2.B ^ - Unknown column name (A) [A does not exist in T1 and in T2] 12.18 SDS-0017 "Wrong use of function TO_DATE" Error Code 0017 Error Description “Wrong use of function TO_DATE” SQL types SELECT Reasons why Sadas cannot convert to valid date the input string. Notes TO_DATE converts char, character, varchar, date or timestamp to a value of DATE datatype. If string is not a DATE, Sadas returns error. The input string must have the default date format of Sadas: ‘DD/MM/YYYY’ Examples of error a. SELECT TO_DATE('01/XX/2000') FROM DUAL ^ - Wrong use of function TO_DATE b. SELECT TO_DATE('01-10-2000') FROM DUAL © 2014 Advanced Systems srl Sadas Database SQL Errors 336 ^ - Wrong use of function TO_DATE 12.19 SDS-0018 "Operands of different datatypes" Error Code 0018 Error Description “Operands of different datatypes” SQL types SELECT Reasons why Two operands of different datatypes are used in an expression or in a condition. Notes An expression or a condition uses operands (columns, functions or constant values) only of the same datatype. You must verify the datatypes of operands in expression or in a condition. In the error message Sadas returns also the different datatypes and if the error is occurred in right member of a condition. Examples of error In these examples A is of string datatype and B is of integer datatype. a. SELECT A + B FROM [...] ^ - Operands of different datatypes («string» <-> «integer») b. [...] WHERE A + B > 0 [...] ^ - Operands of different datatypes («string» <-> «integer») c. [...] WHERE A > B [...] ^ - Operands of different datatypes («string» <-> «integer» in right member of condition) 12.20 SDS-0019 "Exceeded the limit of the number precision" Error Code 0019 Error Description “Exceeded the limit of the number precision” SQL types CREATE, ALTER. Reasons why A precision number too large (limit 18) has been specified in the definition of a column. © 2014 Advanced Systems srl Sadas Database SQL Errors 337 Notes When you specify a fixed-point number using the following form: [type](p,s) p is the precision (maximum number of significant decimal digits) and s is the scale (number of digits from the decimal point to the least significant digit). The precision can range from 1 to 18. Example of error CREATE TABLE T (F1 DECIMAL (20,10)) ^ - Exceeded the limit of the number of decimals 12.21 SDS-0020 "Alias name already used" Error Code 0020 Error Description “Alias name already used” SQL types SELECT Reasons why You have used an alias name more than once. Notes You can link an alias name to one identifier; if you use the same alias name for multiple identifiers, Sadas returns this error. From this point of view, there is no difference between an alias name used for a column and an alias name used for a table, or for others identifier types. In the error message Sadas returns also the alias name used incorrectly. Examples of error a. SELECT C1 AS A, C2 AS A [...] ^ - Alias name already used (A) b. SELECT C1 AS A FROM T AS A [...] ^ - Alias name already used (A) c. SELECT * FROM T1 AS A, T2 AS A ^ - Alias name already used (A) © 2014 Advanced Systems srl Sadas Database SQL Errors 338 12.22 SDS-0021 "Wrong use of function TO_TIMESTAMP" Error Code 0021 Error Description “Wrong use of function TO_TIMESTAMP” SQL types SELECT Reasons why Sadas cannot convert to valid timestamp the input string. Notes TO_TIMESTAMP TIMESTAMP converts char, character, varchar or timestamp to a value of datatype. If string is not a TIMESTAMP, Sadas returns this error. The input string must have the default TIMESTAMP format of Sadas: ‘DD/MM/YYYY-HH:MI:SS:MS’ Examples of error a. SELECT TO_TIMESTAMP('01/XX/2000-12:12:03.000') FROM DUAL ^ - Wrong use of function TO_ TIMESTAMP b. SELECT TO_TIMESTAMP('01/01-2000-12:12:03.000') FROM DUAL ^ - Wrong use of function TO_ TIMESTAMP 12.23 SDS-0022 "Illegal GROUP BY clause" Error Code 0022 Error Description “Illegal GROUP BY clause” SQL types SELECT Reasons why GROUP BY clause does not satisfy Sadas grammar. Notes A group by clause must satisfy Sadas grammar; follow some main rules: You can use only aggregate functions: [COUNT, MIN, MAX, SUM, AVG, STDDEV, VARIANCE] Each operand in SELECT clause, which is not an aggregation, must be also in GROUP BY clause. Each operand in GROUP BY clause must be also in SELECT clause. Examples of error a. SELECT A, B FROM T GROUP BY A © 2014 Advanced Systems srl Sadas Database SQL Errors 339 ^ - Illegal GROUP BY clause b. SELECT A FROM T GROUP BY A, B ^ - Illegal GROUP BY clause c. SELECT A FROM T GROUP BY B ^ - Illegal GROUP BY clause 12.24 SDS-0023 "Alias name is already a column name" Error Code 0023 Error Description “Alias name is already a column name” SQL types SELECT Reasons why You have used an alias name, already used for a column name. Notes Sadas returns this error when an alias name is already present in the catalog as a column name. In SQL script context, an alias is a new identifier; therefore it cannot be an identifier name already present in the context. For example, alias name can be a column name of a table not used in current SQL script. After parsing, Sadas can assign any alias name to identifiers, to simplify the query. Examples of error a. SELECT A,B,C FROM T AS C ^ - Alias name is already a column name (C) b. SELECT A,B,C as A FROM T ^ - Alias name is already a column name (A) 12.25 SDS-0024 "Illegal operation on operands" Error Code 0024 Error Description “Illegal operation on operands” SQL types SELECT Reasons why You have used an operator inconsistent with operands. Notes The arithmetic operators (*, +, /, -) are consistent only with numeric operands; the plus © 2014 Advanced Systems srl Sadas Database SQL Errors 340 operator (+) can be used with string. No arithmetic operators can be used with date , time or timestamp. In this error message Sadas returns also wrong operator and wrong datatype. Example of error If A and B are string columns: SELECT A - B FROM [...] ^ - Illegal operation on operands (- <-> string) 12.26 SDS-0025 "Wrong number of parameters" Error Code 0025 Error Description “Wrong number of parameters” SQL types SELECT Reasons why You have used a function with wrong number of parameters. Notes Each function accepted by Sadas has a defined number of input parameters. If you specify a different number of parameters, Sadas returns this error. In this error message Sadas returns also the function name. Examples of error a. SELECT SUM(A,B) FROM [...] ^ - Wrong number of parameters (SUM) b. SELECT MOD(A) FROM [...] ^ - Wrong number of parameters (MOD) 12.27 SDS-0026 "Illegal function in the context" Error Code 0026 Error Description “Illegal function in the context” SQL types SELECT © 2014 Advanced Systems srl Sadas Database SQL Errors Reasons why 341 You have used an aggregate function in WHERE clause or in GROUP BY clause. Notes The aggregate functions [COUNT, MAX, MIN, SUM, AVG, STDDEV, VARIANCE] cannot be used in WHERE clause and in GROUP BY clause. In this error message Sadas returns also the name of the function used incorrectly. Examples of error a. [...] WHERE Sum(A) > 0 [...] ^ - Illegal function in the context (SUM) b. [...] GROUP BY Count(*) [...] ^ - Illegal function in the context (COUNT) 12.28 SDS-0027 "Improper use of alias name" Error Code 0027 Error Description “Improper use of alias name” SQL types SELECT Reasons why You have used an alias name, already used for an operand, in FROM clause. Notes The aliases are defined in SELECT and FROM clauses, so you can use these only in other clauses of the script SQL. You can use the table aliases also as prefix of column in SELECT clause. In this error message Sadas returns also the alias name used incorrectly. Example of error SELECT C AS A FROM A ^ - Improper use of alias name (A) 12.29 SDS-0028 "Unloaded table" Error Code © 2014 Advanced Systems srl 0028 Sadas Database SQL Errors 342 Error Description “Unloaded table” SQL types SELECT Reasons why Specified table is not loaded and so it is not usable. Notes In a Sadas schema/database you cannot query a table with zero records, although this table is defined in current schema/database. You can query the only loaded tables. This is not an error in query structure, but it refers to the table status in current schema/database. In this error message Sadas returns also the unloaded table name. Example of error In this example, T is an unloaded table. SELECT * FROM T ^ - Unloaded table (T) 12.30 SDS-0029 "Unsupported function/operation" Error Code 0029 Error Description “Unsupported function/operation” SQL types SELECT Reasons why You are trying to execute a SQL script not supported by Sadas. Notes In SQL language of Sadas there are some limits; main limits of actual release of Sadas are: Cyclic (b. example) or not complete (a. example) join graphs are not supported. In join queries with explicit join clauses, involving more than two tables, the graph must be star schema or snow flake schema (c. example). Only equi-join is supported (d. example). In join queries without explicit join clauses (implicit join), you must have relations between tables only of type Foreign Key Primary Key (e. example). You cannot use nested queries with NOT IN clause. You can use nested queries with IN clause, if sub-queries are not correlated. IN and NOT IN clauses can be used with list of constant values (g. example). © 2014 Advanced Systems srl Sadas Database SQL Errors 343 The form T.* is not supported in SELECT clause (h. example). Multiple use of COUNT(*) is not allowed (i. example). In HAVING clause you can specify only a linear sequence of conditions in AND or a linear sequence of conditions in OR (l. example). Sadas does not support correlated sub-queries, scalar sub-query with more than one operand, having clause in sub-query (o. example). Examples of error a. SELECT * FROM T1 INNER JOIN T2 ON T1.C1 = T2.C2, T2 INNER JOIN T1 ON T2.C2 = T1.C1 Unsupported function/operation (error in join (graph not supported)) This join generate a cyclic graph T1 -> T2 -> T1; the error occurs also in implicit join. b. SELECT * FROM T1 INNER JOIN T2 ON T1.C1 = T2.C2, T3 INNER JOIN T4 ON T3.C3 = T4.C4 Unsupported function/operation (error in join (graph not supported)) This join generate a not complete graph T1 -> T2--T3 -> T4; the error occurs also in implicit join. c. SELECT * FROM T1 INNER JOIN T2 ON T1.C1 = T2.C2, T2 INNER JOIN T3 ON T2.C2 = T3.C3, T2 INNER JOIN T4 ON T2.C2 = T4.C4 Unsupported function/operation (error in join (graph not supported)) This join generate a not resolvable graph: T1 -> T2 -> T3 ("snow flake") T2 -> T4 ("star schema" with T3) d. SELECT * FROM T1, T2 WHERE T1.C1 <> T2.C2 Unsupported function/operation (T1."C1" != T2."C2") e. SELECT * FROM T WHERE C NOT IN (SELECT A FROM T1) Unsupported function/operation (T NOT IN) f. SELECT T.* FROM T [...] © 2014 Advanced Systems srl Sadas Database SQL Errors 344 Unsupported function/operation (T.*) g. SELECT COUNT(*), C, [...], COUNT(*) FROM T GROUP BY C Unsupported function/operation (COUNT(*) ... COUNT(*)) h. SELECT C,Count(*) GROUP BY C HAVING Count(*)>0 AND Count(*)<10 OR Count (*)<>5 Unsupported function/operation (((COUNT(*) > 0) AND (COUNT(*) < 10)) OR (COUNT(*) != 5)) i. SELECT * FROM T WHERE C IN (SELECT T.A FROM T1) Unsupported function/operation (correlated (dynamic) sub-query) l. SELECT * FROM T WHERE C IN (SELECT A, B, C FROM T1) Unsupported function/operation (too many expressions in SELECT clause or FROM clause) m. SELECT * FROM T WHERE C IN (SELECT A FROM T1 ... HAVING ...) Unsupported function/operation (HAVING clause in sub-query) 12.31 SDS-0030 "Wrong use of function TO_TIME" Error Code 0030 Error Description “Wrong use of function TO_TIME” SQL types SELECT Reasons why Sadas cannot convert to valid time the input string. Notes TO_TIME converts char, character, varchar or timestamp to a value of TIME datatype. If string is not a TIME, Sadas returns this error. The input string must have the default TIMES format of Sadas: ‘HH:MI:SS:MS’ Examples of error a. SELECT TO_TIME('12-12:03.000') FROM DUAL ^ - Wrong use of function TO_ TIME © 2014 Advanced Systems srl Sadas Database SQL Errors 345 b. SELECT TO_TIME('01/01-2000-xx:12:03.000') FROM DUAL ^ - Wrong use of function TO_ TIMESTAMP 12.32 SDS-0031 "Illegal ORDER BY clause" Error Code 0031 Error Description “Illegal ORDER BY clause” SQL types SELECT Reasons why ORDER BY clause does not satisfy Sadas grammar. Notes An order by clause must satisfy Sadas grammar; following this main rule: Each operand in ORDER BY clause must be also in SELECT clause. Examples of error SELECT A FROM T ORDER BY B ^ - Illegal ORDER BY clause 12.33 SDS-0032 "Improper use of DISTINCT clause" Error Code 0032 Error Description “Improper use of DISTINCT clause” SQL types SELECT Reasons why You have done an improper use of DISTINCT clause in an aggregate function. Notes In an aggregate functions, DISTINCT clause can be used only in COUNT function. In this error message Sadas returns also the function name used incorrectly. Example of error SELECT SUM(DISTINCT A) FROM T ^ - Improper use of DISTINCT clause (SUM) © 2014 Advanced Systems srl Sadas Database SQL Errors 346 12.34 SDS-0033 "Internal error; analyze the context!" Error Code 0033 Error Description “Internal error; analyze the context!” SQL types All Reasons why Serious error in Parser SQL or in Optimizer of Sadas. Notes Sadas has encountered a unexpected situation during parsing, analyze or create access plan of a query. You must analyze the context: script SQL, Catalog configuration, Sadas Server settings, HW/SW system. It isn’t a query error, but a Sadas error. 12.35 SDS-0034 "GROUP BY clause required in this case" Error Code 0034 Error Description “GROUP BY clause required in this case” SQL types SELECT Reasons why SELECT clause requires a GROUP BY clause. Notes A SQL script can have in SELECT clause column, expression, function and aggregate function. If there are simultaneously aggregate functions and column/expression/other functions, then GROUP BY clause is required. Example of error SELECT A, Count(*) FROM T ^ - GROUP BY clause required in this case 12.36 SDS-0035 "Expected a constant positive expression in column definition" Error Code 0035 Error Description “Expected a constant positive expression in column definition” © 2014 Advanced Systems srl Sadas Database SQL Errors 347 SQL types CREATE, ALTER Reasons why Definition column parameters must be integer positive numbers. Notes The main definition column parameters are size, precision and scale. These parameters can be also expressions, but must be always positive integer. Examples of error a. CREATE TABLE T (C CHAR (0)) ^ - Expected a constant positive expression in column definition b. CREATE TABLE T (C CHAR (1 - 2)) ^ - Expected a constant positive expression in column definition 12.37 SDS-0036 "Invalid column description" Error Code 0036 Error Description “Invalid column description” SQL types CREATE, ALTER Reasons why Column description is wrong. Notes Column description follows these main rules: String datatypes (CHAR, CHARACTER, VARCHAR) must not have decimals (a. example). Integer datatypes (INT, INTEGER, SMALLINT) must not have decimals (b. example). Numeric datatypes (NUMBER, FLOAT, REAL, FLOAT, DOUBLE PRECISION, DEC, DECIMAL, NUMERIC) must have number of decimals (scale) less than total size (precision) (c. example). CODE, DATE, TIME, TIMESTAMP datatypes have not size and scale (d. example). The use of a unknown datatype generates syntax error (SDS-0009) (e. example). Examples of error © 2014 Advanced Systems srl Sadas Database SQL Errors 348 a. CREATE TABLE T(C CHAR(5,1)) ^ - Invalid column description b. CREATE TABLE T(I INT(5,1)) ^ - Invalid column description c. CREATE TABLE T(D DEC(5,5)) ^ - Invalid column description d. CREATE TABLE T(I CODE(5)) ^ - Invalid column description e. CREATE TABLE T (C UnTipo (5)) ^ - Syntax error 12.38 SDS-0037 "Table/view already exists" Error Code 0037 Error Description “Table/view/synonyn already exists” SQL types CREATE, DUPLICATE Reasons why Sadas catalog cannot have two objects (table/view/synonym) with the same name. Notes You are trying to create or duplicate a Sadas object (table or view) that already exists in the catalog. In this error message Sadas returns also the object name that already exists. Example of error In this example T is a table already defined. CREATE TABLE T ([...]) ^ - Table/view/synonym already exists (T) 12.39 SDS-0038 "Table/view does not exist" Error Code 0038 Error Description “Table/view/synonym does not exist” © 2014 Advanced Systems srl Sadas Database SQL Errors SQL types 349 ALTER, DROP, LOAD, GRANT, REVOKE, DUPLICATE, APPEND TABLE, UPDATE, TRUNCATE. Reasons why Sadas tries to manipulate a table/view/synonym that does not exist in the catalog. Notes You are trying to manipulate a Sadas object (table or view) that does not exist in the catalog. In this error message Sadas returns also the object name that does not exist. Examples of error In this example T does not exist in the catalog. a. ALTER TABLE T ([...]) ^ - Table/view/synonym does not exist (T) b. GRANT PR_SELECT ON T TO User ^ - Table/view/synonym does not exist (T) 12.40 SDS-0039 "Invalid constraint" Error Code 0039 Error Description “Invalid constraint” SQL types CREATE, ALTER. Reasons why The defined constraint is not valid. Notes In Sadas the supported constraints are PRIMARY KEY and FOREIGN KEY. You are trying to create a constraint that use an undefined column. You can define constraints syntactically in two ways: As part of the definition of an individual column or attribute. This is called inline specification. As part of the table definition. This is called out-of-line specification. This error refers only to out-of-line specification. In this error message Sadas returns also the undefined column that you are trying to use for constraint. © 2014 Advanced Systems srl Sadas Database SQL Errors 350 Examples of error In this example A is a undefined column. CREATE TABLE T (PRIMARY KEY (A), [...]) ^ - Invalid constraint (A) 12.41 SDS-0040 "Primary key is not unique" Error Code 0040 Error Description “Primary key is not unique” SQL types CREATE, ALTER. Reasons why Sadas has encountered multiple primary keys in a table/view. Notes Sadas does not support constraints on multiple columns. This error refer to the case of multiple columns defined as primary key. In this error message Sadas returns also the column name for invalid primary key. Example of error CREATE TABLE T (A CHAR(32), PRIMARY KEY (A), B CHAR (10) PRIMARY KEY) ^ - Primary key is not unique (B) 12.42 SDS-0041 "Table/view auto-reference through FOREIGN KEY" Error Code 0041 Error Description “Table/view auto-reference through FOREIGN KEY” SQL types CREATE, ALTER. Reasons why Sadas has encountered a foreign key defined on the same table. Notes SADAS does not support self join, so you cannot define a foreign key that references the same table. © 2014 Advanced Systems srl Sadas Database SQL Errors 351 In this error message Sadas returns also the auto-referenced table name. Example of error CREATE TABLE T (A CHAR (32) FOREIGN KEY REFERENCES T(A), [...] ^ - Table/view auto-reference thru FOREIGN KEY (T) 12.43 SDS-0042 "Duplicated FOREIGN KEY" Error Code 0042 Error Description “Duplicated FOREIGN KEY” SQL types CREATE, ALTER. Reasons why SADAS has encountered two identical foreign keys in this table. Notes You may define multiple foreign keys on a single column; these foreign keys must reference different tables and different columns. In this error message SADAS returns also the specifics of the foreign key: base column, external table referenced, external column referenced. Example of error CREATE TABLE T (A CHAR (16) FOREIGN KEY REFERENCES T1(C1) FOREIGN KEY REFERENCES T1(C1)) ^ - Duplicate FOREIGN KEY (A -> T1 / "C1") 12.44 SDS-0043 "Column isn’t a PRIMARY KEY" Error Code 0043 Error Description “Column isn’t a PRIMARY KEY” SQL types CREATE, ALTER. Reasons why Sadas has encountered a not primary key column referenced by a foreign key. Notes © 2014 Advanced Systems srl Sadas Database SQL Errors 352 The foreign key definition requires that the external column must be primary key in the external table. In this error message Sadas returns also the external table referenced and the external column referenced. Example of error CREATE TABLE T (A CHAR (16) FOREIGN KEY REFERENCES T1(C1) [...] ^ - Column isn’t a PRIMARY KEY (T1 / "C1") 12.45 SDS-0044 "Column already exists" Error Code 0044 Error Description “Column already exists” SQL types CREATE, ALTER. Reasons why You are trying to create an already existing column. Notes This error can occur in two situations: 1. CREATE: the column already exists in preceding definitions in the same SQL create script (a. example). 2. ALTER : the column already exists in preceding modifies in the same SQL alter script or in modified table/view (b. example). In this error message Sadas returns also the already existing column name. Examples of error a. CREATE TABLE T (A CHAR (16), B CHAR (15), A CODE) ^ - Column already exists (A) b. ALTER TABLE T ADD(A CHAR(10) [...] ^ - Column already exists (A) © 2014 Advanced Systems srl Sadas Database SQL Errors 353 12.46 SDS-0045 "Type mismatch for FOREIGN KEY" Error Code 0045 Error Description “Type mismatch for FOREIGN KEY” SQL types CREATE, ALTER. Reasons why The column of a foreign key, is of a different datatype of external column. Notes The columns involved in a link [FOREIGN KEY PRIMARY KEY] must be of the same datatype. In this error message Sadas returns also the external table referenced and the external column referenced. Example of error CREATE TABLE T (E CHAR (1) FOREIGN KEY REFERENCES TE(CP)) ^ - Type mismatch for FOREIGN KEY (TE / "CP") 12.47 SDS-0046 "Invalid NOT STAR JOIN: SELECT clause cannot contain fields of right table" Error Code 0046 Error Description “Invalid NOT STAR JOIN: SELECT clause cannot contain fields of right table” SQL types SELECT. Reasons why The context of NOT STAR JOIN is invalid. Notes Sadas does not need (and does not support) the EXIST and NOT IN clause for anti-join type, but it has an explicit special clause: NOT STAR JOIN. When you specify a NOT STAR JOIN clause you cannot select fields from right table, because with this join type you want rows from the left side of the predicate for which there are no corresponding rows on the right side of the © 2014 Advanced Systems srl Sadas Database SQL Errors 354 predicate. In error message Sadas returns also the name of roght table. Example of error SELECT T1.C1, T2.C2 FROM T1 NOT STAR JOIN T2 ON T1.Cj1 = T2.Cj2 ^ - Invalid NOT STAR JOIN: SELECT clause cannot contain fields of right table (T2) 12.48 SDS-0047 "The comparison value for the coded field is too long" Error Code 0047 Error Description “The comparison value for the coded field is too long” SQL types SELECT. Reasons why The comparison value for the coded field is too long. Notes You can use CODE fields in conditions using the value of the BASE. The length of the BASE for a CODE field is fixed and accessible in the catalog. Example of error In this example the BASE length for CODE field C is 2. SELECT * FROM T WHERE C > 'ABC' ^ - The comparison value for the coded field is too long (3 > 2) 12.49 SDS-0048 "Database already exists" Error Code 0048 Error Description “Database already exists” SQL types CREATE, DUPLICATE Reasons why Sadas catalog cannot have two schema/databases with the same name. Notes You are trying to create or duplicate a Sadas schema/database that already exists in the catalog. In this error message Sadas returns also the schema/database name that already exists. © 2014 Advanced Systems srl Sadas Database SQL Errors 355 Examples of error In this example D is a schema/database already defined. a. CREATE DATABASE D ^ - Database already exists (D) b. DUPLICATE DATABASE O TO D ^ - Database already exists (D) 12.50 SDS-0049 "Database does not exist" Error Code 0049 Error Description “Database does not exist” SQL types DROP, LOAD, CONNECT, TRUNCATE. Reasons why Sadas tries to manipulate a schema/database that does not exist in the catalog. Notes You are trying to manipulate a Sadas schema/database that does not exist in the catalog. In this error message Sadas returns also the schema/database name that does not exist. Examples of error In this example D does not exist in the catalog. a. DROP DATABASE D ^ - Database does not exist (D) b. CONNECT Utente Password @ D ^ - Database does not exist (D) 12.51 SDS-0050 "Illegal DISTINCT clause" Error Code 0050 Error Description “Illegal DISTINCT clause” SQL types SELECT. Reasons why Sadas has encountered an illegal DISTINCT clause on columns, © 2014 Advanced Systems srl Sadas Database SQL Errors 356 expressions or functions in SELECT clause. Notes You cannot use DISTINCT clause in main following cases: On functions not of aggregations. On single column or expression. This error refers DISTINCT clause used for a operand of SELECT clause; it does not refer general DISTINCT clause. This error message contains a note about bad form of DISTINCT clause. Examples of error a. SELECT C1, DISTINCT ABS(C2) FROM T ^ - Illegal DISTINCT clause (ABS([?.]"C2")) b. SELECT C1, DISTINCT C2 FROM T ^ - Illegal DISTINCT clause ("[?.]C2") 12.52 SDS-0051 "Too many DISTINCT clauses" Error Code 0051 Error Description “Too many DISTINCT clauses” SQL types SELECT. Reasons why Sadas has encountered too many DISTINCT clauses in SELECT clause. Notes You cannot use multiple DISTINCT clauses in SELECT clause, although these clauses are formally correct. Example of error SELECT C1, DISTINCT SUM(C2), DISTINCT AVG(C3) FROM T ^ - Too many DISTINCT clauses (not unique DISTINCT) © 2014 Advanced Systems srl Sadas Database SQL Errors 357 12.53 SDS-0052 "Non executable SQL" Error Code 0052 Error Description “Non executable SQL” SQL types SELECT. Reasons why Sadas has encountered a SQL not yet supported. Notes This message reports that, in the current Sadas release, it’s not possible to execute the input SQL script. For example, the SQL scripts needing cartesian product are not executables. These queries are syntactically corrects, but not executable by Sadas. Examples of error In following query there is a cartesian product. a. SELECT * FROM T1, T2 ^ - Non executable SQL The following query is not an implicit join for OR condition. b. SELECT * FROM T1, T2 WHERE T1.Fk = T2.Pk AND T1.C1 > 0 OR T2.C2 > 0 ^ - Non executable SQL The following query is not an implicit join because there are too many tables in FROM clause c. SELECT * FROM T1, T2, T1 WHERE T1.Fk = T2.Pk ^ - Non executable SQL 12.54 SDS-0053 "Illegal UNION [ALL]/INTERSECT/MINUS" Error Code 0053 Error Description “Illegal UNION [ALL]/INTERSECT/MINUS” SQL types SELECT. Reasons why Sadas has encountered a bad collect of SELECT queries. Notes You can collect multiple SELECT queries through the set operators [UNION [ALL], INTERSECT, MINUS]; © 2014 Advanced Systems srl the set operators must satisfy following main rules: Sadas Database SQL Errors 358 SELECT clause and GROUP BY clause must have the same number of operands. The corresponding operands must be of the same datatype. You need use of parenthesis using MINUS and INTERSECT consecutively. Examples of error a. SELECT * FROM T1 UNION SELECT * FROM T2 ^ - Illegal UNION [ALL]/INTERSECT/MINUS (different number of operands in SELECT) In this query C1 and C2 are not compatibles. b. select l_tax, l_quantity from lineitem union all select l_tax, l_comment from lineitem ^ - Illegal UNION [ALL]/INTERSECT/MINUS (different type in select operands; operand no. 2 INTEGER (LINEITEM.L_QUANITY) <-> STRING (LINEITEM.L_COMMENT)) In this query there is a single GROUP BY clause c. select l_tax, l_quantity from lineitem where l_quantity < 10 group by l_tax, l_quantity union all select l_tax, l_quantity from lineitem where l_quantity > 10 ^ - Illegal UNION [ALL]/INTERSECT/MINUS (each query must contain the group by clause) In this query there are MINUS and INTERSECT used consecutively d. select l_quantity from lineitem minus select l_quantity from lineitem intersect select l_quantity from lineitem ^ - Illegal UNION [ALL]/INTERSECT/MINUS (unable to establish priority in the © 2014 Advanced Systems srl application of such opertors; use of parenthesis is Sadas Database SQL Errors 359 compulsary) 12.55 SDS-0054 "User has no rights to execute this command" Error Code 0054 Error Description “User has no rights to execute this command” SQL types All. Reasons why The user connected has not proper privileges to execute the current command. Notes In Sadas security there are five privilege types: 1. PR_CATALOG : CREATE TABLE, CREATE VIEW, CREATE DATABASE, ALTER, DROP TABLE, DROP VIEW, DROP DATABASE, DUPLICATE DATABASE, DUPLICATE TABLE. 2. PR_DESCRIBE: DESCRIBE. 3. PR_LOAD : LOAD, APPEND, UPDATE, DELETE, EXEC STORED QUERIES. 4. PR_SECURITY: CREATE USER, DROP USER, GRANT, REVOKE. 5. PR_SELECT SYSDBA : SELECT. is the Sadas system user who has all privileges. This error refers the defined privileges for the current user. Example of error In this situation, the current user has not PR_SELECT privilege. SELECT [...] ^ - User has no rights to execute this command 12.56 SDS-0055 "Wrong hidden condition" Error Code 0055 Error Description “Wrong hidden condition” SQL types SELECT. © 2014 Advanced Systems srl Sadas Database SQL Errors Reasons why 360 An hidden condition is incorrect. Notes Sadas allows to define hidden conditions on a table for a user, to reduce the visible data to the user. Sadas adds these conditions in AND to user conditions, so you can find errors in hidden conditions too. It is not possible to manage hidden conditions through SQL scripts, so, in case of this error, you must contact the system administrator. Example of error In this situation there is the a wrong hidden condition (C > 0) on table T. SELECT [...] FROM T [...] ^ - Wrong hidden condition (Unknown column name - C) 12.57 SDS-0056 "The user does not exist" Error Code 0056 Error Description “The user does not exist” SQL types CONNECT, GRANT, REVOKE, DROP USER, DESCRIBE USER, DUPLICATE USER. Reasons why The specified user does not exist.. Notes You are trying to manage a not existing user. This error message contains also the user name not existing. Example of error DROP USER U ^ - The user does not exist (U) 12.58 SDS-0057 "User already exists" Error Code 0057 Error Description “User already exists” © 2014 Advanced Systems srl Sadas Database SQL Errors 361 SQL types CREATE USER, DUPLICATE USER. Reasons why The specified user already exists. Notes You are trying to create or duplicate an user already defined in SADAS: this error message contains also the user name already existing. Example of error CREATE USER U ^ - The user already exist (U) 12.59 SDS-0058 "No database available" Error Code 0058 Error Description “No database available” SQL types SELECT, CREATE TABLE, CREATE VIEW, CREATE USER, ALTER, DROP TABLE, DROP VIEW, DROP USER, LOAD TABLE, APPEND, UPDATE, GRANT, REVOKE, TRUNCATE, EXECUTE STORED QUERIES, DESCRIBE. Reasons why The database/schema catalog is not opened for command requested. Notes To execute most SQL commands, you must be connected to a database/schema. 12.60 SDS-0059 "No user connected" Error Code 0059 Error Description “No user connected” SQL types All (except CONNECT). Reasons why The user is not connected to database/schema Notes To execute all commands, you must be connected to database/schema. © 2014 Advanced Systems srl Sadas Database SQL Errors 362 12.61 SDS-0060 "Cannot DROP current database" Error Code 0060 Error Description “Cannot DROP current database” SQL types DROP DATABASE. Reasons why The user is trying to drop current database/schema. Notes You cannot drop the database to which you are currently connected. This error message contains also the current database/schema name. Example of error In this query D is the current database/schema. DROP DATABASE D ^ - Cannot DROP current database (D) 12.62 SDS-0061 "Division by zero" Error Code 0061 Error Description “Division by zero” SQL types SELECT. Reasons why Sadas has encountered a division by zero. Notes Sadas has encountered a division by zero during execution of query or during simplifying query; there are two main cases: 1. A visible division by zero in SQL script (a. example). 2. A division by zero by executing a query expression (b. example). 3. Example of error In this query D is the current database/schema. a. SELECT A / (3 - 2 - 1) [...] ^ - Division by zero b. SELECT A / B [...] ^ - Division by zero © 2014 Advanced Systems srl Sadas Database SQL Errors 363 12.63 SDS-0062 "Wrong use of function NEXT_DAY" Error Code 0062 Error Description “Wrong use of function NEXT_DAY” SQL types SELECT. Reasons why Sadas has encountered a bad use of function NEXT_DAY. Notes NEXT_DAY accepts in input two parameters (date , char) and returns the date of the first weekday named by char that is later than the date date. The argument char must be a day of the week in the date language of your session, either the full name or the abbreviation. Sadas returns this error when char parameter is bad; this parameter must follow these main rules: This parameter must be a constant string. This parameter must be a valid day name (complete or short) in your language session. Examples of error In this example the language of the session is English. a. SELECT NEXT_DAY('02/01/2001','TUESDAM') as "NEXT DAY" ^ - Wrong use of function NEXT_DAY b. SELECT NEXT_DAY('02/01/2001','TM') as "NEXT DAY" ^ - Wrong use of function NEXT_DAY 12.64 SDS-0063 "LPAD/RPAD functions: the second parameter must be a not negative integer constant" Error Code 0063 Error Description LPAD/RPAD function: the second parameter must be a not negative integer constant. SQL types SELECT. Reasons why Sadas has encountered a bad parameter (the second) in functions LPAD/ RPAD. Notes The second parameter of functions LPAD/RPAD must be a not negative integer constant. It © 2014 Advanced Systems srl Sadas Database SQL Errors 364 cannot be a column or an expression. Example of error SELECT LPAD(C,3 / 4) [...] ^ - LPAD/RPAD function: the second parameter must be a not negative integer constant 12.65 SDS-0064 "LPAD/RPAD functions: the third parameter must be a char" Error Code 0064 Error Description LPAD/RPAD functions: the third parameter must be a char. SQL types SELECT. Reasons why Sadas has encountered a bad parameter (the third) in functions LPAD/ RPAD. Notes The third parameter of functions LPAD/RPAD must be a char. It can be a column or an expression. Example of error SELECT LPAD(C,20,'ab') [...] ^ - LPAD/RPAD functions: the third parameter must be a char 12.66 SDS-0065 "SUBSTR function accepts only not negative integer parameters" Error Code 0065 Error Description SUBSTR function accepts only not negative integer parameters. SQL types SELECT. Reasons why Sadas has encountered a bad parameter in SUBSTR function. Notes The second and the third parameter of SUBSTR function must not be negative integer. © 2014 Advanced Systems srl Sadas Database SQL Errors 365 Example of error SELECT substr(l_comment,-1,6) FROM lineitem ^ - SUBSTR function accepts only not negative integer parameters 12.67 SDS-0066 "Root of a negative number" Error Code 0066 Error Description Root of a negative number. SQL types SELECT. Reasons why Sadas has encountered a root of a negative number. Notes There are two functions that can generate a root of a negative number: 1. SQRT 2. POWER In the first case you can never do a square root of a negative number. In the second case you cannot do a power function of a negative number when the exponent has a fractional part. Sadas can encounter a root of a negative number during execution of query or during simplifying query; there are two main cases: 1. A visible root of a negative number in SQL script (a. b. example). 2. A root of a negative number by executing a query expression (c. d. example). Examples of error a. SELECT SQRT(-10) FROM DUAL ^ - Root of a negative number b. SELECT POWER(-2,0.3) FROM DUAL ^ - Root of a negative number In following examples L_TAX numeric field assumes negative values. c. SELECT SQRT(L_TAX) FROM DUAL © 2014 Advanced Systems srl Sadas Database SQL Errors 366 ^ - Root of a negative number d. SELECT POWER(L_TAX,0.3) FROM DUAL ^ - Root of a negative number 12.68 SDS-0067 "Improper use of INFO/SHADOW keywords" Error Code 0067 Error Description Improper use of INFO/SHADOW keywords. SQL types DESCRIBE TABLE. Reasons why The user have tried to use INFO or SHADOW keywords improperly. Notes In DESCRIBE TABLE command you can specify two additional keywords: 1. INFO : To obtain the loading statistic information about table. 2. SHADOW: If you change structure of a loaded table, the changes to the table are not immediately available, but Sadas creates a copy of catalog structure of the table (shadow table). To obtain the description of the shadow table you can use the SHADOW keyword. The use of these two keywords follows some main rules: You cannot use simultaneously these two keywords (a. example). You must use one of these keywords only after SELECT clause (b. example). Examples of error a. DESCRIBE INFO T1, SHADOW T2, T3 ^ - Improper use of INFO/SHADOW keywords b. DESCRIBE T1, INFO T2, T3 ^ - Improper use of INFO/SHADOW keywords 12.69 SDS-0068 "Illegal HAVING clause" Error Code 0068 Error Description Illegal HAVING clause. © 2014 Advanced Systems srl Sadas Database SQL Errors 367 SQL types SELECT. Reasons why Sadas has encountered a bad HAVING clause. Notes In the HAVING clause you can refer only expressions or fields belonging to GROUP BY clause. In HAVING clause you can specify only a linear sequence of conditions in AND or a linear sequence of conditions in OR; this limit is managed by error 0029. Example of error select l_quantity,sum(l_extendedprice) from lineitem group by l_quantity having L_EXTENDEDPRICE > 0 ^ - Illegal HAVING clause (expression inconsistent or not present in the query) 12.70 SDS-0069 "Illegal use of function TRANSLATE" Error Code 0069 Error Description Illegal use of function TRANSLATE. SQL types SELECT. Reasons why The specified parameters for TRANSLATE function are not corrects. Notes TRANSLATE returns expr (first parameter) with all occurrences of each character in from_string (second parameter) replaced by its corresponding character in to_string (third parameter). The second parameter must have a length equal or greater then third parameter. Example of error SELECT TRANSLATE(C,'ab','xyz') [...] ^ - Illegal use of function TRANSLATE (length('ab') 2 < length('xyz') 3) © 2014 Advanced Systems srl Sadas Database SQL Errors 368 12.71 SDS-0070 "Table has not a PRIMARY KEY" Error Code 0070 Error Description This table has not a PRIMARY KEY. SQL types CREATE, ALTER, UPDATE. Reasons why The specified table has not a PRIMARY KEY to be referenced by a FOREIGN KEY. Notes In a CREATE TABLE or ALTER TABLE/VIEW commands you can specify a FOREIGN KEY, without specify the field of the referenced table: if the referenced table has not a PRIMARY KEY, then Sadas returns this error. The UPDATE TABLE/<columns list> command is a load process and it is possible only on tables with PRIMARY KEY: if you try to start an update process on table without primary key, Sadas returns this error. This error message contains also the table name without PRIMARY KEY. Example of error a. CREATE TABLE N (C CHAR (16) FOREIGN KEY REFERENCES T) ^ - This table has not a PRIMARY KEY (T) b. UPDATE TABLE N […] ^ - This table has not a PRIMARY KEY (N) 12.72 SDS-0071 "Database ID is wrong (<> 10 characters)" Error Code 0071 Error Description Database ID is wrong (<> 10 characters). SQL types DUPLICATE DATABASE. Reasons why The specified Database ID has wrong length. Notes In DUPLICATE DATABASE command you can specify the DATABASE ID of new database. The © 2014 Advanced Systems srl Sadas Database SQL Errors DATABASE ID 369 follows these main rules: Sadas catalog cannot contains multiple DATABASE having the same ID (error 0072). The DATABASE ID must be of 10 characters (this error). This error message contains also the wrong DATABASE ID. Example of error DUPLICATE DATABASE O TO D @ '123456789' ^ - Database ID is wrong (<> 10 characters) (123456789) 12.73 SDS-0072 "Database ID already exists" Error Code 0072 Error Description Database ID already exists. SQL types DUPLICATE DATABASE. Reasons why The specified Database ID already exists. Notes In DUPLICATE DATABASE command you can specify the DATABASE ID of new database. The DATABASE ID follows these main rules: Sadas catalog cannot contains multiple DATABASE having the same ID (this error). The DATABASE ID must be of 10 characters (error 0071). This error message contains also the wrong DATABASE ID. Example of error DUPLICATE DATABASE O TO D @ 'A123456789' ^ - Database ID already exists (A123456789) 12.74 SDS-0073 "Wrong use of function DATEADD" Error Code 0073 Error Description Wrong use of function DATEADD. © 2014 Advanced Systems srl Sadas Database SQL Errors 370 SQL types SELECT. Reasons why Sadas has encountered bad parameters in DATEADD function. Notes The DATEADD function syntax has these parts: Part Description interval Required. String expression that is the interval you want to add. See Settings section for values. number Required. Numeric expression that is the number of interval you want to add. The numeric expression can either be positive, for dates in the future, or negative, for dates in the past. If the numeric expression has decimals or is float value, Sadas truncate the value. date Required. DATE, TIME or TIMESTAMP representing the datetime to which interval is added. Sadas returns this error when one of these parameters is wrong. This error message contains also an error description. Examples of error a. SELECT DateAdd(S,1,DATE) FROM T ^ - Wrong use of function DATEADD (first parameter is not a constant (S)) b. SELECT DateAdd('ZZ',1,DATE) FROM T ^ - Wrong use of function DATEADD (unknown interval (ZZ)) c. SELECT DateAdd('MI',1,DATE) FROM T ^ - Wrong use of function DATEADD (wrong interval value (MI)) d. SELECT DateAdd('YY',INTDEC,DATE) FROM T ^ - Wrong use of function DATEADD (second parameter must be an integer without decimals (INTDEC)) © 2014 Advanced Systems srl Sadas Database SQL Errors 371 12.75 SDS-0074 "Wrong use of function DATEDIFF" Error Code 0074 Error Description Wrong use of function DATEDIFF. SQL types SELECT. Reasons why Sadas has encountered bad parameters in DATEDIFF function. Notes The DATEDIFF function syntax has these parts: Part Description interval Required. String expression that is the interval you want to use to calculate the differences between date1 and date2. See Settings section for values. date1, Required. Date, time or timestamp expressions. Two dates you want to use in the date2 calculation. Sadas returns this error when one of these parameters is wrong. This error message contains also an error description. Examples of error a. SELECT DateDiff(S,DATE_1,DATE_2) FROM T ^ - Wrong use of function DATEDIFF (first parameter is not a constant) b. SELECT DateDiff('ZZ',DATE_1,DATE_2) FROM T ^ - Wrong use of function DATEDIFF (unknown interval) c. SELECT DateDiff('MI',DATE_1,DATE_2) FROM T ^ - Wrong use of function DATEADD (invalid parameter for specified interval) 12.76 SDS-0075 "Wrong use of function DATEPART" Error Code 0075 Error Description Wrong use of function DATEPART. © 2014 Advanced Systems srl Sadas Database SQL Errors 372 SQL types SELECT. Reasons why Sadas has encountered bad parameters in DATEPART function. Notes The DATEPART function syntax has these parts: Part Description interval Required. String expression that is the interval of time you want to return. See Settings section for values. date Required. Date, time or timestamp expression you want to evaluate. Sadas returns this error when one of these parameters is wrong. This error message contains also an error description. Examples of error a. SELECT DatePart(S,DATE) FROM T ^ - Wrong use of function DATEPART (first parameter is not a constant) b. SELECT DatePart('ZZ',DATE) FROM T ^ - Wrong use of function DATEPART (unknown interval) c. SELECT DatePart('MI',DATE) FROM T ^ - Wrong use of function DATEPART (invalid parameter for specified interval) 12.77 SDS-0078 "Wrong date" Error Code 0078 Error Description Wrong date. SQL types SELECT. Reasons why Sadas has encountered a bad date. Notes This error occurs only at run-time and when argument of function is a column. In function © 2014 Advanced Systems srl Sadas Database SQL Errors 373 TO_DATE Sadas tries to convert a string field in a date: Sadas returns this error when input value is not a valid date. Example of error In this example l_comment is a note field SELECT TO_TIMESTAMP(l_comment) FROM LINEITEM ^ - Wrong date 12.78 SDS-0079 "Wrong time" Error Code 0079 Error Description Wrong time. SQL types SELECT. Reasons why Sadas has encountered a bad time. Notes This error occurs only at run-time and when argument of function is a column. In function TO_TIME Sadas tries to convert a string field in a time: Sadas returns this error when input value is not a valid time. Example of error In this example l_comment is a note field SELECT TO_TIME(l_comment) FROM LINEITEM ^ - Wrong time 12.79 SDS-0089 "IN clause: expected constant expression" Error Code 0089 Error Description IN clause: expected constant expression. SQL types SELECT. Reasons why Sadas has encountered a not constant value after IN clause. Notes © 2014 Advanced Systems srl Sadas Database SQL Errors IN 374 clause, without sub-queries, allows only a list of constant values. Example of error SELECT * FROM T WHERE C IN ('Napoli',FIELD,'ROMA') ^ - IN clause: expected constant (FIELD)expression 12.80 SDS-0090 "TO_CHAR function: second and third parameter must be string constants" Error Code 0090 Error Description TO_CHAR function: second and third parameter must be string constants. SQL types SELECT. Reasons why Sadas has encountered bad parameters in function TO_CHAR. Notes In function TO_CHAR you can specify optionally the second and the third parameters. These parameters must be constant strings. Example of error SELECT TO_CHAR(l_shipdate, l_comment) FROM lineitem ^ - TO_CHAR function: second and third parameter must be string constants 12.81 SDS-0091 "TO_CHAR function: erroneous NLS description" Error Code 0091 Error Description TO_CHAR function: erroneous NLS description. SQL types SELECT. Reasons why Sadas has encountered bad NLS description in function TO_CHAR. Notes In function TO_CHAR you can specify optionally the third parameter, that represents the NLS description. When this parameter is a constant string, Sadas tries to validate this string as a © 2014 Advanced Systems srl Sadas Database SQL Errors 375 NLS description. Example of error SELECT TO_CHAR('05/01/2007', 'YY-MM-DD', 'NLS_LANGUAGE = LATIN') FROM DUAL ^ - TO_CHAR function: erroneous NLS description 12.82 SDS-0092 "TO_CHAR function: invalid numeric format model" Error Code 0092 Error Description TO_CHAR function: invalid numeric format model. SQL types SELECT. Reasons why Sadas has encountered bad numeric format model in function TO_CHAR. Notes In function TO_CHAR you can specify optionally the second parameter, that represents the model for conversion. When you are converting a numeric value, Sadas tries to validate the second parameter as a numeric model. Examples of error a. SELECT TO_CHAR(Num,'09XXXX') FROM T ^ - TO_CHAR function: invalid numeric format model (09XXXX) b. SELECT TO_CHAR(Num,'9.9EEE') FROM T ^ - TO_CHAR function: invalid numeric format model (9.9EEE) 12.83 SDS-0093 "TO_CHAR function: invalid date/time format model" Error Code 0093 Error Description TO_CHAR function: invalid date/time format model. SQL types SELECT. Reasons why Sadas has encountered bad date/time format model in function TO_CHAR. © 2014 Advanced Systems srl Sadas Database SQL Errors 376 Notes In function TO_CHAR you can specify optionally the second parameter, that represents the model for conversion. When you are converting a date, time or timestamp value, Sadas tries to validate the second parameter as a date/time model. Examples of error SELECT TO_CHAR(DATE,'DD-XX-YYYY') FROM T ^ - TO_CHAR function: invalid date/time format model (DD-XX-YYYY) 12.84 SDS-0094 "DECODE function: default parameter must be constant" Error Code 0094 Error Description DECODE function: default parameter must be constant. SQL types SELECT. Reasons why Sadas has encountered bad parameter in function TO_CHAR. Notes In function DECODE you can specify only expr and default parameters; in this case the default parameter (the second) must be a constant. Example of error SELECT DECODE(L_SHIPDATE,L_COMMENT) FROM LINEITEM ^ - DECODE function: second parameter must be constant (L_COMMENT) 12.85 SDS-0095 "Scalar sub-query must return an unique value" Error Code 0095 Error Description Scalar sub-query must return an unique value. SQL types SELECT. Reasons why Sadas has encountered a scalar sub-query that returns more than one value. © 2014 Advanced Systems srl Sadas Database SQL Errors 377 Notes In WHERE clause you can specify a condition that has a scalar sub-query as comparison value, so in this case the sub-query must return one value on one row. In the sub-query you can specify one expression with grouping function in the SELECT clause. Examples of error SELECT [...] FROM T WHERE C > (SELECT MAX(C1), MIN(C2) FROM T1) ^ - Scalar sub-query must return an unique value SELECT [...] FROM T WHERE C > (SELECT C1 FROM T1) ^ - Scalar sub-query must return an unique value SELECT [...] FROM T WHERE C > (SELECT 10 FROM DUAL) ^ - Scalar sub-query must return an unique value 12.86 SDS-0096 "Wrong DISTRIBUTE parameter" Error Code 0096 Error Description Wrong DISTRIBUTE parameter. SQL types SELECT. Reasons why Sadas has encountered a bad parameter in DISTRIBUTE clause. Notes You can do DISTRIBUTE clause only on one date column or numeric column. There are several configurations of parameter to construct a valid DISTRIBUTE clause. This error message indicates also the bad parameter. Examples of error a. SELECT [...] DISTRIBUTE A ON (-1) ^ - Wrong DISTRIBUTE parameter (wrong ranges number) In this example A is not a date column. b. SELECT [...] DISTRIBUTE A ON ('12/08/2000',10,3) ^ - Wrong DISTRIBUTE parameter © 2014 Advanced Systems srl Sadas Database SQL Errors 378 (type mismatch) c. SELECT [...] DISTRIBUTE A ON (10,9,...) ^ - Wrong DISTRIBUTE parameter (null interval) d. SELECT [...] DISTRIBUTE A ON ('01/01/2007',12,1,'mese') ^ - Wrong DISTRIBUTE parameter (unknown date descriptor) 12.87 SDS-0097 "Illegal DISTRIBUTE clause" Error Code 0097 Error Description Illegal DISTRIBUTE clause. SQL types SELECT. Reasons why DISTRIBUTE clause does not satisfy Sadas grammar. Notes A DISTRIBUTE clause must satisfy Sadas grammar and follow some main rules: You can use only following aggregate functions: [COUNT, MIN, MAX, SUM, AVG] Each operand in SELECT clause, which is not an aggregation, must be also in GROUP BY clause. Each operand in GROUP BY clause must be also in SELECT clause. You can specify only one operand in SELECT clause, that is not an aggregation. Examples of error a. SELECT A, B FROM T DISTRIBUTE A ^ - Illegal DISTRIBUTE clause b. SELECT A, B FROM T DISTRIBUTE A, B ^ - Illegal DISTRIBUTE clause c. SELECT A FROM T DISTRIBUTE B ^ - Illegal DISTRIBUTE clause © 2014 Advanced Systems srl Sadas Database SQL Errors 379 12.88 SDS-0098 "Too many DISTRIBUTE column ranges" Error Code 0098 Error Description Too many DISTRIBUTE column ranges. SQL types SELECT. Reasons why DISTRIBUTE clause specify too many ranges referred to column. Notes You cannot specify in DISTRIBUTE clause a number of ranges greater than the number of distinct values of the column. Example of error In this example A column has only 10 distinct values. SELECT [...] DISTRIBUTE A ON (20) ^ - Too many DISTRIBUTE column ranges 12.89 SDS-0099 "Wrong DISTRIBUTE parameter configuration" Error Code 0099 Error Description Wrong DISTRIBUTE parameter configuration. SQL types SELECT. Reasons why Sadas has encountered a bad set of parameters in DISTRIBUTE clause. Notes The set of parameters in DISTRIBUTE clause does not satisfy Sadas grammar. Examples of error a. SELECT [...] DISTRIBUTE A ON ('01/01/2007') ^ - Wrong DISTRIBUTE parameter configuration (type mismatch) b. SELECT [...] DISTRIBUTE A ON (1,10,11,20,21) ^ - Wrong DISTRIBUTE parameter configuration (wrong ranges number) © 2014 Advanced Systems srl Sadas Database SQL Errors 380 12.90 SDS-0100 "Too many DISTRIBUTE ranges" Error Code 0100 Error Description Too many DISTRIBUTE ranges. SQL types SELECT. Reasons why DISTRIBUTE clause specifies too many ranges. Notes The total number of ranges cannot overcome a fixed parameter in server settings. On 32 bit server this limit is 8192. On 64 bit server this limit is 65536. 12.91 SDS-0101 "Wrong timestamp" Error Code 0101 Error Description Wrong timestamp. SQL types SELECT. Reasons why Sadas has encountered a bad timestamp. Notes This error occurs only at run-time and when argument of function is a column. In function TO_TIMESTAMP Sadas tries to convert a string field in a timestamp: Sadas returns this error when input value is not a valid timestamp. Example of error In this example l_comment is a note field SELECT TO_TIMESTAMP(l_comment) FROM LINEITEM ^ - Wrong timestamp 12.92 SDS-0102 "STAR operand not supported in this context" Error Code 0102 Error Description STAR operand not supported in current query. SQL types SELECT. © 2014 Advanced Systems srl Sadas Database SQL Errors Reasons why 381 Sadas has encountered a not supported use of STAR operand. Notes This error occurs when you try to use STAR operand in a query that contains a sub-query in FROM clause. Example of error select l_tax from (select * from lineitem) ^ - STAR operand not supported in this context 12.93 SDS-0103 "Too many elements in update list" Error Code 0103 Error Description Too many elements in update list. SQL types UPDATE. Reasons why Sadas has encountered too many columns to update. Notes This error occurs when you try to update simultaneously more than 256 columns. 12.94 SDS-0104 "Illegal use of an aggregate function" Error Code 0104 Error Description Illegal use of an aggregate function. SQL types UPDATE. Reasons why SADAS has encountered an aggregate function in an UPDATE script. Notes This error occurs when you use an aggregate function in an UPDATE script. Example update lineitem set l_quantity = sum(l_tax) ^ - Illegal use of aggregate function © 2014 Advanced Systems srl Sadas Database SQL Errors 382 12.95 SDS-0105 "UPDATE is not allowed on primary key" Error Code 0105 Error Description UPDATE is not allowed on primary key. SQL types UPDATE. Reasons why SADAS has encountered a primary key in an UPDATE set list. Notes This error occurs when you try to update a primary key. Example of error update orders set l_orderkey = 10 ^ - UPDATE not allowed on primary key 12.96 SDS-0106 "User domain does not exist" Error Code 0106 Error Description “User domain” does not exist. SQL types CREAT USER. Reasons why Sadas has encountered an invalid domain name. Notes This error occurs when you try to add a user to a domain that does not exist. Example of error create user SMITH@ADVVSYS ^ - User domain does not exist 12.97 SDS-0107 "Domain not enabled for user" Error Code 0107 Error Description Domain not enabled for user. SQL types CREAT USER. Reasons why Sadas has encountered an invalid privilege on domain. Notes This error occurs when you try to manipulate users of a domain not allowed to your userid. Example of error © 2014 Advanced Systems srl Sadas Database SQL Errors 383 create user SMITH@ADVSYS ^ - Domain not enabled for user 12.98 SDS-0108 "RATIO_TO_REPORT function: parameter must be a column" Error Code 0108 Error Description RATIO_TO_REPORT function: parameter must be a column name. SQL types SELECT. Reasons why Sadas must encounter only a column in function parameter. Notes This error occurs when you try to use this function with bad parameters. Example of error Select ratio_to_report(l_quantity+10) from lineitem ^ - RATIO_TO_REPORT function: parameter must be a column (l_quantity+10) 12.99 SDS-0109 "VSIZE function: parameter must be a column" Error Code 0109 Error Description VSIZE function: parameter must be a column. SQL types SELECT. Reasons why Sadas must encounter only a column in function parameter. Notes This error occurs when you try to use this function with bad parameters. Example of error Select vsize(l_quantity+10) from lineitem ^ - VSIZE function: parameter must be a column (l_quantity+10) © 2014 Advanced Systems srl Sadas Database SQL Errors 384 12.100SDS-0110 "TO_NUMBER function: unable to convert the string" Error Code 0110 Error Description TO_NUMBER function: unable to convert the string. SQL types SELECT. Reasons why Sadas has encountered an invalid string in function parameter. Notes This error occurs when you try to convert to number an invalid string. Example of error select to_number('10r10') from dual ^ - TO_NUMBER function: unable to convert the string 12.101SDS-0111 "Invalid numeric value for the function" Error Code 0111 Error Description Invalid numeric value for the function. SQL types SELECT. Reasons why Sadas has encountered a bad numeric parameter in the function. Notes This error occurs when you pass an invalid numeric parameter to following functions: BIN_TO_NUM, ASIN, ACOS, BITAND, BITOR, BITXOR. Example of error select bin_to_num(1,2) from dual ^ - Invalid numeric value for the function © 2014 Advanced Systems srl Sadas Database SQL Errors 385 12.102SDS-0112 "UPDATE not allowed on column ROWID" Error Code 0112 Error Description UPDATE not allowed on column ROWID. SQL types UPDATE. Reasons why Sadas has encountered the ROWID pseudocolumn in fields list to update in UPDATE statement. Notes This error occurs when you try to update the ROWID pseudocolumn. Example of error update table set rowid = 10; ^ - UPDATE not allowed on column ROWID. 12.103SDS-0113 "Wrong use of function SUBSTITUTE_WITH" Error Code 0113 Error Description Wrong use of function SUBSTITUTE_WITH. SQL types SELECT, UPDATE. Reasons why Sadas has encountered bad parameters in SUBSTITUTE_WITH function. Notes The SUBSTITUTE_WITH function accepts as first parameter only a constant of char type. Example of error update table set name = SUBSTITUTE_WITH(10); ^ - Wrong use of function SUBSTITUTE_WITH. © 2014 Advanced Systems srl Sadas Database SQL Errors 386 12.104SDS-0114 "Domain already exists" Error Code 0114 Error Description “Domain already exists” SQL types CREATE, RENAME. Reasons why Sadas catalog cannot have two domains with the same name. Notes You are trying to create or duplicate a Sadas domain of users that already exists. In this error message Sadas returns also the domain name that already exists. Examples of error In this example D is a domain already defined. a. CREATE DOMAIN D ^ - Domain already exists (D) b. DUPLICATE DATABASE O TO D ^ - Domain already exists (D) 12.105SDS-0115 "Domain does not exist" Error Code 0115 Error Description “Domain does not exist” SQL types DROP, RENAME. Reasons why Sadas tries to manipulate a domain that does not exist. Notes You are trying to manipulate a Sadas domain of users that does not exist in the catalog. In this error message Sadas returns also the domain name that does not exist. Examples of error In this example D does not exist. a. DROP DOMAIN D ^ - Domain does not exist (D) © 2014 Advanced Systems srl Sadas Database SQL Errors 387 12.106SDS-0116 "LIKE works only on alphanumeric columns" Error Code 0116 Error Description “LIKE works only on alphanumeric columns” SQL types SELECT. Reasons why You are writing a LIKE predicate using in the left part a not alphanumeric column or expression. Notes You are writing a LIKE predicate using in the left part a not alphanumeric column or expression. In this error message Sadas returns also the column/expression name that you are using. Examples of error In this example L_Quantity is a numeric column. a. SELECT * FROM LINEITEM WHERE L_QUANTITY LIKE '10' ^ - LIKE works only on alphanumeric columns (LINEITEM.L_QUANTITY) 12.107SDS-0117 "Operands of different datatypes in between" Error Code 0117 Error Description “Operands of different datatypes in between” SQL types SELECT. Reasons why You are writing a BETWEEN predicate using wrong datatype in right values. Notes You are writing a BETWEEN predicate using a datatype not equal to left column datatype in right values. In this error message Sadas returns also the datatype and the wrong value that you are using. Examples of error In this example L_Quantity is a numeric column. a. select * from lineitem where l_quantity between 1 and '10' © 2014 Advanced Systems srl Sadas Database SQL Errors 388 ^ - Operands of different datatypes in between (INTEGER <-> STRING ('10')) 12.108SDS-0118 "IN clause: operands of different datatypes in the list of constants" Error Code 0118 Error Description “IN clause: operands of different datatypes in the list of constants” SQL types SELECT. Reasons why You are writing a static IN predicate using wrong datatype in right values. Notes You are writing a IN predicate using a datatype not equal to left column datatype in right values. In this error message Sadas returns also the datatype, the position in the list and the wrong value that you are using. Examples of error In this example L_Quantity is a numeric column. a. select * from lineitem where l_quantity in( 1,'12' ) ^ - IN clause: operands of different datatypes in the list of constants (INTEGER (1) <-> STRING('12')) b. select * from lineitem where l_quantity in( '10','12' ) ^ - IN clause: operands of different datatypes in the list of constants (INTEGER (LINEITEM.L_QUANTITY) <-> STRING('10')) 12.109SDS-0119 "Join graph not supported" Error Code 0119 Error Description “Join graph not supported” SQL types SELECT. Reasons why You are trying to do a join on a not supported tables schema. © 2014 Advanced Systems srl Sadas Database SQL Errors 389 Notes You are trying to do a join on a not supported tables schema. Sadas supports: in implcit join Star Schema and Snow Flake Schema in explicit join Star Schema and Concatenation (a single branch of Snow Flake Schema) In this error message Sadas returns also the wrong schema that you are trying to use. Examples of error In this example there are two pairs of tables [(tributi,anagrafica) and (cartelle,notifica)] that are not linked by a join condition, so the schema is incomplete. a. select "codice fiscale", nome from tributi, anagrafica, cartelle, notifica where tributi."codice fiscale"=anagrafica."codice fiscale" and cartelle."codice fiscale"=notifica."codice fiscale" ^ - Join graph not supported (INCOMPLETE) 12.110SDS-0120 "Cannot use columns of code type as terms of an expressions" Error Code 0120 Error Description “Cannot use columns of code type as terms of an expressions” SQL types SELECT. Reasons why You are trying to use a code column as term of an expression. Notes You are trying to use a code column as term of an expression. In this error message Sadas returns also the code column name. Examples of error In this example SESSO is a code column. a. select sesso || 'Ok' from anagrafica ^ - Cannot use columns of code type as terms of an expressions (ANAGRAFICA.SESSO) © 2014 Advanced Systems srl Sadas Database SQL Errors 390 12.111SDS-0121 "Illegal identifier: the first character must be a letter" Error Code 0121 Error Description “Illegal identifier: the first character must be a letter” SQL types All. Reasons why You are writing an identifier starting with a numeric digit. Notes You are writing an identifier (column name, table name, etc...) starting with a numeric digit. In this error message Sadas returns also the wrong identifier name. The name of identifiers can be of two types: 1. traditional: it can contain only following characters 'A'..'Z', 'a'..'z', '0'..'9' and '_'; the first character cannot be '0'..'9' and '_'. 2. extended: it can contain only following characters 'A'..'Z', 'a'..'z', '0'..'9', '_', ' ' (blank), ''', '-' and '.'; delimited by double quotes; an extended identifier name cannot contain in double quotes all blank characters or empty string. Sadas error message indicates the part of illegal identifier name preceding invalid character Examples of error select 00AB from lineitem ^ - Illegal identifier: the first character must be a letter (00B...) 12.112SDS-0122 "Null identifier" Error Code 0122 Error Description “Null identifier” SQL types All Reasons why Sadas parser has encountered a null identifier name. Notes The name of identifiers can be of two types: © 2014 Advanced Systems srl Sadas Database SQL Errors 391 1. traditional: it can contain only following characters 'A'..'Z', 'a'..'z', '0'..'9' and '_'; the first character cannot be '0'..'9' and '_'. 2. extended: it can contain only following characters 'A'..'Z', 'a'..'z', '0'..'9', '_', ' ' (blank), ''', '-' and '.'; delimited by double quotes; an extended identifier name cannot contain in double quotes all blank characters or empty string. Examples of error SELECT "" [...] ^ - Null identifier (") 12.113SDS-0123 "Column not found in the sub-query of the FROM clause" Error Code 0123 Error Description “Column not found in the sub-query of the FROM clause” SQL types SELECT Reasons why Sadas parser haven't found a column in sub-query. Notes Sadas parser haven't found a column in sub-query column list of the FROM clause. Examples of error SELECT TAX FROM (SELECT L_TAX FROM LINEITEM) ^ - Column not found in the sub-query of the FROM clause (TAX) 12.114SDS-0124 "Too much tables in DELETE statement" Error Code 0124 Error Description “Too much tables in DELETE statement” SQL types DELETE, DELETE KEYS. Reasons why Sadas parser haven't found more than one table in DELETE statement. Notes © 2014 Advanced Systems srl Sadas Database SQL Errors 392 Sadas parser haven't found more than one table in DELETE statement. In this error message Sadas returns also the number of tables that you are using. Examples of error DELETE ORDERS, LINEITEM ^ - Too much tables in DELETE statement (2) 12.115SDS-0125 "Not supported syntax for CREATE VIEW statement" Error Code 0125 Error Description “Not supported syntax for CREATE VIEW statement” SQL types CREATE VIEW. Reasons why You are using a standard syntax to create a table without sub-query. Notes You are using a standard syntax to create a table without sub-query. In SADAS you can create a view only using sub-query, withouth field specifications. Examples of error CREATE VIEW MY_VIEW (C1 CHAR(10)) ^ - Not supported syntax for CREATE VIEW statement 12.116SDS-0126 "Cannot nest more group functions" Error Code 0126 Error Description “Cannot nest more group functions” SQL types SELECT. Reasons why You are nesting more than one group function. Notes You cannot nest more than one group function. Examples of error SELECT SUM(AVG(L_QUANTITY)) FROM LINEITEM ^ - Cannot nest more group functions © 2014 Advanced Systems srl Sadas Database SQL Errors 393 12.117SDS-0127 "In DUAL SELECT following clause is not allowed" Error Code 0127 Error Description “In DUAL SELECT following clause is not allowed” SQL types SELECT. Reasons why You are using wrong clause in DUAL select. Notes In DUAL select you cannot use WHERE, GROUP BY and ORDER BY clauses. Examples of error select 'region' as cx from dual group by cx ^ - In DUAL SELECT following clause is not allowed (GROUP BY) 12.118SDS-0128 "UPDATE: group functions are not allowed on right part" Error Code 0128 Error Description “UPDATE: group functions are not allowed on right part” SQL types UPDATE. Reasons why You are using a group function in UPDATE statement. Notes In UPDATE statement you cannot use group functions on right part of SET clause. Example of error update lineitem set l_quantyty = sum(1000) ^ - UPDATE: group functions are not allowed on right part (sum (1000)) 12.119SDS-0129 "TRUNC/ROUND: exceeded the limit of decimals" Error Code 0129 Error Description “TRUNC/ROUND: exceeded the limit of decimals” SQL types SELECT. © 2014 Advanced Systems srl Sadas Database SQL Errors Reasons why 394 Too much decimals in the second parameter of Round or Trunc function. Notes In Round and Trunc functions you can specify in the second parameter the number of decimal that you want in the display format. The maximum is 10. Example of error select round(10.123,120) from dual ^ - TRUNC/ROUND: exceeded the limit of decimals (120 > 10) 12.120SDS-0130 "DELETE KEYS statement is not allowed on a view" Error Code 0130 Error Description “DELETE KEYS statement is not allowed on a view” SQL types DELETE KEYS. Reasons why You are trying a DELETE KEYS on a view. Notes In SADAS you cannot make a DELETE KEYS command on a view Example of error In this query V_Test is a view delete keys from V_Test ^ - DELETE KEYS statement is not allowed on a view 12.121SDS-0131 "Internal error; undefined type; analyze the context!" Error Code 0131 Error Description “Internal error; undefined type; analyze the context!” SQL types All Reasons why Serious error in Parser SQL or in Optimizer of Sadas. Notes Sadas has encountered a unexpected situation during analyzing or calculating expressions. You © 2014 Advanced Systems srl Sadas Database SQL Errors 395 must analyze the context: script SQL, Catalog configuration, Sadas Server settings, HW/SW system. It isn’t a query error, but a unexpected Sadas error. 12.122SDS-0132 "External function not found in Catalog" Error Code 0132 Error Description “External function not found in Catalog” SQL types SELECT Reasons why External function not found or loaded in Catalog. Notes Sadas cannot find an external function for one of these reasons: - the dynamic library (.DLL, .so, etc..) is not defined in Sadas Catalog - the dynamic library doesn't exist - the dynamic library doesn't export the called function 12.123SDS-0133 "External function needs in the first parameter an alphanumeric constant (FunctionId)" Error Code 0134 Error Description “External function error” SQL types SELECT Reasons why Error of the function of an external function Notes The call to the internal function (FunctionId) of an external function has returned an error 12.125SDS-0135 "Function not available in this Sadas version" Error Code 0135 Error Description “Function not available in this Sadas version” SQL types SELECT © 2014 Advanced Systems srl Sadas Database SQL Errors Reasons why 396 Current Sadas version does not contain specified version Notes You must contact your seller for a Sadas version that contains the specified function. 12.126SDS-0136 "Data are not compatible with the Server" Error Code 0136 Error Description “Data are not compatible with the Server” SQL types CONNECT DB Reasons why Data of tables are not compatible with the current Server. Notes Data of tables are not compatible with the working Server, because you are trying to use data loaded in an another environment (32-bit, 64-bit, Little Endian, Big Endian, etc...) 12.127SDS-0137 "Wrong number of columns in the sub-query of the FROM clause" Error Code 0137 Error Description “Wrong number of columns in the sub-query of the FROM clause” SQL types LOAD, APPEND, REWRITE Reasons why Wrong number of columns in the sub-query of the FROM clause. Notes When you use a LOAD/APPEND/REWRITE TABLE ... FROM SELECT ... you must specify the same number of columns in extern-query and sub-query. Example of error load table region from (select colopr from product) ^ - Wrong number of columns in the sub-query of the FROM clause (1) © 2014 Advanced Systems srl Sadas Database SQL Errors 397 12.128SDS-0138 "INSERT: wrong number of constants" Error Code 0138 Error Description “INSERT: wrong number of constants” SQL types INSERT Reasons why Wrong number of constants in INSERT statement. Notes You can use two types of INSERT statement, with or withouth list of columns. When you omit list of columns, SADAS considers all columns (not multi-field) of table. In both cases you must specify the same number of constants, in VALUES clause, of number of columns. Examples of error insert into ttime (timeidpk,year,month,week,day) values (99,99,99,99) ^ Wrong number of constants insert into ttime values (99,99,99,99) ^ - Wrong number of constants 12.129SDS-0139 "INSERT: wrong type of a constant" Error Code 0139 Error Description “INSERT: wrong type of a constant” SQL types INSERT Reasons why Wrong type of a constant in INSERT statement. Notes In the constant list of a INSERT statement you have wrote a constant of a type not equal to the type of the corresponding column. Examples of error insert into ttime (timeidpk,year,month,week,day) values (99,99,'99',99,99) ^ - Wrong type of a constant © 2014 Advanced Systems srl Sadas Database SQL Errors 398 12.130SDS-0140 "Table locked" Error Code 0140 Error Description “Table locked” SQL types ALL Reasons why Table is locked. Notes You are trying to use a table that is locked by a system administrator user. 12.131SDS-0141 "DIGITS function allows only one integer column" Error Code 0141 Error Description “DIGITS function allows only one integer column” SQL types SELECT Reasons why DIGITS function allows only one integer column. Notes You are trying to use DIGITS function with an expression as argument. © 2014 Advanced Systems srl Part XIII How to Read Syntax Diagrams 13 400 How to Read Syntax Diagrams This chapter describes how to read syntax diagrams. This reference presents Sadas SQL syntax in both graphic diagrams and in text (Backus-Naur Form—BNF). This chapter contains these sections: Graphic Syntax Diagrams Backus-Naur Form Syntax 13.1 Graphic Syntax Diagrams Syntax diagrams are drawings that illustrate valid SQL syntax. To read a diagram, trace it from left to right, in the direction shown by the arrows. Commands and other keywords appear in UPPERCASE inside rectangles. Type them exactly as shown in the rectangles. Parameters appear in lowercase inside ovals. Variables are used for the parameters. Punctuation, operators, delimiters, and terminators appear inside circles. If the syntax diagram has more than one path, then you can choose any path. For example, in the following syntax you can specify either SHADOW or INFO: If you have the choice of more than one keyword, operator, or parameter, then your options appear in a vertical list. For example, in the following syntax diagram, you can specify one or more of the five parameters: © 2014 Advanced Systems srl How to Read Syntax Diagrams 401 The following table shows some parameters that appear in the syntax diagrams and provides examples of the values you might substitute for them in your statements: Ta ble - Sy nt a x Pa ra me t e rs Parameter Description Examples table The substitution value must be the name of a table. employees The substitution value must be the name of a view. v_employees table_name view view_name c The substitution value must be a single character from 7-bit ASCII T character set. 'text' s The substitution value must be a text string in single quotation 'Employee records' marks. char The substitution value must be an expression of datatype CHAR, last_name CHARACTER, VARCHAR or a character literal in single quotation 'Smith' marks. condition The substitution value must be a condition that evaluates to TRUE last_name >'A' or FALSE.. date The substitution value must be a date constant or an expression of TO_DATE d DATE datatype. expr The substitution value can be an expression of any datatype as salary + 1000 defined in the syntax description of expr in “About SQL Expression” chapter. © 2014 Advanced Systems srl ('01/01/2002') How to Read Syntax Diagrams 402 Parameter Description integer Examples The substitution value must be an integer as defined by the syntax 72 description of integer in “Integer Literals” chapter. number The substitution value must be an expression of NUMBER datatype AVG(salary) m or a number constant as defined in the syntax description of number 15 * 7 n in “Numeric Literals” chapter. subquery The substitution value must be a SELECT statement that will be SELECT last_name db_name used in another SQL statement. FROM employees The substitution value must be the name of a database. sales_db 13.1.1 Required Keywords and Parameters Required keywords and parameters can appear singly or in a vertical list of alternatives. Single required keywords and parameters appear on the main path, which is the horizontal line you are currently traveling. In the following example, db_name is a required parameter: drop_database::= If there is a database named DB_LIB, then, according to the diagram, the following statement is valid: DROP DATABASE DB_LIB If multiple keywords or parameters appear in a vertical list that intersects the main path, then one of them is required. You must choose one of the keywords or parameters, but not necessarily the one that appears on the main path. In the following example, you must choose one of the two ways: © 2014 Advanced Systems srl How to Read Syntax Diagrams 403 13.1.2 Optional Keywords and Parameters If keywords and parameters appear in a vertical list above the main path, then they are optional. In the following example, instead of traveling down a vertical line, you can continue along the main path: According to the diagrams, all of the following statements are valid: CREATE TABLE …; CREATE GLOBAL TEMPORARY TABLE …; 13.1.3 Syntax Loops Loops let you repeat the syntax within them as many times as you like. In the following example, after choosing one column definition, you can go back repeatedly to choose another, separated by commas. © 2014 Advanced Systems srl How to Read Syntax Diagrams 404 13.1.4 Multipart Diagrams Read a multipart diagram as if all the main paths were joined end to end. The following example is a two-part diagram: 13.2 Backus-Naur Form Syntax Each graphic syntax diagram in this reference is preceded by a text description of the graphic. The text descriptions consists of a simple variant of Backus-Naur Form (BNF) that includes the following symbols and conventions: Symbol or Convention Meaning [] Brackets enclose optional items. © 2014 Advanced Systems srl How to Read Syntax Diagrams 405 Symbol or Convention Meaning <> Parameters list. {} Braces enclose items only one of which is required. | A vertical bar separates alternatives within brackets or braces. delimiters Delimiters other than brackets, braces, vertical bars, and ellipses must be entered as shown. boldface Words appearing in boldface are keywords. They must be typed as shown. (Keywords are case-sensitive in some, but not all, operating systems.) Words that are not in boldface are placeholders for which you must substitute a name or value. © 2014 Advanced Systems srl 406 Index -00001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 0040 0041 0042 326 326 327 327 328 328 329 329 330 331 331 332 332 333 333 334 335 336 336 337 338 338 339 339 340 340 341 341 342 344 345 345 346 346 346 347 348 348 349 350 350 351 0043 0044 0045 0046 0047 0048 0049 0050 0051 0052 0053 0054 0055 0056 0057 0058 0059 0060 0061 0062 0063 0064 0065 0066 0067 0068 0069 0070 0071 0072 0073 0074 0075 0078 0079 0089 0090 0091 0092 0093 0094 0095 0096 0097 0098 0099 0100 0101 351 352 353 353 354 354 355 355 356 357 357 359 359 360 360 361 361 362 362 363 363 364 364 365 366 366 367 368 368 369 369 371 371 372 373 373 374 374 375 375 376 376 377 378 379 379 380 380 407 0102 0103 0104 0105 0106 0107 0108 0109 0110 0111 0112 0113 0114 0115 0116 0117 0118 0119 0120 0121 0122 0123 0124 0125 0126 0127 0128 0129 0130 0131 0132 0134 0135 0136 0137 0138 0139 0140 0141 380 381 381 382 382 382 383 383 384 384 385 385 386 386 387 387 388 388 389 390 390 391 391 392 392 393 393 393 394 394 395 395 395 396 396 397 397 398 398 -AABS 48, 54 ACOS 54 ADD 178, 311 add column clauses 178 ADD_MONTHS 50, 55 Aggregate 53 Aggregate Functions 53 AGGREGATION 393 Alias name already used 337 Alias name is already a column name 339 ALL 164, 166, 209, 245, 270, 275, 296, 311 Alphanumeric 154 ALTER 177, 183 ALTER TABLE 159, 178, 311 ALTER USER 183 ALTER VIEW 185, 311 AND 145, 146, 147, 148, 153 AND Truth Table 148 Antijoins 169 APPEND TABLE 186, 311 Arithmetic 43 Arithmetic Operators 43 AS 196, 198, 200, 206, 235, 275 ASC 275 ASCII 29, 50, 56 ASCII Character Set 29 ASIN 56 ATAN 57 AVG 53, 57, 392 -BBackus-Naur 404 Backus-Naur Form Syntax Between 145, 153, 387 BIN_TO_NUM 58 Binary 42 Binary Operators 42 BITAND 59 BITOR 59 BITXOR 60 Blank-Padded 29 400 -CCannot DROP current database 362 Cannot nest more group functions 392 Cartesian product 169 CASCADE 211, 213 Case Expressions 138 Case Sensitivity 152 CEIL 48, 61 CEILING 48, 61 408 CHAR 23, 25, 28, 29, 49 CHARACTER 23, 25, 28, 29, 49 Character Functions 49, 50 CHR 49, 62 Code 23, 28, 116, 125, 154, 389 COLUMN 137, 178, 188, 200, 253, 261, 305 Column already exists 352 column clauses 178 column definition 178, 200 Column isn’t a PRIMARY KEY 351 Column not found in the sub-query of the FROM clause 391 COLUMNS 234 COMMENT 188, 190 Comments 35 Comparison Conditions 144 Compound Conditions 144, 155 Compound Expressions 135, 138 CONCAT 62 Concatenation 44 Concatenation Operators 44 CONDITION 400 Conditions 144, 145, 146, 147, 148, 150 CONNECT 191, 311 CONNECT SYSDBA 191, 311 constant 137 CONSTRAINT 159, 178 constraint clauses 178 Conversion Functions 51 Correlated Subquery 174 COS 63 COSH 63 COUNT 53, 64 COUNT DISTINCT 53 CREATE 177, 193, 194, 195, 196, 198, 199, 200, 204, 206, 392 CREATE DATABASE 193, 311 CREATE DBADMIN 194 CREATE DOMAIN 195 CREATE EXPRESSION 196 CREATE INDEX 198 CREATE SYNONYM 199 CREATE TABLE 159, 178, 200 CREATE USER 204, 311 CREATE VIEW 206, 392 CTL 213 CURDATE 65, 114 CURRENT_DATE 50, 65 CURRENT_TIME 50, 65 CURRENT_TIMESTAMP 50, 66 CURTIME 66, 115 Cyclic 388 -DData are not compatible with the Server 396 Data Definition Language 177 Data Manipulation Language 177, 178 DATABASE 20, 36, 208, 209, 230, 240, 254, 263, 267, 272, 295, 298 Database already exists 354 Database does not exist 355 Database ID already exists 369 Database ID is wrong (<> 10 characters) 368 DATATYPE 22, 23, 25, 27, 28, 29, 178, 200 DATE 23, 27, 28, 35, 50, 154 DATE_TO_JULIAN 72, 86 DATEADD 50, 66 DATEDIFF 50, 68 DATEPART 50, 70 DATETIME 27, 28, 35 Datetime Expressions 135, 140 Datetime Functions 50 Datetime Literals 35 DAY 27, 28 DAYNAME 50, 72 DAYOFWEEK 50, 73 DAYOFYEAR 74 DAYOFYEAR4 50 days 183, 204 DB 20, 191, 193 DB NAME 191, 193 DDL 159, 177 DEACTIVATE 208, 209 DEACTIVATE DATABASE 208, 209 DEACTIVATE TABLE 208, 209 DEC 400 DEC 23, 25, 28 DECIMAL 400 DECIMAL 23, 25, 28 DECIMALS 393 DECODE 52, 75 DECODE function: default parameter must be constant 376 DELETE 178, 209, 211, 311, 391, 394 DELETE KEYS 213, 311, 391, 394 409 DELETE KEYS statement is not allowed on a view 394 DELETE STORED QUERIES 209, 311 DELETE TABLE 211 DESC 215, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 275, 311 DESC SYSALLCOLUMNS 218 DESC SYSDB 219 DESC SYSDOMAINS 220 DESC SYSFOREIGNKEYS 159, 221 DESC SYSKEYS 159, 221 DESC SYSLOG 222 DESC SYSOBJECTS 223 DESC SYSSYNONYMS 224 DESC SYSTABLES 225 DESC SYSUSERS 226 DESC SYSVIEWS 227 DESC USER 228 DESCR 215, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 311 DESCRIBE 215, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 311 DESCRIBE STORED QUERIES 217 DESCRIBE SYSALLCOLUMNS 218 DESCRIBE SYSDB 219 DESCRIBE SYSDOMAINS 220 DESCRIBE SYSFOREIGNKEYS 221 DESCRIBE SYSKEYS 221 DESCRIBE SYSLOG 222 DESCRIBE SYSOBJECTS 223 DESCRIBE SYSSYNONYMS 224 DESCRIBE SYSTABLES 225 DESCRIBE SYSUSERS 226 DESCRIBE SYSVIEWS 227 DESCRIBE TABLE 215 DESCRIBE USER 228 Diagrams 400, 402, 403, 404 DIGIT 33, 34 DIGITS 76, 398 DIGITS function allows only one integer column 398 DIRECT 186, 248, 255, 273, 311 DISABLE 229 DISABLE INDEXGBY 229, 311 DISC 230, 311 DISCONNECT 230, 311 DISTINCT 164, 168, 275, 311 DISTRIBUTE 275, 311 Division by zero 362 DML 177, 178 DOMAIN 195, 231, 264 Domain already exists 386 Domain does not exist 386 domain name 195, 204, 226 Domain not enabled for user 382 DOUBLE PRECISION 23, 25, 28 DROP 177, 178, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239 DROP COLUMN 178, 311 drop column clause 178 DROP DATABASE 230, 311 DROP DOMAIN 231 DROP EXPRESSION 232, 233 DROP EXPRESSIONS 232, 233 DROP GENERATED COLUMNS 234 DROP INDEX 235 DROP SYNONYM 236 DROP TABLE 237, 311 DROP USER 238, 311 DROP VIEW 239, 311 DUAL 175, 393 DUAL Table 175 DUPLICATE 240, 241, 243 DUPLICATE DATABASE 240, 311 Duplicate FOREIGN KEY 351 DUPLICATE TABLE 241, 311 DUPLICATE USER 243, 311 -EEBCDIC 29 EBCDIC Character Set 29 ELSE 138 ENABLE 243 ENABLE INDEXBGY 311 ENABLE INDEXGBY 243 Encoding and Decoding Functions 52 Encountered end of file in comments 326 END 138 ENGLISH 293 Equijoins 169, 170 Exceeded the limit of the number precision EXEC 244, 311 EXECUTE 244 EXECUTE STORED QUERIES 311 EXECUTE STORED QUERUES 244 EXISTS 145, 156 EXISTS Condition 144, 156 336 410 EXP 77 Expected a constant positive expression in column definition 346 Expected arithmetic operator 332 Expected identifier after point 332 Expected identifier or constant value 333 Expected logical operator 331 Expected relational operator 331 Expression 156, 196, 232, 233, 389 Expression Lists 135, 141 EXPRESSIONS 135, 137, 138, 140, 141, 232, 233 External function 78 External function error 395 External function not found in Catalog 395 EXTFUNC 78 -FFILE NAME 248, 253, 255, 273, 299, 305, 307 FIRST_DAY 80 FIRST_WORK_DAY 81 FLOAT 400 FLOAT 23, 25, 28 FLOOR 48, 81 Fmt 117 FOREIGN KEY 159, 161, 178, 185 Foreign Key Constraints 161 FROM 164, 211, 213, 270, 275, 311 FROM clause 173 FULL 173 FULL JOIN 275 FULL OUTER JOIN 275 function 35 Function ABS 54 Function ACOS 54 Function ADD_MONTHS 55 Function ASCII 56 Function ASIN 56 Function ATAN 57 Function AVG 57 Function BIN_TO_NUM 58 Function BITAND 59 Function BITOR 59 Function BITXOR 60 Function CEIL 61 Function CHR 62 Function CONCAT 62 Function COS 63 Function COSH 63 Function COUNT 64 Function CURRENT_DATE 65 Function CURRENT_TIME 65 Function CURRENT_TIMESTAMP 66 Function DATE_TO_JULIAN 72, 86 Function DATEADD 66 Function DATEDIFF 68 Function DATEPART 70 Function DAYNAME 72 Function DAYOFWEEK 73 Function DAYOFYEAR 74 Function DECODE 75 Function DIGITS 76 Function EXP 77 Function Expressions 135, 140 Function FIRST_DAY 80 Function FIRST_WORK_DAY 81 Function FLOOR 81 Function GREATEST 82 Function GROUPING 83 Function HEXTONUM 84 Function HEXTOSTR 84 Function INITCAP 85 Function INSTR 86, 99, 101 Function ISNUMERIC 87 Function JULIAN_TO_DATE 72, 86 Function LAST_DAY 87 Function LAST_WORK_DAY 88 Function LEAST 89 Function LENGTH 89 Function LN 90 Function LOG 91 Function LOWER 88, 91 Function LPAD 92 Function LTRIM 93 Function MAX 94 Function MIN 94 Function MOD 95, 102 Function MONTHNAME 96 Function MONTHS_BETWEEN 96 Function NEXT_DAY 97 Function NEXT_WORK_DAY 97 Function not available in this Sadas version Function NUMTOHEX 98 Function PI 98 Function POWER 99 Function PREVIOUS_DAY 100 395 411 Function PREVIOUS_WORK_DAY 100 Function RATIO_TO_REPORT 101 Function REPLACE 101, 102 Function ROUND 102 Function RPAD 103 Function RTRIM 104 Function SDS_HASH 105 Function SDS_HASH_Sh1 106 Function SHUFFLE 109 Function SIGN 107 Function SIN 108 Function SINH 108 Function SOUNDEX 109 Function SQRT 110 Function STDDEV 111 Function STRTOHEX 112 Function SUBSTITUTE_WITH 112 Function SUBSTR 101, 113 Function SUM 114 Function SYSDATE 65, 114 Function SYSTIME 66, 115 Function SYSTIMESTAMP 90, 98, 115 Function TAN 115 Function TANH 116 Function TO_BASE 116 Function TO_CHAR(character) 117 Function TO_CHAR(datetime) 117 Function TO_CHAR(number) 122 Function TO_CODE 125 Function TO_DATE 125 Function TO_DESC 126 Function TO_NUMBER 127 Function TO_TIME 128 Function TO_TIMESTAMP 128 Function TODAY 129 Function TRANSLATE 129 Function TRIM 131 Function TRUNC(number) 131 Function UPPER 132 Function VARIANCE 132 Function VSIZE 133 function: invalid date/time format model 375 Functions 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 68, 70, 72, 73, 74, 75, 76, 77, 78, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 122, 125, 126, 127, 128, 129, 131, 132, 133 -GGENERATED 234 GLOBAL TEMPORARY 200, 311 GRANT 177, 245 GRANT ALL 245, 311 Graphic Syntax Diagrams 400 GREATEST 51, 82 GROUP BY 275, 311, 393 GROUP BY CLAUSE 135, 164, 168 GROUP BY clause required in this case GROUP FUNCTION 393 GROUPING 83 346 -HHAVING 164, 275, 311 HAVING CLAUSE 135, 144, 145, 146, 147, 148 HEXTONUM 84 HEXTOSTR 84 HOUR 27, 28 -IIdentifier name too long 328 Illegal DISTINCT clause 355 Illegal DISTRIBUTE clause 378 Illegal function in the context 340 Illegal GROUP BY clause 338 Illegal HAVING clause 366 Illegal identifier 329 Illegal identifier: the first character must be a letter 390 Illegal numeric literal 329 Illegal operation on operands 339 Illegal ORDER BY clause 345 Illegal UNION [ALL]/INTERSECT/MINUS 357 Illegal use of aggregate function 381 Illegal use of function TRANSLATE 367 Improper use of alias name 341 Improper use of DISTINCT clause 345 Improper use of INFO/SHADOW keywords 366 IN 145, 156, 388 IN clause: expected constant expression 373 IN Condition 144, 156 412 In DUAL SELECT following clause is not allowed 393 INDEX 198, 235 Indexed Columns 152 Indexes 36 INDEXGBY 229, 243 INFO 215, 311, 400 INITCAP 49, 85 inline view 173 INNER JOIN 169, 170, 171, 275 INSERT 247 INSERT TABLE 248 INSERT: wrong number of constants 397 INSERT: wrong type of a constant 397 INSTR 50, 86, 99, 101 INT 23, 25, 28 INTEGER 33 INTEGER 23, 25, 28 integrity constraint 159 Internal error; analyze the context! 346 Internal error; undefined type; analyze the context! 394 INTERSECT 45, 164, 166, 251, 275, 311 Invalid column description 347 Invalid constraint 349 Invalid NOT STAR JOIN 353 Invalid numeric value for the function 384 ISNUMERIC 87 ITALIAN 293 -JJoin 169, 388 Join clause 164 Join Conditions 169 JULIAN_TO_DATE 72, 86 -KKEY 394 KEYS 394 Keywords 402, 403 -LLANGUAGE LAST_DAY 293 50, 87 LAST_WORK_DAY 88 LCASE 88, 91 LEAST 51, 89 LEFT 173 LEFT JOIN 275 LEFT OUTER JOIN 275 LEFTNULL 173 LENGTH 50, 89 Lexical 20 Lexical Conventions 20 Like 145, 152, 387 LIKE Conditions 150, 153 Literals 32, 33, 34, 35 LN 90 LOAD 177, 253, 254 LOAD COLUMN 253, 311 LOAD DATABASE 254, 311 LOAD TABLE 255, 311 LOCALTIMESTAMP 90, 115 LOCK 258, 259, 398 LOCK TABLE 258 LOCK USER 259 LOG 91 Logical Conditions 144, 148 LOKE 150, 153 Loops 403 LOWER 49, 88, 91 LPAD 49, 92 LPAD/RPAD functions: the second parameter must be a not negative integer constant 363 LPAD/RPAD functions: the third parameter must be a char 364 LTRIM 49, 93 -MMATERIALIZATED VIEW 275 MATERIALIZED 206 materialized view 173 MAX 53, 94, 392 MILLISECOND 27, 28 MIN 53, 94, 392 MINUS 45, 164, 166, 260, 275, 311 MINUTE 27, 28 MOD 48, 95, 102 MODIFY 159, 178, 185, 311 modify col properties 178 modify column clauses 178 413 MODIFY CONSTRAINT Clause MONTH 27, 28 MONTHNAME 50, 96 MONTHS_BETWEEN 50, 96 Multipart Diagrams 404 185 -NNested Subquery 173, 174 NEXT_DAY 50, 97 NEXT_WORK_DAY 97 NLS_CALENDAR 117 NLS_CHARACTERSET 117 NLS_COMP 117 NLS_CURRENCY 117, 122 NLS_DATE_FORMAT 117 NLS_DATE_LANGUAGE 117 NLS_DUAL_CURRENCY 117 NLS_ISO_CURRENCY 117, 122 NLS_LANGUAGE 117 NLS_LENGTH_SEMANTICS 117 NLS_NCHAR_CHARACTER_SET 117 NLS_NCHAR_CONV_EXCP 117 NLS_NUMERIC_CHARACTERS 117, 122 NLS_RDBMS_VERSION 117 NLS_SORT 117 NLS_TERRITORY 117 NLS_TIME_FORMAT 117 NLS_TIME_TZ_FORMAT 117 NLS_TIMESTAMP_FORMAT 117 NLS_TIMESTAMP_TZ_FORMAT 117 No database available 361 No error 326 No user connected 361 Non executable SQL 357 Nonpadded 29 NOT 145, 146, 147, 148, 150, 153 NOT IN 156 NOT STAR JOIN 169, 275 Not supported syntax for CREATE VIEW statement 392 Not terminated text literal 327 NOT Truth Table 148 NOW 98, 115 NULL 154 Null Conditions 144, 154 Null identifier 390 Null SQL script 326 NUMBER 34 NUMBER 23, 25, 28 NUMERIC 154, 400 Numeric Literals 33, 34 NUMERIC 23, 25, 28 NUMTOHEX 98 -OON 196, 198, 261 ONLY 186, 248, 255, 273, 299 Operands of different datatypes 336 Operator 42 Operator Precedence 42 Operators 42, 43, 44, 45 Optional Keywords 403 OR 145, 146, 147, 148 OR Truth Table 148 ORDER BY 186, 275, 311, 393 ORDER BY CLAUSE 135, 164 Outer Joins 169, 173 -PParameters 402, 403 PASSWORD 183, 191, 204 PASWORD_LIFE_TIME 183, 204 Pattern-matching Conditions 144 PI 98 POSITION 86, 99, 101 POWER 48, 99 PR_CATALOG 245, 270, 311 PR_DESCRIBE 245, 270, 311 PR_LOAD 245, 270, 311 PR_SECURITY 245, 270, 311 PR_SELECT 245, 270, 311 PREVIOUS_DAY 100 PREVIOUS_WORK_DAY 100 PRIMARY KEY 159, 161, 178, 185 Primary Key Constraints 161 Primary key is not unique 350 PRIVILAGE LIST 270 privileges list 245 Pseudocolumn 39, 40 414 -QQUERIES 209, 217, 244 QUERY 164, 165, 166, 275 query_block 164 Quick Sort 168 -RRange Conditions 144, 153 RATIO_TO_REPORT 101 RATIO_TO_REPORT function: parameter must be a column 383 RDBMS 18 REAL 400 REAL 23, 25, 28 REFERENCES 159, 178, 185 REGEXP_INSTR 86, 101 REGEXP_REPLACE 101, 102 REGEXP_SUBSTR 101, 113 Relational 20 Relational Databases 20 relational properties 200 relational table 200 REMAINDER 95, 102 RENAME 261, 263, 264, 265, 266 RENAME COLUMN 261 RENAME DATABASE 263, 311 RENAME DOMAIN 264 RENAME TABLE 265, 311 RENAME VIEW 266, 311 REPLACE 49, 101, 102, 206, 311 REPLICATE 267, 268 REPLICATE DATABASE 267, 311 REPLICATE TABLE 268, 311 Required Keywords 402 REVOKE 177, 270 REVOKE ALL 270, 311 REWRITE 272 REWRITE DATABASE 272 REWRITE TABLE 273 RIGHT 173 RIGHT JOIN 275 RIGHT OUTER JOIN 275 RIGHTNULL 173 Roles 37 ROMANIAN 293 Root of a negative number 365 ROUND 48, 102, 393 ROWID 39, 40 ROWID Pseudocolumn 39, 40 ROWNUM 39 ROWNUM Pseudocolumn 39 RPAD 49, 103 RTRIM 49, 104 RULE 28 Rules 28 -SSADAS 19 Sadas Call Interface 21 Sadas Console 21 Sadas Database Control Manager 21 Sadas Package 21 Sadas Web 21 Scalar Subquery 173, 174 Scalar Subquery Expressions 135, 141 Scalar sub-query must return an unique value 376 SCHEMA 36, 169, 199, 200, 213 SCI 21 SCL 21 SDS_HASH 105, 106 SDS_HASH_Sh1 106 SECOND 27, 28 SELECT 135, 164, 166, 178, 251, 260, 275, 311, 392, 393 select statement 206 Self Joins 170, 171 Selfjoins 169 Semijoins 169 SET 293, 294, 303, 308, 311 Set Operators 45 SHADOW 215, 311, 400 SHUFFLE 109 SIGN 48, 107 Simple Expressions 135, 137 SIN 108 Single-Row 48, 49, 50, 51, 52 Single-Row Functions 48, 49, 50, 51, 52 SINH 108, 305 SKIP 186, 248, 255, 273, 299 SMALLINT 23, 25, 28 Snow Flake schema 169, 388 415 SOUNDEX 49, 109 SQL 18, 19, 20 SQL Errors 326 SQL Functions 47 SQL Operator Precedence 42 SQL Operators 42 SQL Standards 18 SQRT 48, 110 Sructured Query Language 18 STAR JOIN 169, 275 STAR operand not supported in this context 380 Star schema 169, 388 STDDEV 53, 111, 392 storage path 193, 240, 267 STORED 209, 217, 244 STORED QUERIES 217, 311 STRTOHEX 112 SUBQUERY 147, 156, 164, 166, 173, 275, 391, 400 SUBSTITUTE_WITH 112 SUBSTR 49, 101, 113 SUBSTR function accepts only not negative integer parameters 364 SUBSTRING 101, 113 SUM 53, 114, 392 SYNONYM 199, 236 Syntax 403, 404 Syntax error 330 Syntax Loops 403 Syntax Parameters 400 SYSALLCOLUMNS 218 SYSDATE 50, 65, 114 SYSDB 219, 311 SYSDBA 191 SYSDOMAINS 220, 311 SYSFOREIGNKEYS 221, 311 SYSKEYS 221, 311 SYSLOG 222, 311 SYSOBJECTS 223, 311 SYSSYNONYMS 224 SYSTABLES 225, 311 SYSTIME 50, 66, 115 SYSTIMESTAMP 50, 90, 98, 115 SYSUSERS 226, 311 SYSVIEWS 227, 311 -TTABLE 173, 188, 190, 200, 208, 209, 215, 237, 241, 258, 265, 268, 275, 296, 302, 307, 398, 400 Table has not a PRIMARY KEY 368 Table locked 398 TABLE NAME 200 Table reference 164 Table/view already exists 348 Table/view auto-reference thru FOREIGN KEY 350 Table/view does not exist 348 Tables 36 TAN 115 TANH 116 Text literal too long 327 text Literals 32 The comparison value for the coded field is too long 354 The user already exist 360 The user does not exist 360 THEN 138 TIME 23, 27, 28, 35, 50, 154, 244 TIMES 209 TIMESTAMP 23, 27, 28, 35, 50, 154 TO 240, 241, 243, 245, 261, 263, 264, 265, 266 TO_BASE 116 TO_CHAR function: erroneous NLS description 374 TO_CHAR function: invalid numeric format model 375 TO_CHAR function: second and third parameter must be string constants 374 TO_CHAR(character) 51, 117 TO_CHAR(datetime) 50, 51, 117 TO_CHAR(number) 51, 122 TO_CODE 125 TO_DATE 35, 50, 51, 125 TO_DESC 126 TO_NUMBER 127 TO_NUMBER function: unable to convert the string 384 TO_TIME 35, 50, 51, 128 TO_TIMESTAMP 35, 50, 51, 128 TODAY 50, 129 Too many DISTINCT clauses 356 Too many DISTRIBUTE column ranges 379 Too many DISTRIBUTE ranges 380 Too many elements in update list 381 416 Too much tables in DELETE statement 391 TRANSLATE 49, 129 TRIM 49, 131 TRNUCATE 295, 296 TRNUCATE DATABASE 295 TRNUCATE TABLE 296 TRUNC 48, 131, 393 TRUNC(number) 131 TRUNC/ROUND: exceeded the limit of decimals 393 TRUNCATE 48, 131, 177 TRUNCATE DATABASE 311 TRUNCATE TABLE 311 Type mismatch for FOREIGN KEY 353 -UUCASE 132 Unary 42 Unary Operators 42 UNION 45, 164, 166, 275, 296, 311 UNION ALL 45, 164, 166, 296, 311 Unknown character 328 Unknown column name 334 Unknown table/view name 333 UNLOAD 298 UNLOAD DATABASE 298 UNLOAD TABLE 299 Unloaded table 341 UNLOCK 301, 302, 398 UNLOCK TABLE 302 UNLOCK USER 301 UNSET 294, 308 Unsupported function/operation 342 UPDATE 178, 303, 305, 307, 311, 393 UPDATE COLUMN 305, 311 UPDATE not allowed on column ROWID 385 UPDATE not allowed on primary key 382 UPDATE TABLE 307, 311 UPDATE: group functions are not allowed on right part 393 UPPER 49, 132 USER 183, 191, 194, 204, 228, 238, 243, 259, 301, 311 User domain does not exist 382 User has no rights to execute this command 359 Users 37 -VVALUES 247 VARCHAR 23, 25, 28, 29, 49 VARIABLE 294, 308 VARIANCE 53, 132, 392 VIEW 173, 185, 206, 239, 266, 275, 392, 400 view name 206 Views 36 VIRTUAL 159, 162 Virtual Constraints 162 VSIZE 133 VSIZE function: parameter must be a column 383 -WWHEN 138 WHERE 211, 275, 303, 311, 393 WHERE CLAUSE 135, 141, 144, 145, 146, 147, 148, 156, 164, 173 Wrong date 372 Wrong DISTRIBUTE parameter 377 Wrong DISTRIBUTE parameter configuration 379 Wrong hidden condition 359 Wrong number of columns in the sub-query of the FROM clause 396 Wrong number of parameters 340 Wrong time 373 Wrong timestamp 380 Wrong use of function DATEADD 369 Wrong use of function DATEDIFF 371 Wrong use of function DATEPART 371 Wrong use of function NEXT_DAY 363 Wrong use of function SUBSTITUTE_WITH 385 Wrong use of function TO_DATE 335 Wrong use of function TO_TIME 344 Wrong use of function TO_TIMESTAMP 338 -YYEAR 27, 28