GP-Sql基础语法
2016-01-08 18:27
246 查看
SELECT
SELECT select_list
FROM table_expression
[ORDER BY sort_expression1 [ASC | DESC] [, sort_expression2 [ASC | DESC] ...]]
[LIMIT { number | ALL }] [OFFSET number]
用户与ORACLE相似,limit X返回不超过该数字的行 offset指明在开始返回行之前忽略多少行
insert
特殊用法:
INSERT INTO products (product_no, name, price) SELECT * FROM products;
INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', DEFAULT);
INSERT INTO products DEFAULT VALUES;
INSERT INTO products (product_no, name, price) VALUES
(1, 'Cheese', 9.99),
(2, 'Bread', 1.99),
(3, 'Milk', 2.99);
update
• 语法和ORACLE一样
• 不能对分布字段即distributed by ()子句中的字段进行更新
• 在更新表时,如果存在表关联,那么相对应的关联字段都必须是对应的distributed by 字段
• Update 不支持嵌套子查询。
if
PL/pgSQL有五种形式的IF:
1) IF ... THEN
2) IF ... THEN ... ELSE
3) IF ... THEN ... ELSE IF
4) IF ... THEN ... ELSIF ... THEN ... ELSE
5) IF ... THEN ... ELSEIF ... THEN ... ELSE
【注:对于if...then...;elsif..then..;else... end if;类型语句在使用时,有可能会出现可编译但是无法执行的情况,对于这种情况,
可以改写成case when…then…else …end 方式来表示】
execute
execute 'insert into dw.tdw_test('
||quote_ident(id)||','||quote_ident(key)||')
values (1,''sss'')';
包含字段和表标识符的变量应该传递给 quote_ident 函数。那些包含数值的表达式,如果中的数值在构造出来的命令字符串里是文本字符串,
那么应该传递给 quote_literal。在pl/pgsql 的function中,最好不要使用动态SQL语句,特别是DDL语句。因为这样导致在在某个segment hosts中,
可能这个表的drop操作会导致锁字典表,并且DROP后并没有及时释放锁资源;
exception
抛出异常的方式与oracle不同。
Oracle:raise_application_error (-20001, 'XXX'); Gp:RAISE EXCEPTION 'xxx';
如果要抛出的异常带有参数,则为:RAISE EXCEPTION '%',parameter;
gp同时支持sqlcode和sqlstate两种异常代码,因为sqlcode 的时效性已经过了,所以一般采用sqlstate。
SELECT select_list
FROM table_expression
[ORDER BY sort_expression1 [ASC | DESC] [, sort_expression2 [ASC | DESC] ...]]
[LIMIT { number | ALL }] [OFFSET number]
用户与ORACLE相似,limit X返回不超过该数字的行 offset指明在开始返回行之前忽略多少行
insert
特殊用法:
INSERT INTO products (product_no, name, price) SELECT * FROM products;
INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', DEFAULT);
INSERT INTO products DEFAULT VALUES;
INSERT INTO products (product_no, name, price) VALUES
(1, 'Cheese', 9.99),
(2, 'Bread', 1.99),
(3, 'Milk', 2.99);
update
• 语法和ORACLE一样
• 不能对分布字段即distributed by ()子句中的字段进行更新
• 在更新表时,如果存在表关联,那么相对应的关联字段都必须是对应的distributed by 字段
• Update 不支持嵌套子查询。
if
PL/pgSQL有五种形式的IF:
1) IF ... THEN
2) IF ... THEN ... ELSE
3) IF ... THEN ... ELSE IF
4) IF ... THEN ... ELSIF ... THEN ... ELSE
5) IF ... THEN ... ELSEIF ... THEN ... ELSE
【注:对于if...then...;elsif..then..;else... end if;类型语句在使用时,有可能会出现可编译但是无法执行的情况,对于这种情况,
可以改写成case when…then…else …end 方式来表示】
execute
execute 'insert into dw.tdw_test('
||quote_ident(id)||','||quote_ident(key)||')
values (1,''sss'')';
包含字段和表标识符的变量应该传递给 quote_ident 函数。那些包含数值的表达式,如果中的数值在构造出来的命令字符串里是文本字符串,
那么应该传递给 quote_literal。在pl/pgsql 的function中,最好不要使用动态SQL语句,特别是DDL语句。因为这样导致在在某个segment hosts中,
可能这个表的drop操作会导致锁字典表,并且DROP后并没有及时释放锁资源;
exception
抛出异常的方式与oracle不同。
Oracle:raise_application_error (-20001, 'XXX'); Gp:RAISE EXCEPTION 'xxx';
如果要抛出的异常带有参数,则为:RAISE EXCEPTION '%',parameter;
gp同时支持sqlcode和sqlstate两种异常代码,因为sqlcode 的时效性已经过了,所以一般采用sqlstate。
相关文章推荐
- GP-sql编写原则
- 数据库连接技术之OLE DB
- redis如何利用appendonly.aof恢复数据
- mongodb 常用语句
- SqlServer驱动包 Maven
- iOS数据库的队列与事务
- linux oracle jdbc遇到的问题记录
- sql文件导入powerdesigner
- oracle创建表(约束)
- Oracle&&Mysql存储过程实例
- SQL常用函数
- window 安装Mysql 5.6 发生系统错误 1067
- MySQL 相关命令
- Oracle EBS OM销售订单行状态“施实”处理方法
- 浅谈 PostgreSQL 的 timestamp 类型
- GP数据库中时间函数例子
- PL/SQL的ROWTYPE在insert和update语句里的妙用
- 包子的 oracle 学习笔记---SQL学习
- mysql-binlog日志全功率
- MySQL Proxy的几篇文章