返回首页

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

更新日期:2024年09月11日

260000,
2130,
25000),
( 8,
680,
2,
1,
142500,
1170,
22000),
( 9,
1840,
3,
2,
160000,
1500,
19000),
(10,
3680,
4,
2,
240000,
2790,
20000),
(11,
1660,
3,
1,
87000,
1030,
17500),
(12,
1620,
3,
2,
118600,
1250,
20000),
(13,
3100,
3,
2,
140000,
1760,
38000),
(14,
2070,
2,
3,
148000,
1550,
14000),

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1431
(15,
650,
3,

ALTER DATA SOURCE
功能描述
修改Data Source 对象的属性和内容。
属性有:名称和属主;内容有:类型、版本和连接选项。
注意选项

只有初始用户/系统管理员/属主才拥有修改Data Source 的权限。

修改属主时,新的属主用户必须是初始用户或系统管理员。

当在OPTIONS 中出现password 选项时,需要保证GBase 8c 每个节点的
$GAUSSHOME/bin 目录下存在datasource.key.cipher 和datasource.key.rand 文件,
如果不存在这两个文件,请使用gs_guc 工具生成并使用gs_ssh 工具发布到每个节
点的$GAUSSHOME/bin 目录下。
语法格式
ALTER DATA SOURCE src_name
[TYPE
'type_str']
[VERSION
{'version_str' | NULL}]
[OPTIONS ( {[ ADD | SET | DROP ] optname ['optvalue']} [, ...] )];
ALTER DATA SOURCE src_name RENAME TO src_new_name;
ALTER DATA SOURCE src_name OWNER TO new_owner;
参数说明

src_name
待修改的Data Source 的名称。
取值范围:字符串,需要符合标识符的命名规范。

TYPE
将Data Source 原来的TYPE 修改为指定值。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
689
取值范围:空串或非空字符串。

VERSION
将Data Source 原来的VERSION 修改为指定值。
取值范围:空串或非空字符串或NULL。

OPTIONS
修改OPTIONS 中的字段:增加(ADD)
、修改(SET)
、删除(DROP)
,且字段名称
optname 需唯一,具体要求如下:
增加字段:ADD 可以省略,待增加字段不能已经存在了;
修改字段:SET 不可省略,待修改字段必须存在;
删除字段:DROP 不可省略,待删除字段必须存在,且不能指定optvalue;

src_new_name
新的Data Source 名称。
取值范围:字符串,需符合标识符命名规范。

new_user
对象的新属主。
取值范围:字符串,有效的用户名。
示例
--创建一个空Data Source 对象。
gbase=#CREATE DATA SOURCE ds_test1;
--修改名称。
gbase=#ALTER DATA SOURCE ds_test1 RENAME TO ds_test;
--修改属主。
gbase=#CREATE USER user_test1 IDENTIFIED BY 'Gs@123456';
gbase=#ALTER USER user_test1 WITH SYSADMIN;
gbase=#ALTER DATA SOURCE ds_test OWNER TO user_test1;

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
690
--修改TYPE 和VERSION。
gbase=#ALTER DATA SOURCE ds_test TYPE 'MPPDB_TYPE' VERSION 'XXX';
--添加字段。
gbase=#ALTER DATA SOURCE ds_test OPTIONS (add dsn 'gaussdb', username
'test_user');
--修改字段。
gbase=#ALTER DATA SOURCE ds_test OPTIONS (set dsn 'unknown');
--删除字段。
gbase=#ALTER DATA SOURCE ds_test OPTIONS (drop username);
--删除Data Source 和user 对象。
gbase=#DROP DATA SOURCE ds_test;
gbase=#DROP USER user_test1;
相关命令
CREATE DATA SOURCE,DROP DATA SOURCE

使用 DESCRIBE 语句可在执行准备好的语句之前获得有关其输出参数和其它功
能的信息。
在 GBase 8s ESQL/C 中使用此语句。(另见 DESCRIBE INPUT 语句。)
语法

元素
描述
限制
语法
descriptor
系统描述符区域
的名称
必须已分配系统描述
符区域
引用字符串
descriptor_var
指定系统描述符
区域的主变量
必须包含分配的系统
描述符区域的名称
特定于语言的名
称规则
sqlda_pointer
指向 sqlda 结

不可以美元符号
($)或冒号(: )
开始。如果使用动态
的 SQL ,则 sqlda
结构是必需的
请参阅 GBase
8s ESQL/C 程序
员手册 中的
sqlda 结构

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 550
statement_id
准备好的 SQL
语句的语句标识

必须在先前的
PREPARE 语句中定义
PREPARE 语句;
标识符
statement
_id_var
包含
statement_id
的值的主变量
必须在先前的
PREPARE 语句中定义
特定于语言的名
称规则
用法
DESCRIBE 可以在运行时提供有关准备好的语句的信息:

准备好的 SQL 语句的类型

是 UPDATE 还是 DELETE 语句包含 WHERE 子句

对于 EXECUTE 、EXECUTE FUNCTION 、EXECUTE
PROCEDURE 、INSERT 、SELECT 或 UPDATE 语句,DESCRIBE 语
句也返回值的数目、数据类型和大小,以及查询返回的列或表达式的名
称。

对于 SELECT 语句,DESCRIBE 还返回查询返回的列或表达式的名称。
使用此信息,您可以编写代码来分配内存,从而控制检索到的值,并且在取得这
些值之后显示或处理它们。
OUTPUT 关键字
OUTPUT 关键字指定只将有关准备好的语句的输出参数的信息存储在 sqlda 描述
符区域中。如果省略这个关键字,DESCRIBE 可以返回输入参数,但这仅针对
INSERT 语句(如果在数据库服务器已初始化的环境中设置了 IFX_UPDDESC
环境变量,这种情况也适用于 UPDATE )。
描述语句类型
DESCRIBE 语句从 PREPARE 语句获取一个语句标识符作为输入。当
DESCRIBE 语句执行时,数据库服务器会设置 sqlca 的 SQLCODE 字段的值,
以指明语句类型(即语句开始处的关键字)。如果准备好的语句文本包含多个
SQL 语句,则 DESCRIBE 语句返回文本中第一个语句的类型。
SQLCODE 设置为 0 表示一个不带 INTO TEMP 子句的 SELECT 语句。这种情
况是最普通的。对于任何其它 SQL 语句,SQLCODE 设置为一个正整数。您可

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 551
以对照定义的常量名测试该数字。在 GBase 8s ESQL/C 中,常量名定义在
sqlstypes.h 头文件中。
DESCRIBE 语句(和 DESCRIBE INPUT 语句)对 SQLCODE 字段的使用不同
于任何其它语句,当它成功执行时可能返回一个非零值。如果愿意,您可以修订
标准的错误检查例程以使用这种行为。
检查 WHERE 子句的存在性
如果 DESCRIBE 语句检测到一个不带 WHERE 子句的 UPDATE 或 DELETE
语句的准备好的语句,则 DESCRIBE 语句将 sqlca.sqlwarn.sqlwarn4 变量设置
为 W。
当 DELETE 或 UPDATE 语句中没有指定 WHERE 子句时,数据库服务器对整
个表执行删除或更新操作。检查 sqlca.sqlwarn.sqlwarn4 变量以避免不期望的对
表所做的全局更改。
描述带运行时参数的语句
如果准备好的语句包含这么一种参数。即在运行时将为该参数提供参数或参数数
据类型的数目,那么您可以描述这些输入值。如果准备好的语句文本包括以下一
个语句,那么 DESCRIBE 语句会返回一个对表中包括的每个列或表达式的描
述:

EXECUTE FUNCTION (或 EXECUTE PROCEDURE)

INSERT

SELECT (不带 INTO TEMP 子句)

UPDATE
在 GBase 8s 中,必须首先按照 GBase 8s SQL 参考指南 中的描述设置
IFX_UPDDESC 环境变量 , 然后才可以使用 DESCRIBE 来获取有关 UPDATE
语句的信息。
描述包括以下信息:

列的数据类型,如表中定义

列的长度,以字节为单位

列或表达式的名称

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 552
对于准备好的 INSERT 或 UPDATE 语句,DESCRIBE 只返回动态参数(那些
由问号(?)表示的参数)。但是,使用 OUTPUT 关键字会防止返回这些参数。
您可以将为返回的信息所设置的目的地指定为一个新的或现有的系统描述符区
域,或是指定为一个指向 sqlda 结构的指针。
系统描述符区域符合 X/Open 标准。
使用 SQL DESCRIPTOR 关键字
使用USING SQL DESCRIPTOR 子句可将对准备好的语句列表的描述存储在先前
分配的系统描述符区域中。
使用 INTO SQL DESCRIPTOR 子句创建新的系统描述符结构并将语句列表的描
述存储在该结构中。
要将一个先前提到的语言描述到一个系统描述符区域,DESCRIBE 会以以下方式更
新系统描述符区域:

将系统描述符区域中的 COUNT 字段设置为语句列表中值的数目。如果
COUNT 大于系统描述符区域中项描述符的数目,则会导致一个错误。

它设置系统描述符区域中的 TYPE 、LENGTH 、NAME 、SCALE 、
PRECISION 和 NULLABLE 字段。

如果列具有不透明数据类型,则数据库服务器会设置项描述符的
EXTYPEID 、EXTYPENAME 、EXTYPELENGTH 、
EXTYPEOWNERLENGTH 和 EXTYPEOWNERNAME 字段。

根据 TYPE 和 LENGTH 信息,为每个项描述符的 DATA 字段分配内
存。
在执行 DESCRIBE 语句之后,SCALE 和 PRECISION 字段分别包含列的小数位
和精度。如果在 SET DESCRIPTOR 语句中设置了 SCALE 和 PRECISION ,并
且将 TYPE 设置为 DECIMAL 或 MONEY,则会修改 LENGTH 字段以调整十
进制值的小数位和精度。如果没有将 TYPE 设置为 ECIMAL 或 MONEY,则不
设置 SCALE 和 PRECISION 的值,并且 LENGTH 不受影响。
您必须使用 SET DESCRIPTOR 语句修改系统描述符区域信息,以显示要接收描
述符的值在内存中的地址。可以将数据类型更改为另一种兼容的类型。此更改会
在取得数据值时引起数据转换的发生。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 553
您可以在支持 USING SQL DESCRIPTOR 子句(如 EXECUTE 、FETCH 、
OPEN 和 PUT)的准备好的语句中使用系统描述符区域。
下面的示例显示了 DESCRIBE 语句中对系统描述符的使用。在第一个示例中,系
统描述符是一个用引号引起的字符串;在第二个示例中,它是一个嵌入的变量名
称。
main()
{
. . .
EXEC SQL allocate descriptor 'desc1' with max 3;
EXEC SQL prepare curs1 FROM 'select * from tab';
EXEC SQL describe curs1 using sql descriptor 'desc1';
}
EXEC SQL describe curs1 using sql descriptor :desc1var;
使用 INTO sqlda Pointer 子句
使用 INTO sqlda_pointer 子句可为 sqlda 结构分配内存,并将它的地址存储在一
个 sqlda 指针中。DESCRIBE 语句用描述信息填充分配的内存。不像 USING 子
句,INTO 子句创建新的 sqlda 结构以存储来自 DESCRIBE 的输出。
DESCRIBE 语句将 sqlda.sqld 字段设置为语句列表中的值的数目。sqlda 结构也
包含一个数据描述符的数组(sqlvar 结构),语句列表中的每个值各有一个相应
的数据描述符。执行 DESCRIBE 语句之后,sqlda.sqlvar 结构便含有 sqltype 、
sqllen 和 sqlname 字段集。
如果列具有不透明数据类型,则 DESCRIBE...INTO 会设置项描述符的 sqlxid 、
sqltypename 、sqltypelen 、sqlownerlen 和 sqlownername 字段。
一旦程序中声明了 sqlda 指针,DESCRIBE 语句就会为该指针分配内存。但是,
应用程序必须指定 sqlda.sqlvar.sqldata 字段的存储区域。
描述集合变量
当使用 USING SQL DESCRIPTOR 或 INTO 子句时,DESCRIBE 语句提供有关
集合变量的信息。在打开 Select 或 Insert 游标之后,必须发出 DESCRIBE 语
句,因为 OPEN...USING 语句指定了要使用的集合变量的名称。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 554
下一个 GBase 8s ESQL/C 代码段动态地选择 :a_set 集合变量的元素进入称为
desc1 的系统描述符区域:
EXEC SQL BEGIN DECLARE SECTION;
client collection a_set;
int i, set_count;
int element_type, element_value;
EXEC SQL END DECLARE SECTION;

EXEC SQL allocate collection :a_set;
EXEC SQL allocate descriptor 'desc1';
EXEC SQL select set_col into :a_set from table1;
EXEC SQL prepare set_id from 'select * from table(?)'

EXEC SQL declare set_curs cursor for set_id;
EXEC SQL open set_curs using :a_set;
EXEC SQL describe set_id using sql descriptor 'desc1';

do
{
EXEC SQL fetch set_curs using sql descriptor 'desc1';
...
EXEC SQL get descriptor 'desc1' :set_count = count;
for (i = 1; i <= set_count; i++)
{
EXEC SQL get descriptor 'desc1' value :i
:element_type = TYPE;
switch
{
case SQLINTEGER:
EXEC SQL get descriptor 'desc1' value :i
:element_value = data;
...
} /* end switch */
} /* end for */
} while (SQLCODE == 0);

EXEC SQL close set_curs;
EXEC SQL free set_curs;

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 555
EXEC SQL free set_id;
EXEC SQL deallocate collection :a_set;
EXEC SQL deallocate desc