返回首页

gbase数据、南大通用产品文档:GBase8cDELETE

更新日期:2024年09月11日

功能描述
DELETE 从指定的表里删除满足WHERE 子句的行。如果WHERE 子句不存在,将删
除表中所有行,结果只保留表结构。
注意事项
表的所有者、被授予了表DELETE 权限的用户或被授予DELETE ANY TABLE 权限的
用户有权删除表中数据,系统管理员默认拥有此权限。同时也必须有USING 子句引用的表
以及condition 上读取的表的SELECT 权限。
对于列存表,暂时不支持RETURNING 子句。
语法格式
[ WITH [ RECURSIVE ] with_query [, ...] ]
DELETE [/*+ plan_hint */] FROM [ ONLY ] table_name [partition_clause] [ * ] [ [ AS ]
alias ]
[ USING using_list ]
[ WHERE condition | WHERE CURRENT OF cursor_name ] [ LIMIT row_count ]
[ RETURNING { * | { output_expr [ [ AS ] output_name ] } [, ...] } ];
参数说明

WITH [ RECURSIVE ] with_query [, …]
用于声明一个或多个可以在主查询中通过名称引用的子查询,相当于临时表。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1099
如果声明了RECURSIVE,那么允许SELECT 子查询通过名称引用它自己。
其中with_query 的详细格式为:
with_query_name [ ( column_name [, ...] ) ] AS [ [ NOT ] MATERIALIZED]
( {select | values | insert | update | delete} )
with_query_name 指定子查询生成的结果集名称,在查询中可使用该名称访问子查询的
结果集。
column_name 指定子查询结果集中显示的列名。
每个子查询可以是SELECT、VALUES、INSERT、UPDATE 或DELETE 语句。
用户可以使用MATERIALIZED / NOT MATERIALIZED 对CTE 进行修饰。
如果声明为MATERIALIZED,WITH 查询将被物化,生成一个子查询结果集的拷贝,
在引用处直接查询该拷贝,因此WITH 子查询无法和主干SELECT 语句进行联合优化(如
谓词下推、等价类传递等)
,对于此类场景可以使用NOT MATERIALIZED 进行修饰,如果
WITH 查询语义上可以作为子查询内联执行,则可以进行上述优化。
如果用户没有显示声明物化属性则遵守以下规则:如果CTE 只在所属主干语句中被引
用一次,且语义上支持内联执行,则会被改写为子查询内联执行,否则以CTE Scan 的方式
物化执行。

plan_hint 子句
以/*+ */的形式在DELETE 关键字后,用于对DELETE 对应的语句块生成的计划进行
hint 调优,
详细用法请参见章节使用Plan Hint 进行调优。
每条语句中只有第一个/*+ plan_hint
*/注释块会作为hint 生效,里面可以写多条hint。

ONLY
如果指定ONLY 则只有该表被删除;如果没有声明,则该表和它的所有子表将都被删
除。

table_name

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1100
目标表的名称(可以有模式修饰)

取值范围:已存在的表名。

partition_clause
指定分区删除操作
PARTITION { ( partition_name ) | FOR ( partition_value [, …] ) } |
SUBPARTITION { ( subpartition_name ) | FOR ( subpartition_value [, …] ) }
关键字详见SELECT 一节介绍
示例详见CREATE TABLE SUBPARTITION

alias
目标表的别名。
取值范围:字符串,符合标识符命名规范。

using_list
using 子句。

condition
一个返回Boolean 值的表达式,用于判断哪些行需要被删除。不建议使用int 等数值类
型作为condition,因为int 等数值类型可以隐式转换为bool 值(非0 值隐式转换为true,0
转换为false)
,可能导致非预期的结果。

WHERE CURRENT OF cursor_name
当前不支持,仅保留语法接口。

output_expr
DELETE 命令删除行之后计算输出结果的表达式。
该表达式可以使用表的任意字段。

以使用*返回被删除行的所有字段。

output_name

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1101
一个字段的输出名称。
取值范围:字符串,符合标识符命名规范。
示例
--创建表tpcds.customer_address_bak。
gbase=#CREATE TABLE tpcds.customer_address_bak AS TABLE tpcds.customer_address;
--删除tpcds.customer_address_bak 中ca_address_sk 小于14888 的职员。
gbase=#DELETE FROM tpcds.customer_address_bak WHERE ca_address_sk < 14888;
--删除tpcds.customer_address_bak 中所有数据。
gbase=#DELETE FROM tpcds.customer_address_bak;
--删除tpcds.customer_address_bak 表。
gbase=#DROP TABLE tpcds.customer_address_bak;
优化建议

delete
如果要删除表中的所有记录,建议使用truncate 语法。

SQLNativeSql 返回驱动程序翻译的 SQL 字符串。
下表描述了SQLNativeSql 的 SQLSTATE 和错误值。
SQLSTATE
错误值
错误消息
01000
-11001
General warning
01004
-11003
Data truncated
08003
-11017
Connection not open
37000
-11035
Syntax error or access violation
S1000
-11060
General error
S1001
-11061
Memory-allocation failure
S1009
-11066
Invalid argument value
S1090
-11071
Invalid string or buffer length
S1000
-11320
Syntax error
S1000
-11323
The statement contained an escape clause not supported by
this database driver

用法
以下示例显示 SQLNativeSql 返回包含刻度函数 LENGTH 的输入 SQL 字符串的信息:
SELECT {fn LENGTH(NAME)} FROM EMPLOYEE
GBase 8s 可能返回以下翻译的 SQL 字符串:
SELECT length(NAME) FROM EMPLOYEE

GBaseCommandBuilder 成员
公共静态成员(VB 中是Shared)方法
静态成员方法
描 述
DeriveParameters
从在 GBaseCommand 中指定的存储过



GBase 8a 程序员手册ADO.NET 篇
南大通用数据技术股份有限公司

- 149 -
静态成员方法
描 述
程中检索参数信息并填充指定的
GBaseCommand 对象的 Parameters 集
合。
公共构造函数
构造函数
描 述
GBaseCommandBuilder








GBaseCommandBuilder 类的一个实例。
属性
属 性
描 述
DataAdapter
获取或设置一个用于自动生成SQL 语
句的GBaseDataAdapter 对象。
公共方法
方 法
描 述
Dispose(继承于 Component)
释放所有 Component 使用的资源。
Equals(继承于 Object)
判断指定的对象是否等于当前的对象。

GetDeleteCommand
获得需要用于执行数据库删除的
GBaseCommand 对象,该对象是自动生
成的。
GetInsertCommand
获得需要用于执行数据库插入的
GBaseCommand 对象,该对象是自动生
成的。
GetType (继承于 Object)
获取当前实例的类型。
GetUpdateCommand
获得需要用于执行数据库更新
GBaseCommand 对象,该对象是自动生
成的。
RefreshSchema
刷新数据库模式(Schema)信息,该信

GBase 8a 程序员手册ADO.NET 篇


- 150 -

南大通用数据技术股份有限公司
方 法
描 述
息用于生成
INSERT, UPDATE, 或
DELET 语句。