# 第八章 其他参考资料(一) # 默认用户名和密码(SQL) IRIS® 数据平台提供了用于登录数据库和开始使用的默认用户名和密码。默认用户名为“`_SYSTEM`”(大写),密码为“`sys`”。 # SQLCODE错误代码(SQL) 执行大多数 SQL操作都会发出`SQLCODE`值。发出的`SQLCODE`值为`0`、`100`和负整数值。 - `SQLCODE=0`表示SQL操作成功完成。对于`SELECT`语句,这通常意味着从表中成功检索数据。但是,如果`SELECT`执行聚合操作(例如:`SELECT SUM(Myfield)`),则聚合操作成功,即使`myfield`中没有数据,也会发出`SQLCODE=0`;在这种情况下,`SUM`返回`NULL`,`%ROWCOUNT=1`。 - `SQLCODE=100`表示SQL操作成功,但没有找到可操作的数据。发生这种情况的原因有很多。对于`SELECT`,这些包括:指定表不包含数据;表不包含满足查询条件的数据;或者行检索已到达表的最后一行。对于`UPDATE`或`DELETE`,它们包括:指定的表不包含数据;或者表不包含满足`WHERE`子句条件的数据行。在这些情况下,`%ROWCOUNT=0`。 - `SQLCODE=-n`表示错误。负整数值指定发生的错误类型。`SQLCODE=-400`是通用的致命错误代码。 # 字段约束(SQL) 字段约束指定管理字段允许的数据值的规则。一个字段可能有以下约束: - `NOT NULL`非空:必须在每条记录中为该字段指定值(可接受空字符串)。 - `UNIQUE`唯一:如果在记录中为该字段指定值,则该值必须是唯一值(可接受的空字符串)。但是,可以为该字段创建多个没有值(NULL)的记录。 - `DEFAULT`默认值:必须指定一个值,否则 IRIS会为每个记录中的此字段提供一个默认值(接受空字符串)。默认值可以是NULL、空字符串或适用于该数据类型的任何其他值。 - `UNIQUE NOT NULL`:必须在每条记录中为该字段指定唯一的值(可接受一个空字符串)。可用作主键。 - `DEFAULT NOT NULL`:必须指定一个值,否 IRIS会为每个记录中的此字段提供一个默认值(可接受的空字符串)。 - `UNIQUE DEFAULT`唯一默认值:不推荐-必须指定唯一值,否则 IRIS会为每个记录中的此字段提供一个默认值(一个可接受的空字符串)。缺省值可以是`NULL`、空字符串或适用于该数据类型的任何其他值。仅当缺省值是唯一生成的值(例如,`CURRENT_TIMESTAMP`)时使用,或者如果缺省值仅使用一次。 - `UNIQUE DEFAULT NOT NULL`:不建议-必须指定唯一的值,否则 IRIS会为每个记录中的此字段提供一个默认值(一个可接受的空字符串)。缺省值可以是空字符串或适用于该数据类型的任何其他值;它不能为空。仅当缺省值是唯一生成的值(例如,`CURRENT_TIMESTAMP`)时使用,或者如果缺省值仅使用一次。可用作主键。 - `IDENTITY`: IRIS为每个记录中的该字段提供唯一的、系统生成的、不可修改的整数值。忽略其他字段约束关键字。可用作主键。 数据值必须适合该字段的数据类型。空字符串不是数值字段的可接受值。 # 保留字(SQL) SQL保留字列表。 ```sql %AFTERHAVING | %ALLINDEX | %ALPHAUP | %ALTER | %BEGTRANS | %CHECKPRIV | %CLASSNAME | %CLASSPARAMETER | %DBUGFULL | %DELDATA | %DESCRIPTION | %EXACT | %EXTERNAL | %FILE | %FIRSTTABLE | %FLATTEN | %FOREACH | %FULL | %ID | %IDADDED | %IGNOREINDEX | %IGNOREINDICES | %INLIST | %INORDER | %INTERNAL | %INTEXT | %INTRANS | %INTRANSACTION | %KEY | %MATCHES | %MCODE | %MERGE | %MINUS | %MVR | %NOCHECK | %NODELDATA | %NOFLATTEN | %NOFPLAN | %NOINDEX | %NOLOCK | %NOMERGE | %NOPARALLEL | %NOREDUCE | %NORUNTIME | %NOSVSO | %NOTOPOPT | %NOTRIGGER | %NOUNIONOROPT | %NUMROWS | %ODBCIN | %ODBCOUT | %PARALLEL | %PLUS | %PROFILE | %PROFILE_ALL | %PUBLICROWID | %ROUTINE | %ROWCOUNT | %RUNTIMEIN | %RUNTIMEOUT | %STARTSWITH | %STARTTABLE | %SQLSTRING | %SQLUPPER | %STRING | %TABLENAME | %TRUNCATE | %UPPER | %VALUE | %VID ABSOLUTE | ADD | ALL | ALLOCATE | ALTER | AND | ANY | ARE | AS | ASC | ASSERTION | AT | AUTHORIZATION | AVG | BEGIN | BETWEEN | BIT | BIT_LENGTH | BOTH | BY | CASCADE | CASE | CAST | CHAR | CHARACTER | CHARACTER_LENGTH | CHAR_LENGTH | CHECK | CLOSE | COALESCE | COLLATE | COMMIT | CONNECT | CONNECTION | CONSTRAINT | CONSTRAINTS | CONTINUE | CONVERT | CORRESPONDING | COUNT | CREATE | CROSS | CURRENT | CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP | CURRENT_USER | CURSOR | DATE | DEALLOCATE | DEC | DECIMAL | DECLARE | DEFAULT | DEFERRABLE | DEFERRED | DELETE | DESC | DESCRIBE | DESCRIPTOR | DIAGNOSTICS | DISCONNECT | DISTINCT | DOMAIN | DOUBLE | DROP | ELSE | END | ENDEXEC | ESCAPE | EXCEPT | EXCEPTION | EXEC | EXECUTE | EXISTS | EXTERNAL | EXTRACT | FALSE | FETCH | FIRST | FLOAT | FOR | FOREIGN | FOUND | FROM | FULL | GET | GLOBAL | GO | GOTO | GRANT | GROUP | HAVING | HOUR | IDENTITY | IMMEDIATE | IN | INDICATOR | INITIALLY | INNER | INPUT | INSENSITIVE | INSERT | INT | INTEGER | INTERSECT | INTERVAL | INTO | IS | ISOLATION | JOIN | LANGUAGE | LAST | LEADING | LEFT | LEVEL | LIKE | LOCAL | LOWER | MATCH | MAX | MIN | MINUTE | MODULE | NAMES | NATIONAL | NATURAL | NCHAR | NEXT | NO | NOT | NULL | NULLIF | NUMERIC | OCTET_LENGTH | OF | ON | ONLY | OPEN | OPTION | OR | OUTER | OUTPUT | OVERLAPS | PAD | PARTIAL | PREPARE | PRESERVE | PRIMARY | PRIOR | PRIVILEGES | PROCEDURE | PUBLIC | READ | REAL | REFERENCES | RELATIVE | RESTRICT | REVOKE | RIGHT | ROLE | ROLLBACK | ROWS | SCHEMA | SCROLL | SECOND | SECTION | SELECT | SESSION_USER | SET | SHARD | SMALLINT | SOME | SPACE | SQLERROR | SQLSTATE | STATISTICS | SUBSTRING | SUM | SYSDATE | SYSTEM_USER | TABLE | TEMPORARY | THEN | TIME | TIMEZONE_HOUR | TIMEZONE_MINUTE | TO | TOP | TRAILING | TRANSACTION | TRIM | TRUE | UNION | UNIQUE | UPDATE | UPPER | USER | USING | VALUES | VARCHAR | VARYING | WHEN | WHENEVER | WHERE | WITH | WORK | WRITE ``` # 描述 在SQL中,某些字是保留的。不能将SQL保留字用作SQL标识符(如表、列、AS别名或其他实体的名称),除非: - 该单词用双引号(`"word"`)分隔,并且支持分隔的标识符。 该列表仅包含在此意义上保留的那些单词;它不包含所有SQL关键字。上面列出的几个单词以`"%"`字符开头,表示它们是 SQL专有扩展关键字。通常,不建议使用以`"%"`开头的单词作为表名和列名等标识符,因为将来可能会添加新的 SQL扩展关键字。 可以通过调用`IsReserve vedWord()`方法来检查某个字是否为SQL保留字,如下例所示。将保留字指定为引号字符串;保留字不区分大小写。`$SYSTEM.SQL.IsReserve vedWord()`返回布尔值。 ```java /// d ##class(PHA.TEST.SQLFunction).ReservedWord() ClassMethod ReservedWord() { w !,"Reserved?: ",$SYSTEM.SQL.IsReservedWord("VARCHAR") w !,"Reserved?: ",$SYSTEM.SQL.IsReservedWord("varchar") w !,"Reserved?: ",$SYSTEM.SQL.IsReservedWord("VarChar") w !,"Reserved?: ",$SYSTEM.SQL.IsReservedWord("FRED") } ``` ```java DHC-APP> d ##class(PHA.TEST.SQLFunction).ReservedWord() Reserved?: 1 Reserved?: 1 Reserved?: 1 Reserved?: 0 ``` 此方法也可以作为存储过程从ODBC或JDBC调用:`%SYSTEM.SQL_IsReservedWord("nnnn")`。