返回首页

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

更新日期:2024年09月11日

含有NULL 值的定长模式的导出
示例
示例1:定长模式对于空值NULL 的导出:根据字段宽度全部使用空格补齐。
对该整形字段a 插入的值为NULL,则实际使用长度为0,使用定长模式导出会
使用11 个空格进行填充。
示例中所用的表及数据:
DROP TABLE IF EXISTS gs;
CREATE TABLE gs (a int DEFAULT NULL, b varchar(25) DEFAULT
NULL);
INSERT INTO gs values(NULL,'GBase 8a'),(NULL,NULL);
导出SQL 语句:
gbase>
SELECT
*
FROM
gs
INTO
OUTFILE
'/home/gbase/temp/length_2.txt' FIELDS TERMINATED BY '' ENCLOSED

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1250
BY '' ESCAPED BY '';
Query OK, 2 rows affected
查看导出文件:
$ cat length_2.txt
GBase 8a
使用二进制方式查看导出文件:
$ hexdump -C length_2.txt
00000000
20 20 20 20 20 20 20 20
20 20 20 47 42 61 73 65
|
GBase|
00000010
20 38 61 20 20 20 20 20
20 20 20 20 20 20 20 20
| 8a
|
00000020
20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20
|
|
*
00000050
20 20 20 20 20 20 0a 20
20 20 20 20 20 20 20 20
|
.
|
00000060
20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20
|
|
*
000000a0
20
20
20
20
20
20
20
20
20
20
20
20
20
0a
|
.|
000000ae

参数说明:声明可被服务器管理程序使用的额外PID 文件。
该参数属于POSTMASTER 类型参数,请参考表15-15-1 中对应设置方法进行设置。
须知:
这个参数只能在数据库服务重新启动后生效。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
1153
取值范围:字符串
默认值:空

虽然数据库服务器自动地处理数据类型之间的转换,但使用 SELECT 语句仍可发生错误。
在 SQL 编程中,如同在任何种类的编程中一样,您必须预见错误并随时为应对其做好准
备。
数据的结束
通常会发生没有行满足查询的情况。
在 SELECT 语句之后,
通过 SQLSTATE 代码 02000
和 SQLCODE 中的代码 100 标志此事件。此代码指示一个错误或一般事件,这完全依赖
于您的应用程序。如果您确信应有一行或多行满足查询(例如,如果您使用您刚从另一表
的行读取的键值读取一行的话),则“数据的结束”代码表示在该程序的逻辑中的严重错
误。在另一方面,如果您基于用户提供的键,或其他来源提供的不如程序可靠的键,则数
据的缺乏可能是正常事件。

不符合 ANSI 的数据库的数据的结束
如果您的数据库不符合 ANSI,则跟在 SELECT 语句之后,仅在 SQLCODE 中设置“数
据的结束”返回代码 100。此外,将 SQLSTATE 值设置为 02000。(诸如 INSERT、
UPDATE 和 DELETE 这样的其他语句设置 SQLERRD 的第三个元素,
来展示他们影响了
多少行;通过 SQL 程序修改数据 讨论此主题。)

严重的错误
将 SQLCODE 设置为负值的错误,
或将 SQLSTATE 设置为任何不以 00、
01 或 02 开头
的值的错误通常都很严重。您已开发好的程序或正在生产的程序几乎不应报告这些错误。
然而,很难预料每一种有问题的情况,因此您的程序必须能够处理这些错误。
例如,查询可返回错误 -206,这意味着在该查询中指定的表不在数据库中。如果有人在编
写了程序之后删除了该表,
或如果该程序通过某种逻辑错误或输入错误打开了错误数据库,
则会发生此情况。

使用聚集函数解释数据的结束
使用诸如 SUM、MIN 或 AVG 这样的聚集函数的 SELECT 语句总会成功地返回至少一行
数据,即使当没有行满足 WHERE 子句时。基于行的空集的聚集值为空,但它仍然存在。


GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 210 -

然而,如果聚集值是基于都包含空值的一行或多行,则聚集值也为空。如果您必须能够检
测不基于任何行的聚集值与基于某些都是空的行的聚集值之间的差异,则您必须在该语句
中包括 COUNT 函数和聚集值上的指示符变量。然后,您可得出下列情况。
计数值
指示

具体情况
0
-1
选择了零行
>0
-1
选择了某些行;全部为空
>0
0
选择了一些非空行

缺省值
您可以许多方式处理这些不可避免的错误。在某些应用程序中,使用比执行功能更多的行
代码来处理错误。然而,在本部分的示例中,最简单的解决方案之一,缺省值,应奏效,
如下例所示:
avg_price = 0; /* 设置错误的缺省值 */
EXEC SQL SELECT avg (total_price)
INTO :avg_price:null_flag
FROM items;
if (null_flag < 0) /* 可能没有行 */
avg_price = 0; /* 设置 0 行的缺省值 */
前面的示例处理下列事项:

如果查询选择一些非空的行,则返回并使用正确的值。这是期望的并且最常用的结
果。

如果查询没有选择行,
或在发生的可能性很小的情况下,
仅选择在 total_price 列
(从
不应为空的列)中有空值的那些行,则设置该指示符变量,并指定缺省值。

如果发生任何严重的错误,则保持主变量不变;它包含最初设置的缺省值。在程序
中的此点,程序员无需捕获这类错误并报告它们。