以 SQL_ 开头的数据类型是 ClearQuest 用来统一不同数据库厂商的数据类型,例如 SQL_VARCHAR 可以代替 VARCHAR (DB2/SQL Server) 和 VARCHAR2 (Oracle), SQL_DECIMAL 可以代替 DECIMAL (DB2/SQL Server)、和 NUMBER (Oracle),SQL_LONGVARCHAR 可以代替 CLOB (DB2/Oracle) 和 text (SQL Server) 等等,这样就方便了客户不用顾虑不同数据库厂商之间的差异了。
columns、indices、primary_keys 和 foreign_keys 分别是输出当前用户所拥有指定表的字段信息、索引信息、主键约束信息和外键约束信息。例如:
>columns defect;
RATL_MASTERSHIP INTEGER (10,0)
DBID INTEGER (10,0)
IS_ACTIVE INTEGER (10,0)
ID VARCHAR (13,0)
STATE INTEGER (10,0)
VERSION INTEGER (10,0)
LOCK_VERSION INTEGER (10,0)
LOCKED_BY INTEGER (10,0)
IS_DUPLICATE INTEGER (10,0)
UNDUPLICATE_STATE VARCHAR (50,0)
HEADLINE VARCHAR (125,0)
DESCRIPTION CLOB (104857600,0)
PRIORITY VARCHAR (30,0)
SEVERITY VARCHAR (30,0)
SUBMITTER INTEGER (10,0)
SUBMIT_DATE TIMESTAMP (26,6)
OWNER INTEGER (10,0)
OLD_ID VARCHAR (50,0)
KEYWORDS CLOB (104857600,0)
SYMPTOMS CLOB (104857600,0)
NOTE_ENTRY CLOB (104857600,0)
NOTES_LOG CLOB (104857600,0)
RESOLUTION VARCHAR (50,0)
PROJECT INTEGER (10,0)
CUSTOMER_SEVERITY VARCHAR (50,0)
>indices defect;
Unique Index Name Column
Y DEFECT_UC DBID
Y DEFECT_UK ID
N IX_16777254 RATL_MASTERSHIP
N IX_16777314 STATE
N IX_16777325 SUBMITTER
N IX_16777327 OWNER
N IX_16777924 PROJECT
>primary_keys defect;
Key Name Column Sequence
DEFECT_PK DBID 1
>foreign_keys defect;
FK Column PK Table PK Column
RATL_MASTERSHIP RATL_REPLICAS DBID
UCM_PROJECT UCM_PROJECT DBID
SUBMITTER USERS DBID
OWNER USERS DBID
3 pdsql 高级功能
有了上述 pdsql 的基本功能,就可以满足普通 ClearQuest 数据库的管理需求了。pdsql 还有一些高级功能,如数据库的清理、表结构的维护、大对象(LOB)字段的支持、ClearQuest 记录中附件的转储等等。
本章介绍 pdsql 的高级特殊命令和对不同厂商数据库环境的部署。
3.1 pdsql 特殊命令
1. 猛烈魔法 (nuke_all_tables):nuke_all_tables 命令可以删除所有当前用户可访问的表和所有数据,请慎重使用,确认数据都没用或已经有好的备份。用法如下:
>nuke_all_tables;
2. SQL Server 数据库特有创建数据库和增加数据库属主的命令:create_database 和 add_as_dbo。用法如下:
>create_database dbname device size;
>add_as_dbo loginname;
关于这两个命令的示例参考下面 3.4 用 pdsql 为 ClearQuest 部署 SQL Server 数据库环境。
3. 映射 id 命令 map_ids,有些数据库不支持嵌套 select 的 update 语句,此命令就用来实现统一的“update set x = (select..)”语句。map_ids 命令用法为:
>map_ids test_table field maptable
要用 map_ids 命令,首先创建一个临时映射表,表字段 old 和 new 分别对应旧值和新值 , 表记录就是一组新旧值映射表。
4. 断言语句 assert,此命令将会生成一个条件检查语句,然后执行,如果不满足就抛异常信息(Exception)。assert 命令语法为:
>assert string_equal table field value;
检查表中指定的字符串字段值是否和想要的值相等,如果不相等就抛包含表名、该字段名和实际值等异常信息。
>assert integer_equal table field value;
检查表中指定的整型字段值是否和想要的值相等,如果不相等就抛包含表名、该字段名和实际值等异常信息。
>assert empty table;
检查表是否为空,如果不为空就抛包含表名和实际记录数的异常信息。
>assert unique_index name on table (fields, field);
检查是否可以在指定的字段上创建唯一约束索引,如果不能创建就抛包含表名和该字段的异常信息。
>assert unused_value table field value;
检查表中指定字段中是否有和想比较的值相等的记录,如果有就抛包含表名、该字段名、比较的值和记录数等异常信息。
>assert unused_state_value table field value stringval;
检查表中指定字段中是否有和想比较的值相等的记录,如果有就抛包含表名、该字段名、指定的状态值和记录数等异常信息。
>assert undefined_column table column;
检查指定的字段是否包含在表中,如果不在就抛包含表名和该字段的异常信息。
>assert undefined_table table;
检查是否当前用户没有定义指定的表,如果定义了就抛包含表名的异常信息。
>assert defined_table table;
检查是否当前用户定义指定了的表,如果没有定义就抛包含表名的异常信息。
>assert alter_table table;
检查是否可对指定的表进行改变操作,可用来判断是否该表被锁了,如果该表不能被执行改变操作就抛异常信息。
5. 统一的表删除命令 drop_table:
>drop_table test_table;