您的位置:首页 > 数据库

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: