GBase 8a学习总结
INSERT [INTO] [database_name.]table_name [(col_name,...)] SELECT ... FROM [database_name.]table_name ...
INSERT 将新行插入到一个已存在的表中。INSERT...VALUES 形式的语句基于明确的值插入记录行。INSERT ... SELECT 形式的语句从另一个或多个表中选取出值,并将其插入。 1.4.2.2 UPDATE
语法格式:
UPDATE [database_name.]table_name
SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition]
当更新列的值是一个合法的表达式时,也可以进行正确的更新赋值操作。 需要说明的是,UPDATE 操作不支持更新DISTRIBUTED BY 列的值。 1.4.2.3 DELETE
语法格式: 单表语法:
DELETE [FROM] [database_name.]table_name [tbl_alias] [WHERE where_definition] 多表语法:
DELETE [database_name.]table_name1 [tbl_alias1] FROM
[database_name.]table_name1[tbl_alias1,[database_name.]table_name2 [tbl_alias2] [WHERE where_definition] 其中,
对于单表,关键字FROM 和表别名tbl_alias 是可选关键字,无论DELETE语句中是否包含表别名tbl_alias,都可以省略FROM 关键字。
对于多表,必须包含FROM 关键字。 注意事项:
当DELETE 语句中包含多个表时,以下情况要特别注意: 不允许实际删除表的个数超过一个。 不允许删除操作中带有被删除表的子查询。
29 / 38
GBase 8a学习总结
1.4.2.4 SELECT
语法格式: SELECT
[ALL | DISTINCT | DISTINCTROW ] select_expr, ... [FROM table_references [WHERE where_definition]
[GROUP BY {col_name | expr | position} , ...]
[HAVING where_definition]
[ORDER BY {col_name | expr | position} [ASC | DESC] , ...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}] [INTO OUTFILE '' export_options]
在SELECT 关键字之后可以给出大量的选项,它们会影响到语句的操作。 ALL,DISTINCT 和DISTINCTROW 选项指定了是否返回重复的行,默认为ALL(所有匹配的行都返回)。DISTINCT 和DISTINCTROW 是同义的,用于删除结果集中重复的行。
select_expr:指查询显示的列,可以使用AS 来为SELECT 显示的列命名别名,别名不要和SELECT 显示的列名重复。
table_references:指定从其中找出行的一个或多个表。它的语法在JOIN语法中有描述。
where_definition:含有WHERE 关键字,其后是查询所要满足的一个或多个条件的表达式,但是where 中不能使用聚合函数。
1.5 存储过程、函数
1.5.1
创建存储过程、函数
存储过程和函数是由CREATE PROCEDURE 和CREATE FUNCTION 语句所创建的程序。存储过程通过CALL 语句来调用程序,而且只能通过输出变量得到返回值。
30 / 38
GBase 8a学习总结
函数可以像其它函数一样从语句内部来调用(通过调用函数名),并返回一个标量值。存储程序(过程和函数)也可以调用其它存储程序(过程和函数)。
存储过程语法格式:
CREATE PROCEDURE
函数语法格式:
CREATE FUNCTION
参数说明如下:
([
<参数方向><参数名称><参数数据类型>
存储过程的<参数方向>确定参数是输入、输出还是输入输出,只能取IN、OUT、INOUT 中的一个。函数的<参数方向>只能是输入IN。
<参数名称>在同一个存储过程中必须唯一,只允许a~z、A~Z、0~9、下划线,且不能只包含数字。
<参数数据类型>指定参数的数据类型。
<过程定义>、<函数定义>是一系列的SQL 语句的组合,其中包含一些数据操作以完成一定的功能逻辑。
定义存储过程时,存储过程名后面的括号是必需的,即使没有任何参数,也
31 / 38
GBase 8a学习总结
不能省略。
如果存储过程、函数中的<过程定义>仅包含一条SQL 语句,则可以省略BEGIN 和END,否则,在定义存储过程时,必须使用BEGIN...END 结构把相关的SQL 语句组织在一起形成<过程定义>。
存储过程、函数可以嵌套,也可以递归调用。 type 是GBase 8a MPP Cluster 支持的数据类型。
下面是一个使用IN,OUT 参数的简单的存储过程的示例。这个示例在存储过程定义前,使用GBase 客户端定界符命令来改变语句定界符从?;?到?//?。这允许在存储体中,定界符传递给服务器而不被GBase 解释。 1.5.2
修改存储过程、函数
语法格式:
ALTER {PROCEDURE | FUNCTION}
{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } | COMMENT 'string' 1.5.3
删除存储过程、函数
语法格式:
DROP {PROCEDURE | FUNCTION} [IF EXISTS]
调用存储过程、函数
GBase 8a MPP Cluster 使用CALL 语句调用存储过程。 语法格式:
CALL [database_name.]proc_name([<参数列表>]) 说明:
调用存储过程时,如果存储过程有参数,则必须按照存储过程的定义中的顺序和类型为参数赋值,同时,对于OUT 和INOUT 参数,必须指明OUT 和INOUT关
32 / 38
GBase 8a学习总结
键字。
即使存储过程没有任何参数,在调用时也必须在<存储过程名称>后面加上括号。
GBase 8a MPP Cluster 使用SELECT 语句调用函数。 SET @变量名 = [database_name.]func_name([<参数列表>]) GBase 8a MPP Cluster 使用SELECT 语句查看调用函数的执行结果。 语法格式: SELECT @变量名; 1.5.5
查看存储过程、函数的状态
查看创建或修改后的存储过程或函数的状态,可以使用如下语句: SHOW {PROCEDURE | FUNCTION} STATUS
SHOW CREATE {PROCEDURE | FUNCTION}
2 GBase + Hibernate配置
2.1 配置
hibernate.cfg.xml文件
1. 根据hibernate 版本获取对应的dialect 包。
2. 引入hibernate,dialect 包和jdbc 驱动包
3. 配置hibernate.cfg.xml,设置gbase 使用的方言类,参考黑色背景设置。 4. 然后配置数据库连接。
33 / 38