返回首页

gbase数据、南大通用产品文档:GBase8s使用 ORDER BY 子句存储行

更新日期:2024年09月11日

不以任何特定顺序排列查询的结果。例如:图 4和图 2以随机顺序显示。
可以将 ORDER BY 子句添加到您的 SELECT 语句里指导系统以特定顺序对数据进行排
序。ORDER BY 子句是任何远程或本地表或视图中的列名的列表。投影列表中允许的所有

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 24 -
表达式在 ORDER BY 列表中也允许。如果在 ORDER BY 列表中使用的列具有选择触发
器,那么将不会激活该触发器。
以下查询返回 manufact 表中 manu_code 、manu_name 和 lead_time 列的每一行。并根
据 lead_time 进行排序。
图: 查询
SELECT manu_code, manu_name, lead_time
FROM manufact
ORDER BY lead_time;
对于 GBase 8s,不需要在投影列表中包括您想要在 ORDER BY 子句中使用的列。即,可
以根据不在投影列表中检索的列对数据进行排序。以下查询返回 manufact 表中 manu_code 、
manu_name 列的每一行,并根据 lead_time 进行排序。lead_time 列位于 ORDER BY 子句
中(尽管未包含在投影列表中)。
图: 查询
SELECT manu_code, manu_name
FROM manufact
ORDER BY lead_time;

升序
缺省情况下,
检索到的数据按升序顺序排序。
在 ASCII 字符集中,
升序是从大写字母 A 到
小写字母 z,对于字符数据类型,那么是从最小值到最大值。DATE 和 DATETIME 数据
按照从最早到最新排序,INTERVAL 数据按从时间范围最短到最长排序。

降序
降序与升序相反,
对于字符类型为从小写 z 到大写 A,
对于数字类型为从最大值到最小值。
DATE 和 DATETIME 数据按照从最新到最早排序,
INTERVAL 数据按从时间范围最长到
最短排序。以下查询显示了降序的示例。
图: 查询
SELECT * FROM manufact ORDER BY lead_time DESC;
列名后跟关键字 DESC 导致以降序对检索数据进行排序,如下图所示:
图: 查询结果
manu_code manu_name lead_time

SHM Shimara 30
KAR Karsten 21

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 25 -
PRC ProCycle 9
NKL Nikolus 8
NRG Norge 7
HSK Husky 5
ANZ Anza 5
HRO Hero 4
SMT Smith 3
您可以在 ORDER BY 子句中指定任何内置数据类型的列(TEXT 、BYTE 、BLOB 或
CLOB 除外),数据库服务器根据该列中的值对数据进行排序。

对多个列进行排序
还可以使用 ORDER BY 排序两个或多个列,这会创建嵌套排序。缺省值仍然是升序。在
ORDER BY 子句中最先列出的列优先。
下列查询和图 2及相应的查询结果显示了嵌套排序。要修改显示所选数据的顺序。更改在
ORDER BY 子句中命名的两个列的顺序。
SELECT stock_num, manu_code, description, unit_price
FROM stock
ORDER BY manu_code, unit_price;
查询结果中,manu_code 列数据按字母顺序显示,并且在同一 manu_code(例如:ANZ 、
HRO)中,unit_price 以升序列出。
图: 查询结果
stock_num manu_code description unit_price

5 ANZ tennis racquet $19.80
9 ANZ volleyball net $20.00
6 ANZ tennis ball $48.00
313 ANZ swim cap $60.00
201 ANZ golf shoes $75.00
310 ANZ kick board $84.00

111 SHM 10-spd, assmbld $499.99
112 SHM 12-spd, assmbld $549.00
113 SHM 18-spd, assmbld $685.90
5 SMT tennis racquet $25.00
6 SMT tennis ball $36.00

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 26 -
1 SMT baseball gloves $450.00
下列查询显示了 ORDER BY 子句中列的相反顺序。
图: 查询
SELECT stock_num, manu_code, description, unit_price
FROM stock
ORDER BY unit_price, manu_code;
在此查询结果中,数据按 unit_price 的升序显示,其中两个或多个行具有相同的 unit_price
(例如:$20.00 、$48.00 、$312.00),manu_code 以字母顺序显示。
图: 查询结果
stock_num manu_code description unit_price

302 HRO ice pack $4.50
302 KAR ice pack $5.00
5 ANZ tennis racquet $19.80
9 ANZ volleyball net $20.00
103 PRC frnt derailleur $20.00

108 SHM crankset $45.00
6 ANZ tennis ball $48.00
305 HRO first-aid kit $48.00
303 PRC socks $48.00
311 SHM water gloves $48.00

113 SHM 18-spd, assmbld $685.90
1 HSK baseball gloves $800.00
8 ANZ volleyball $840.00
4 HSK football $960.00
ORDER BY 子句中的列的顺序十分重要,DESC 关键字的位置也很重要。尽管下列查询中
的各语句在 ORDER BY 子句中包含相同的语句,但是每个语句产生的结果并不相同(没
有显示)。
图: 查询
SELECT * FROM stock ORDER BY manu_code, unit_price DESC;

SELECT * FROM stock ORDER BY unit_price, manu_code DESC;


GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 27 -
SELECT * FROM stock ORDER BY manu_code DESC, unit_price;

SELECT * FROM stock ORDER BY unit_price DESC, manu_code;

GBase JDBC 在Tomcat 应用中使用示例
...................................... 158

PKG_SERVICE 支持的所有接口请参见表17-1。
表17-1 PKG_SERVICE
接口名称
描述
PKG_SERVICE.SQL_IS_CONTEXT_ACTI
VE
确认该CONTEXT 是否已注册。
PKG_SERVICE.SQL_CLEAN_ALL_CONT
EXTS
取消所有注册的CONTEXT。
PKG_SERVICE.SQL_REGISTER_CONTEX
T
注册一个CONTEXT。
PKG_SERVICE.SQL_UNREGISTER_CONT
EXT
取消注册该CONTEXT。
PKG_SERVICE.SQL_SET_SQL
向CONTEXT 设置一条SQL 语句,目前只
支持SELECT。
PKG_SERVICE.SQL_RUN
在一个CONTEXT 上执行设置的SQL 语句。
PKG_SERVICE.SQL_NEXT_ROW
读取该CONTEXT 中的下一行数据。
PKG_SERVICE.SQL_GET_VALUE
读取该CONTEXT 中动态定义的列值
PKG_SERVICE.SQL_SET_RESULT_TYPE
根据类型OID 动态定义该CONTEXT 的一
个列。
PKG_SERVICE.JOB_CANCEL
通过任务ID 来删除定时任务。
PKG_SERVICE.JOB_FINISH
禁用或者启用定时任务。
PKG_SERVICE.JOB_SUBMIT
提交一个定时任务。作业号由系统自动生成

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
679
接口名称
描述
或由用户指定。
PKG_SERVICE.JOB_UPDATE
修改定时任务的属性,包括任务内容、下次
执行时间、执行间隔。
PKG_SERVICE.SUBMIT_ON_NODES
提交一个任务到所有节点,作业号由系统自
动生成。
PKG_SERVICE.ISUBMIT_ON_NODES
提交一个任务到所有节点,作业号由用户指
定。
PKG_SERVICE.SQL_GET_ARRAY_RESU
LT
获取该CONTEXT 中返回的数组值。
PKG_SERVICE.SQL_GET_VARIABLE_RE
SULT
获取该CONTEXT 中返回的列值。

PKG_SERVICE.SQL_IS_CONTEXT_ACTIVE
该函数用来确认一个CONTEXT 是否已注册。该函数传入想查找的CONTEXT ID,如
果该CONTEXT 存在返回TRUE,反之返回FALSE。
PKG_SERVICE.SQL_IS_CONTEXT_ACTIVE 函数原型为:
PKG_SERVICE.SQL_IS_CONTEXT_ACTIVE(
context_id
IN INTEGER
)
RETURN BOOLEAN;
表17-2 PKG_SERVICE.SQL_IS_CONTEXT_ACTIVE 接口说明
参数名称
描述
context_id
想查找的CONTEXT ID 号

PKG_SERVICE.SQL_CLEAN_ALL_CONTEXTS
该函数用来取消所有CONTEXT
PKG_SERVICE.SQL_CLEAN_ALL_CONTEXTS 函数原型为:
PKG_SERVICE.SQL_CLEAN_ALL_CONTEXTS(

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
680
)
RETURN VOID;

PKG_SERVICE.SQL_REGISTER_CONTEXT
该函数用来打开一个CONTEXT,是后续对该CONTEXT 进行各项操作的前提。该函
数不传入任何参数,内部自动递增生成CONTEXT ID,并作为返回值返回给integer 定义的
变量。
PKG_SERVICE.SQL_REGISTER_CONTEXT 函数原型为:
DBE_SQL.REGISTER_CONTEXT(
)
RETURN INTEGER;

PKG_SERVICE.SQL_UNREGISTER_CONTEXT
该函数用来关闭一个CONTEXT,是该CONTEXT 中各项操作的结束。如果在存储过
程结束时没有调用该函数,则该CONTEXT 占用的内存仍然会保存,因此关闭CONTEXT
非常重要。由于异常情况的发生会中途退出存储过程,导致CONTEXT 未能关闭,因此建
议存储过程中有异常处理,将该接口包含在内。
PKG_SERVICE.SQL_UNREGISTER_CONTEXT 函数原型为:
PKG_SERVICE.SQL_UNREGISTER_CONTEXT(
context_id
IN INTEGER
)
RETURN INTEGER;
表17-3 PKG_SERVICE.SQL_UNREGISTER_CONTEXT 接口说明
参数名称
描述
context_id
打算关闭的CONTEXT ID 号

PKG_SERVICE.SQL_SET_SQL
该函数用来解析给定游标的查询语句,被传入的查询语句会立即执行。目前仅支持
SELECT 查询语句的解析,且语句参数仅可通过text 类型传递,长度不大于1G。
PKG_SERVICE.SQL_SET_SQL 函数的原型为:

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
681
PKG_SERVICE.SQL_SET_SQL(
context_id
IN INTEGER,
query_string
IN TEXT,
language_flag
IN INTEGER
)
RETURN BOOLEAN;
表17-4 PKG_SERVICE.SQL_SET_SQL 接口说明
参数名称
描述
context_id
执行查询语句解析的CONTEXT ID
query_string
执行的查询语句
language_flag
版本语言号,目前只支持1

PKG_SERVICE.SQL_RUN
该函数用来执行一个给定的CONTEXT。该函数接收一个CONTEXT ID,运行后获得
的数据用于后续操作。目前仅支持SELECT 查询语句的执行。
PKG_SERVICE.SQL_RUN 函数的原型为:
PKG_SERVICE.SQL_RUN(
context_id
IN INTEGER,
)
RETURN INTEGER;
表17-5 PKG_SERVICE.SQL_RUN 接口说明
参数名称
描述
context_id
执行查询语句解析的CONTEXT ID

PKG_SERVICE.SQL_NEXT_ROW
该函数返回符合查询条件的数据行数,每一次运行该接口都会获取到新的行数的集合,
直到数据读取完毕获取不到新行为止。
PKG_SERVICE.SQL_NEXT_ROW 函数的原型为:
PKG_SERVICE.SQL_NEXT_ROW(

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
682
context_id
IN INTEGER,
)
RETURN INTEGER;
表17-6 PKG_SERVICE.SQL_NEXT_ROW 接口说明
参数名称
描述
context_id
执行的CONTEXT ID

PKG_SERVICE.SQL_GET_VALUE
该函数用来返回给定CONTEXT 中给定位置的CONTEXT 元素值,该接口访问的是
PKG_SERVICE.SQL_NEXT_ROW 获取的数据。
PKG_SERVICE.SQL_GET_VALUE 函数的原型为:
PKG_SERVICE.SQL_GET_VALUE(
context_id
IN
INTEGER,
pos
IN
INTEGER,
col_type
IN
ANYELEMENT
)
RETURN ANYELEMENT;
表17-7 PKG_SERVICE.SQL_GET_VALUE 接口说明
参数名称
描述
context_id
执行的CONTEXT ID
pos
动态定义列在查询中的位置
col_type
任意类型变量,定义列的返回值类型

PKG_SERVICE.SQL_SET_RESULT_TYPE
该函数用来定义从给定CONTEXT 返回的列,该接口只能应用于SELECT 定义的
CONTEXT
中。定义的列通过查询列表的相对位置来标识,
PKG_SERVICE.SQL_SET_RESULT_TYPE 函数的原型为:
PKG_SERVICE.SQL_SET_RESULT_TYPE(
context_id
IN INTEGER,
pos
IN INTEGER,

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
683
coltype_oid
IN ANYELEMENT,
maxsize
IN INTEGER
)
RETURN INTEGER;
表17-8 PKG_SERVICE.SQL_SET_RESULT_TYPE 接口说明
参数名称
描述
context_id
执行的CONTEXT ID。
pos
动态定义列在查询中的位置。
coltype_oid
任意类型的变量,可根据变量类型得到对应
类型OID。
maxsize
定义的列的长度。

PKG_SERVICE.JOB_CANCEL
存储过程CANCEL 删除指定的定时任务。
PKG_SERVICE.JOB_CANCEL 函数原型为:
PKG_SERVICE.JOB_CANCEL(
job
IN
INTEGER);
表17-9 PKG_SERVICE.JOB_CANCEL 接口参数说明
参数
类型
入参/出参
是否可以为空
描述
id
integ
er
IN

指定的作业号。
示例:
CALL PKG_SERVICE.JOB_CANCEL(101);

PKG_SERVICE.JOB_FINISH
存储过程FINISH 禁用或者启用定时任务。
PKG_SERVICE.JOB_FINISH 函数原型为:
PKG_SERVICE.JOB_FINISH(

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
684
id
IN
INTEGER,
broken
IN
BOOLEAN,
next_time
IN
TIMESTAMP
DEFAULT
sysdate);
表17-10 PKG_SERVICE.JOB_FINISH 接口参数说明
参数
类型
入参/
出参
是否可
以为空
描述
id
integer
IN

指定的作业号。
broken
Boolean
IN

状态标志位,
true 代表禁用,
false 代表启用。
根据true 或false 值更新当前job;
如果为空
值,则不改变原有job 的状态。
next_tim
e
timestam
p
IN

下次运行时间,
默认为当前系统时间。
如果
参数broken 状态为true,则更新该参数为'4
000-1-1';如果参数broken 状态为false,且
如果参数next_time 不为空值,则更新指定
job 的next_time 值,
如果next_time 为空值,
则不更新next_time 值。该参数可以省略,
为默认值。

PKG_SERVICE.JOB_SUBMIT
存储过程JOB_SUBMIT 提交一个系统提供的定时任务。
PKG_SERVICE.JOB_SUBMIT 函数原型为:
PKG_SERVICE.JOB_SUBMIT(
id
IN
BIGINT DEFAULT,
content
IN
TEXT,
next_date
IN
TIMESTAMP DEFAULT sysdate,
interval_time IN
TEXT
DEFAULT 'null',
job
OUT
INTEGER);
说明:当创建一个定时任务(JOB)时,系统默认将当前数据库和用户名与当前
创建的定时任务绑定起来。该接口函数可以通过call 或select 调用,如果通过select 调用,
可以不填写出参。
如果在存储过程中,
则需要通过perform 调用该接口函数。
如果提交的sql
语句任务使用到非public 的schema,应该指定表或者函数的schema,或者在sql 语句前添
加set current_schema = xxx;语句。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
685
表17-11 PKG_SERVICE.JOB_SUBMIT 接口参数说明
参数
类型
入参/出

是否
可以
为空
描述
id
bigint
IN

作业号。如果传入id 为NULL,则内部会生成
作业ID。
context
text
IN

要执行的SQL 语句。支持一个或多个‘DML’,
‘匿名块’,
‘调用存储过程的语句’或3 种混合的
场景。
next_time
times
tamp
IN

下次作业运行时间。默认值为当前系统时间(s
ysdate)。如果是过去时间,在提交作业时表示
立即执行。
interval_t
ime
text
IN

用来计算下次作业运行时间的时间表达式,可
以是interval 表达式,也可以是sysdate 加上一
个numeric 值(例如:sysdate+1.0/24)。如果
为空值或字符串”null”表示只执行一次,
执行后
JOB 状态STATUS 变成'd' 不再执行。
job
integ
er
OUT

作业号。范围为1~32767。当使用select 调用
pkg_service.job_submit 时,该参数可以省略。
示例:
SELECT PKG_SERVICE.JOB_SUBMIT(NULL, 'call pro_xxx();',
to_date('20180101','yyyymmdd'),'sysdate+1');
SELECT PKG_SERVICE.JOB_SUBMIT(NULL, 'call pro_xxx();',
to_date('20180101','yyyymmdd'),'sysdate+1.0/24');
CALL PKG_SERVICE.JOB_SUBMIT(NULL, 'INSERT INTO T_JOB
VALUES(1);
call pro_1();
call pro_2();', add_months(to_date('201701','yyyymm'),1),
'date_trunc(''day'',SYSDATE) + 1 +(8*60+30.0)/(24*60)' ,:jobid);
SELECT PKG_SERVICE.JOB_SUBMIT (101, 'insert_msg_statistic1;', sysdate,
'sysdate+3.0/24');

PKG_SERVICE.JOB_UPDATE

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
686
存储过程UPDATE 修改定时任务的属性,包括任务内容、下次执行时间、执行间隔。
PKG_SERVICE.JOB_UPDATE 函数原型为:
PKG_SERVICE.JOB_UPDATE(
id
IN
BIGINT,
next_time
IN
TIMESTAMP,
interval_time
IN
TEXT,
content
IN
TEXT);
表17-12 PKG_SERVICE.JOB_UPDATE 接口参数说明
参数
类型
入参
/出

是否可
以为空
描述
id
integer
IN

指定的作业号。
next_ti
me
timest
amp
IN

下次运行时间。如果该参数为空值,则不更新指
定job 的next_time 值,否则更新指定job 的next_
time 值。
interva
l_time
text
IN

用来计算下次作业运行时间的时间表达式。如果
该参数为空值,则不更新指定job 的interval_time
值;如果该参数不为空值,会校验interval_time
是否为有效的时间类型或interval 类型,则更新指
定job 的interval_time 值。如果为字符串”null”表
示只执行一次,
执行后JOB 状态STATUS 变成'd'
不再执行。
content
text
IN

执行的存储过程名或者sql 语句块。
如果该参数为
空值,则不更新指定job 的content 值,否则更新
指定job 的content 值。
示例:
CALL PKG_SERVICE.JOB_UPDATE(101, 'call userproc();', sysdate, 'sysdate +