返回首页

gbase数据、南大通用产品文档:GBase8s相交

更新日期:2024年09月11日

两个行集的相交产生一个表。
它包含同时存在两个原始表的行。
使用关键字 EXISTS 或 IN
来引入显示两个集合相交的子查询。下图说明了相交集合运算。
图: 相交集合运算


以下查询是一个嵌套 SELECT 语句的示例,它显示了 stock 和 items 表的交集。该结果包
含出现在这两个集合中的所有元素并返回以下行。
图: 查询
SELECT stock_num, manu_code, unit_price FROM stock
WHERE stock_num IN
(SELECT stock_num FROM items)
ORDER BY stock_num;
图: 查询结果
stock_num manu_code unit_price

1 HRO $250.00
1 HSK $800.00
1 SMT $450.00
2 HRO $126.00
3 HSK $240.00

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

3 SHM $280.00

306 SHM $190.00
307 PRC $250.00
309 HRO $40.00
309 SHM $40.00

deccvdbl() 函数将 C double 类型数值转换为 decimal 类型数值。
语法
mint deccvdbl(dbl_val, np)
double dbl_val;
dec_t *dec_val;
dbl_val
deccvdbl() 转换为 decimal 类型值的 double 值。
dec_val
指向 deccvdbl() 在其中放置转换结果的 decimal 结构的指针。

结果代码

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 631 -

0
转换成功。
<0
转换失败。

示例

demo 目录中的 deccvdbl.ec 文件包含下列样例程序。
/*
* deccvdbl.ec *
The following program converts two double type numbers to DECIMAL numbers and
displays the results.
*/

#include

EXEC SQL include decimal;

char result[41];


main()
{
mint x;
dec_t num;
double d = 2147483647;

printf("DECCVDBL Sample ESQL Program running.\n\n");

printf("Number 1 (double) = 1234.5678901234\n");
if (x = deccvdbl((double)1234.5678901234, #))
{
printf("Error %d in converting double1 to DECIMAL\n", x);

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 632 -

exit(1);
}
if (x = dectoasc(#, result, sizeof(result), -1))
{
printf("Error %d in converting DECIMAL1 to string\n", x);
exit(1);
}
result[40] = '\0';
printf(" String Value = %s\n", result);

printf("Number 2 (double) = $.1f\n", d);
if (x = deccvdbl(d, #))
{
printf("Error %d in converting double2 to DECIMAL\n", x);
exit(1);
}
if (x = dectoasc(#, result, sizeof(result), -1))
{
printf("Error %d in converting DECIMAL2 to string\n", x);
exit(1);
}
result[40] = '\0';
printf(" String Value = %s\n", result);

printf("\nDECCVDBL Sample Program over.\n\n");
exit(0);
}
输出
DECCVDBL Sample ESQL Program running.

Number 1 (double) = 1234.5678901234
String Value = 1234.5678901234
Number 2 (double) = 2147483647.0

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 633 -

String Value = 2147483647.0
DECCVDBL Sample Program over.

函数原型:
sword
GCIInitialize(




ub4 mode,




dvoid *ctxp,




dvoid *(*malocfp)(dvoid *ctxp, size_t size),




dvoid *(*ralocfp)(dvoid *ctxp, dvoid *memptr, size_t newsize),




void (*mfreefp)(dvoid *ctxp, dvoid *memptr)
);
功能描述:

初始化GCI 全局环境,
GCI 会在这个函数中初始化内部的全局变量和加载一些配置信息,
这是使用GCI 与数据库建立连接的第一步。
参数说明:

mode(输入)


初始化模式。取值如下:
deschandl e
A
TTR
_P
A
R
A
M
A
TTR
_LI S
T_C
O
LU
M
N
S
A
TTR
_N
U
M
_C
O
LS
P
A
R
A
M
P
A
R
A
M
P
A
R
A
M
A
TTR
_N
U
M
_C
O
LS
A
TTR
_N
A
M
E
A
TTR
_D
A
TA
_TY
P
E
A
TTR
_S
C
A
LE
A
TTR
_P
R
E
C
I S
I O
N
A
TTR
_D
A
TA
_S
I ZE
G
C
I P
ar am
G
et ( A
TTR
_LI S
T_C
O
LU
M
N
S
, i )





GCI_DEFAULT:缺省模式


GCI_THREADED:多线程模式

ctxp(输入/输出)


保留参数,目前不使用(仅用于和Oracle 保持兼容)

maloftp(输入)


保留参数,目前不使用(仅用于和Oracle 保持兼容)

ralocfp(输入)


保留参数,目前不使用(仅用于和Oracle 保持兼容)

mfreefp(输入)


保留参数,目前不使用(仅用于和Oracle 保持兼容)
返回值:

如果执行成功,返回GCI_SUCCESS,否则返回GCI_ERROR
注释:

该函数在每个应用中只需调用一次