返回首页

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

更新日期:2024年09月11日

gbase_stmt_row_seek ..........................
65

为j 值相同,
所以avg 值相同,
计算过程为avg = (8 + 4 + 6) / 3 = 6,
i=2,
j=1,
k=4
时,avg=5.5,计算过程为avg = (8 + 4 + 6 + 4) / 4 = 5.5。
示例2:AVG(DISTINCT k) OVER(PARTITION BY i)
gbase> SELECT *,AVG(DISTINCT k) OVER(PARTITION BY i) AS avg
FROM t1;
+------+------+------+--------+
| i
| j
| k
| avg
|
+------+------+------+--------+
|
2 |
3 |
6 | 6.0000 |
|
2 |
3 |
4 | 6.0000 |
|
2 |
5 |
8 | 6.0000 |
|
2 |
1 |
4 | 6.0000 |
|
3 |
2 |
2 | 5.0000 |
|
3 |
2 |
4 | 5.0000 |
|
3 |
2 |
2 | 5.0000 |
|
3 |
4 |
6 | 5.0000 |
|
3 |
1 |
2 | 5.0000 |
|
3 |
5 |
8 | 5.0000 |

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
898
+------+------+------+--------+
10 rows in set
用例分析:首先根据i 分组,由于没有ORDER BY 部分,则同组内的累加和、
COUNT 值都相等,将同组内的k 值进行累加同时计算COUNT 值,如果遇到不
同组,从0 重新开始。
以i 值为2、2、2、2,j 值为5、3、3、1,k 值为8、4、6、4,avg 值为6、6、6、
6 为例,因为在这4 组数值中,不同的k 值为6、4、8,所以avg= (6 + 4 + 8) / 3 =
6。

使用 SQLSetConnectAttr() 函数来指定服务器使用的回调函数。
SQLSetConnectAttr() 也用于指定回调函数使用的参数。参数属性按照为驱动程序指定的
方式传回回调函数。
下列属性是特定于 GBase 8s 的对 ODBC 标准的扩展:
参数
类型
描述

GBase 8s ODBC Driver 程序员指南
南大通用数据技术股份有限公司
- 21 -

参数
类型
描述
SQL_INFX_ATTR_PAM_FUNCTION
void * 指向回调函数的指针。
SQL_INFX_ATTR_PAM_RESPONSE_BUF
void * 指向包含对认证质询的响应的缓
冲区的通用指针。
SQL_INFX_ATTR_PAM_RESPONSE_LEN
int
响应缓冲区的长度,以字节计。
SQL_INFX_ATTR_PAM_RESPONSE_LEN_
PTR
int *
存储响应中的字节数的地址。
SQL_INFX_ATTR_PAM_CHALLENGE_BU
F
void * 指向包含认证质询的缓冲区的通
用指针。
驱动程序将从服务器收到
的任何质询都存储在此缓冲区内。
如果该缓冲区未大到足以包含该
质询,则截断质询。通过将缓冲区
长度与质询中的字节数相对比,

调函数可检测到此质询。
由应用程
序开发人员负责检测此情况,
并正
确地处理它。
SQL_INFX_ATTR_PAM_CHALLENGE_BU
F_LEN
int
质询缓冲区的长度,以字节计。
SQL_INFX_ATTR_PAM_CHALLENGE_LE
N_PTR
int *
存储质询中字节数的地址。
质询和响应缓冲区指针可为空。如果认证服务器要求存储缓冲区中的信息,则由于认证
失败导致连接失败。无论连接是否成功,都会返回质询长度信息。如果消息类型不需要
响应,则响应缓冲区可能为空(缺省的),或它可能包含空字符串。
可在任何时刻,以任何顺序来设置前面表中的属性。然而,它们仅对以驱动程序的连接
函数之一的后续调用建立的连接有效。
通过使用下列连接属性之一,使用 SQLSetConnectAttr() API 设置隔离级别:
l
SQL_TXN_READ_UNCOMMITTED = Read Uncommitted
l
SQL_TXN_READ_COMMITTED = Read Committed
l
SQL_TXN_SERIALIZABLE = Serializable
l
SQL_TXN_REPEATABLE_READ = Repeatable Read
l
SQL_TXN_LAST_COMMITTED = Last Committed
l
SQL_TXN_TRANSACTION = Transaction
如果随同 SQLSetConnectAttr() API 使用 SQL_TXN_LAST_COMMITTED 或
SQL_TXN_TRANSACTION 属性,则您的应用程序必须直接链接至 GBase 8s ODBC
Driver,而不连接至 ODBC Driver Manager。然而,如果在 odbc.ini 文件或 Data Source
Administrator 中指定该属性,则应用程序可以使用 ODBC Driver Manager 连接。
如果使用 SQL_TXN_TRANSACTION 属性,则将在 DTC 应用程序中设置的隔离级别
传播至服务器。仅应在 Windows™ DTC 应用程序中使用此选项。

GBase 8s ODBC Driver 程序员指南
南大通用数据技术股份有限公司
- 22 -

ODBC 驱动程序的默认行为是从 VARCHAR 列结果的结尾除去空字符。要保留结尾的
空白,请设置 SQL_INFX_ATTR_LEAVE_TRAILING_SPACES 属性:
SQLSetConnectAttr( hdbc, SQL_INFX_ATTR_LEAVE_TRAILING_SPACES,
(SQLPOINTER)SQL_TRUE, SQL_IS_INTEGER );
要除去结尾的空白,请将 SQL_TRUE 更改为 SQL_FALSE。
将该行为限定至连接。
连接池和认证
在 ODBC 中,驱动程序管理器控制连接池。
当使用认证时,应用程序编程人员必须意识到连接池的影响。驱动程序管理器不控制其
连接何时置于池中,
或者何时从池中拉出。
如果应用程序不了解用户就连接或断开连接,
则连接池的性能优势得以保持,用户不会收到任何意外的认证质询。如果应用程序未使
用户意识到他们正在重建连接,则仍没有认证问题,因为驱动程序管理器与服务器之间
的连接从未关闭。

连接函数
可随同认证模块使用任何建立连接的 ODBC 函数,SQLConnect()、SQLDriverConnect()
或 SQLBrowseConnect()。
当使用这些函数时,请考虑下列事项:
SQLConnect() 函数
SQLConnect() 函数的 DriverCompletion 参数可采用下列值
l
SQL_DRIVER_PROMPT
l
SQL_DRIVER_COMPLETE
l
SQL_DRIVER_COMPLETE_REQUIRED
l
SQL_DRIVER_NOPROMPT
如果预料到有认证挑战,则推荐您使用 SQL_DRIVER_NOPROMPT。使用其他值可能
导致用户面对认证信息的多个请求。
SQLBrowseConnect() 函数
设计 SQLBrowseConnect() 函数旨在反复使用,驱动程序为应用程序提供关于如何完成
连接字符串的指导,且应用程序提示用户所需的值。这可导致用户在连接字符串完成与
认证之间面对多个提示。
此外,
作为连接字符串完成进程的一部分,
驱动程序通常向应用程序提供数据库的选择。
然而,在用户通过身份验证之后,驱动程序才能为数据库的列表查询服务器。根据应用
程序逻辑,它是在原始的连接字符串中提供数据库名称,还是打算从认证服务器接受质
询,当服务器使用认证时,可能无法使用 SQLBrowseConnect()。


GBase 8s ODBC Driver 程序员指南
南大通用数据技术股份有限公司
- 23 -

第三方应用程序或中间代码
当使用认证时,应由应用程序处理来自认证服务器的任何质询。
要处理质询,
应用程序编程人员必须能够向驱动程序注册回调函数。
由于在 ODBC 标准
中未定义用来完成此任务的属性,因此,使用的属性为 GBase 8s 扩展。
以 Microsoft™ 的 ADO 层编写的许多应用程序从开发人员抽取 ODBC 调用。大多数
Visual Basic 应用程序都用 ADO 层编写。这些应用程序和第三方应用程序通常不知道
GBase 8s 扩展,且不能处理身份验证质询。
Windows™ 上的 ODBC Data Source Administrator 也属于第三方应用程序这一类。
当配置
UNIX™ 数据源时,不是所有特性都可用。例如,如果收到质询,则 Apply and Test
Connection 按钮和 User Server Database Locale 切换不起作用,
因为那些特性需要连接到
服务器的能力。