GP-Sql基础语法

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。




  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值