- DECLARE
功能描述
定义一个游标。
语法格式
DECLARE name [ BINARY ] [ INSENSITIVE ] [ [ NO ] SCROLL ]
CURSOR [ { WITH | WITHOUT } HOLD ] FOR query
参数说明
- name:要创建的游标的名称;
- BINARY:使游标返回二进制数据而不返回文本格式数据;
- INSENSITIVE:从游标中检测的数据不受其底层表上数据更新的影响;
- SCROLL | NO SCROLL:SCROLL表示游标可以用非顺序(例如反向)的方式进行检索,NO SCROLL表示游标只能以顺序的方式从进行检索;
- WITH HOLD | WITHOUT HOLD:WITH HOLD表示游标在创建它的事务提交后还可以继续使用,WITHOUT HOLD表示不能在创建它的事务之外使用,默认值为WITHOUT HOLD;
- query:提供该游标返回的SELECT或者VALUES命令;
注意事项
关键词BINARY、INSENSITIVE和SCROLL可以以任意顺序出现。
游标命令需要在事务之间被指定,只有使用了WITH HOLD的游标可以保留至事务提交后,其余游标均在事务提交时移除。
当查询包括FOR UPDATE或FOR SHARE时,不能指定WITH HOLD。
当查询包括FOR UPDATE或FOR SHARE时,不能指定 SCROLL。
可以通过查询pg_cursors系统视图可以看到所有可用的游标。
范例
DECLARE dc_customer CURSOR FOR SELECT * FROM customer;
DECLARE CURSOR
语法兼容
SQL标准只允许在嵌入式SQL和模块中使用游标。PostgreSQL允许以交互的方式使用游标。
相关语法
- DELETE
功能描述
从指定的表里删除行。
语法格式
[ WITH [ RECURSIVE ] with_query [, ...] ]
DELETE FROM [ ONLY ] table_name [ * ] [ [ AS ] alias ]
[ USING using_list ]
[ WHERE condition | WHERE CURRENT OF cursor_name ]
[ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]
参数说明
- with_query:GBase 8c暂不支持。用于声明一个或多个可以在主查询中通过名字引用的子查询,相当于临时表;
- table_name:目标表的名字,可以被模式修饰;
- alias:目标表的别名;
- using_list:using子句;
- condition:一个返回boolean值的表达式,用于判断哪些行需要被删除;
- cursor_name:要在WHERE CURRENT OF情况中使用的游标的名称;
- output_expression:DELETE命令删除行之后计算输出结果的表达式,该表达式可以使用表的任意字段,可以使用*返回被删除行的所有字段;
- output_name:字段的输出名称。
注意事项
要删除表中的数据,用户必须对它有DELETE权限。同样也必须有USING子句引用的表以及condition上读取的表的SELECT权限。
范例
DELETE FROM customer WHERE id=9;
DELETE 1
语法兼容
这个命令符合SQL标准,USING和RETURNING子句以及在DELETE中使用WITH是PostgreSQL扩展。
相关语法
- DISCARD
功能描述
丢弃会话状态。
语法格式
DISCARD { ALL | PLANS | SEQUENCES | TEMPORARY | TEMP }
参数说明
- PLANS:释放所有已缓存的查询计划,强制在下一次使用相关预备语句时重新做计划。
- SEQUENCES:丢弃所有已缓存的序列相关的状态,包括currval()/lastval()信息以及任何还未被nextval()返回的预分配的序列值(预分配序列值的描述请见CREATE SEQUENCE);
- TEMPORARY | TEMP:删除当前会话中创建的所有临时表;
- ALL:释放与当前会话相关的所有临时资源并且把会话重置为初始状态。
注意事项
DISCARD ALL不能在事务内执行。
范例
DISCARD ALL;
DISCARD ALL
语法兼容
DISCARD是一种 PostgreSQL扩展。
- DO
功能描述
执行匿名代码块。
代码块被看做是没有参数的一段函数体,返回值类型是void。它的解析和执行是同一时刻发生的。
语法格式
DO [ LANGUAGE lang_name ] code
参数说明
- code:程序语言代码可以被执行的,程序语言必须指定为字符串;
- lang_name:用来解析代码的程序语言的名字,如果缺省,默认的语言是plpgsql;
注意事项
程序语言在使用之前,必须通过命令CREATE LANGUAGE安装到当前的数据库中。 plpgsql是默认的安装语言,其它语言安装时必须指定。
如果语言是不受信任的,用户必须有使用程序语言的USAGE权限,或者是系统管理员。
范例
授予用户gbasedbt对模式public下视图的所有操作权限:
DO $$DECLARE r record;
BEGIN
FOR r IN SELECT table_schema, table_name FROM information_schema.tables
WHERE table_type = 'VIEW' AND table_schema = 'public'
LOOP
EXECUTE 'GRANT ALL ON ' || quote_ident(r.table_schema) || '.' || quote_ident(r.table_name) || ' TO gbasedbt';
END LOOP;
END$$;
DO
语法兼容
SQL 标准中没有DO语句。
相关语法
- DROP ACCESS METHOD
功能描述
移除一种访问方法。
语法格式
DROP ACCESS METHOD [ IF EXISTS ] name [ CASCADE | RESTRICT ]
参数说明
- IF EXISTS:如果访问方法不存在,不报错仅提示;
- name:现有的访问方法的名称;
- CASCADE:自动删除依赖于该访问方法的对象(例如操作符类、操作符族以及索引),以及所有依赖于那些对象的对象;
- RESTRICT:如果有任何对象依赖于该访问方法,则拒绝删除,此为默认设置。
注意事项
只有系统管理员能够删除访问方法。
范例
DROP ACCESS METHOD heptree;
语法兼容
DROP ACCESS METHOD是一种PostgreSQL扩展。
相关语法
- DROP AGGREGATE
功能描述
移除一个聚集函数。
语法格式
DROP AGGREGATE [ IF EXISTS ] name ( aggregate_signature ) [, ...] [ CASCADE | RESTRICT ]
这里aggregate_signature是:
* |
[ argmode ] [ argname ] argtype [ , ... ] |
[ [ argmode ] [ argname ] argtype [ , ... ] ] ORDER BY [ argmode ] [ argname ] argtype [ , ... ]
参数说明
- IF EXISTS:如果该聚集函数不存在不报错,仅提示;
- name:现有聚集函数的名称,可以被模式修饰;
- argmode:参数的模式,可选的参数:IN或VARIADIC,缺省默认为IN;
- argname:参数的名称,无意义,可省略;
- argtype:聚集函数的输入的数据类型。无参数的聚集函数,直接标*。引用有序集聚聚集函数,在直接参数说明和聚集参数说明之间加ORDER BY;
- CASCADE:自动删除依赖于该聚集函数的对象(例如视图),以及所有依赖于那些对象的对象;
- RESTRICT:如果有任何对象依赖于该聚集函数,则拒绝删除,此为默认设置。
范例
DROP AGGREGATE sum2(integer);
DROP AGGREGATE
语法兼容
在SQL标准中没有DROP AGGREGATE语句。
相关语法
ALTER AGGREGATE, CREATE AGGREGATE
- DROP CAST
功能描述
移除一个转换。
语法格式
DROP CAST [ IF EXISTS ] (source_type AS target_type) [ CASCADE | RESTRICT ]
参数说明
- IF EXISTS:如果该转换不存在不报错仅提示;
- source_type:该转换的源数据类型的名称;
- target_type:该转换的目标数据类型的名称;
- CASCADE | RESTRICT:转换没有依赖关系,这些关键词无意义。
注意事项
要删除转换,必须为源数据类型和目标数据类型的所有者。
范例
DROP CAST (text AS int);
语法兼容
DROP CAST命令符合SQL标准。
相关语法
- DROP COLLATION
功能描述
移除一个排序规则。
语法格式
DROP COLLATION [ IF EXISTS ] name [ CASCADE | RESTRICT ]
参数说明
- IF EXISTS:如果该排序规则不存在,不报错仅提示;
- name:排序规则的名称,可以被模式修饰;
- CASCADE:自动删除依赖于该排序规则的对象,以及所有依赖于那些对象的对象;
- RESTRICT:如果有任何对象依赖于该排序规则,则拒绝删除,此为默认设置。
注意事项
要删除一个排序规则,必须是该规则的所有者。
范例
DROP COLLATION german1;
DROP COLLATION
语法兼容
除了IF EXISTS选项之外,DROP COLLATION命令符合SQL标准。IF EXISTS是一个PostgreSQL扩展。
相关语法
ALTER COLLATION, CREATE COLLATION
- DROP CONVERSION
功能描述
移除一个编码转换。
语法格式
DROP CONVERSION [ IF EXISTS ] name [ CASCADE | RESTRICT ]
参数说明
- IF EXISTS:如果该转换不存在,不报错仅提示;
- name:转换的名称,可以被模式修饰;
- CASCADE | RESTRICT:转换没有依赖关系,这些关键词无意义。
注意事项
要删除一个编码转换,必须是其拥有者。
范例
DROP CONVERSION myconv;
语法兼容
在 SQL 标准中没有DROP CONVERSION语句。
相关语法
ALTER CONVERSION, CREATE CONVERSION
- DROP DATABASE
功能描述
删除一个数据库。
语法格式
DROP DATABASE [ IF EXISTS ] name
参数说明
- IF EXISTS:如果该数据库不存在,不报错仅提示;
- name:要移除的数据库的名称。
注意事项
只有数据库管理员有权限移除数据库。
移除数据库时,会删除该数据库的系统目录及目录文件,且该操作不可撤销,请谨慎处理。
DROP DATABASE不能在事务内执行,且不能在连接到该数据库时执行。
范例
DROP DATABASE gbasedbt;
DROP DATABASE
语法兼容
SQL标准中没有DROP DATABASE语句。
相关语法