更新日期:2024年09月11日
您可使用 sqlda 结构来处理 INSERT...VALUES 语句。
要使用 sqlda 结构来处理 INSERT 中的输入参数:
1. 声明变量来保存 sqlda 的地址。
2. 准备 INSERT 语句(以 PREPARE 语句),并给它一个语句标识符。
使用 DESCRIBE...INTO 语句来执行两项任务:
a)
分配 sqlda 结构。将分配了的结构的地址存储在您声明的sqlda
指针中。
b)
以 DESCRIBE...INTO 语句来确定表中列的数目和数据类型。
DESCRIBE 语句为列列表的每一项填充 sqlvar_struct 结构。
3. 对于每一列,检测 sqlda 的 sqltype 和 sqllen 字段,来确定需
要为该数据分配的内存的数量。
保存存储在主变量中的 sqld 字段中的列的数目。
以 C 语言语句将列设置为它们的值,其设置 sqlda 的 sqlvar_struct 结构中的恰当
的 sqldata 字段。列值必须与它的相关联的列的数据类型相兼容。如果您插入空值,请务
必将恰当的 sqlind 字段设置为包含 -1 的指示符变量的地址。
执行 INSERT 语句来将该值插入至数据库内。
4. 释放分配给 sqldata 字段和 sqlda 结构的内存。
执行简单的插入
下列步骤该如如何以 sqlda 结构执行简单的 INSERT 语句:
(以 PREPARE 语句)准备 INSERT 语句,并给它一个语句标识符。
以 C 语言语句将这些列设置为它们的值,其设置 sqlda 的 sqlvar_struct 结构中恰
当的 sqldata 字段。
以 EXECUTE...USING DESCRIPTOR 语句执行 INSERT 语句。
这些步骤基本上与处理 SELECT 语句的未知的选择列表的那些步骤相同。由于该语
句不是 SELECT 语句,因此,主要的差异在于 INSERT 不需要游标。
执行与游标相关联的 INSERT
您还可使用 sqlda 结构来处理与插入游标相关联的 INSERT。在此情况下,您不以
GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 587 -
EXECUTE...USING DESCRIPTOR 语句来执行该语句。
反而,
您必须声明并打开插入游标,
并以 PUT...USING DESCRIPTOR 语句执行该插入游标,如下:
准备 INSERT 语句,并以 DECLARE 语句将它与插入游标相关联。所有的多行
INSERT 语句都必须有声明了的插入游标。
以 OPEN 语句为 INSERT 语句创建该游标。
以 PUT 语句以及它的 USING DESCRIPTOR 子句将第一组列值插入至缓冲区内。
在
此 PUT 语句之后,存储在指定的 sqlda 结构中的列值被存储在插入缓冲区中。在循环内
反复执行该 PUT 语句,直到没有更多的列要插入为止。
在插入所有行之后,退出该循环,并以 FLUSH 语句刷新插入缓冲区。
以 CLOSE 语句关闭插入游标。
您处理插入游标的方式,与您处理与 SELECT 语句相关联的游标的方式相
同。
请求网关直接转发sql 语句到dblink 对象对应的远端数据库执行。
语法格式
passthrough link DBLINK_NAME using ‘SQL_STATEMENT’;
说明
DBLINK_NAME 为dbink 对象的名称;
SQL_STATEMENT 为SQL 语句,即远端数据库执行的SQL 语句;
支持的SQL 语句,除以下支持的SQL 类型外,其它类型的SQL 将报错:
insert into … values…
insert into …select ….
delete
update
truncate
merge
create
drop
GBase 8a MPP Cluster 产品手册
4 管理员指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
615
示例
passthrough link testlink using ‘create table t1(a int, b int)’;
passthrough link testlink using ‘insert into t1 values(1,2)’;
passthrough link testlink using ‘update t1 set a=11 where a=1’;
passthrough link testlink using ‘delete from t1 where a=11’;
passthrough link testlink using ‘truncate table t1’;
passthourgh link testlink using ‘drop table t1’;
passthourgh link testlink using ‘select * from t2’ – 报错: SQL command is not supported: ‘select *
from t2’
说明
约束与限制:
dblink 对象对应的网关中的数据源配置的用户需有相应的SQL 执行权限;
只支持自动提交模式。若当前执行passthrough 命令的gclusterd 的session 状态为非自
动提交模式将报错:
Can not join the distributed transaction in session
不支持sql_statement 前面有注释。