返回首页

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

更新日期:2024年09月11日

功能
这个参数用于配置服务器通讯时所使用的socket 文件。
该参数的默认值通常为$GCLUSTER_PREFIX/gbase_8a_XXXX.sock。
其中xxxx 为安装GBase 8a MPP Cluster 时所配置的节点机器的端口号。


从http://mirrors.sohu.com/CPAN/authors/id/M/MJ/MJEVANS/DBD-ODBC-1.39.ta
r.gz 下载DBD-ODBC-1.39。

安装perl-5.14。perl 默认安装在/opt/ActivePerl-5.14 目录下。

安装DBD-ODBC-1.39,先解压DBD-ODBC-1.39.tar.gz,然后执行如下命令安
装:
/opt/ActivePerl-5.14/bin/perl Makefile.PL
make
make install

接下来是创建ODBC 数据源,创建ODBC 数据源的方法请参考“linux 平台上
创建数据源”。如果涉及到中文,那么一定要设置GBase 8a ODBC 驱动的字
符集(该字符集需要与集群安装时默认的字符集保持一致)。此用例中GBase
8a ODBC 字符集设置为UTF8。
#!/opt/ActivePerl-5.14/bin/perl
use DBI;
use encoding 'utf-8';

$dbh=DBI->connect('dbi:ODBC:gbase8a', 'gbase', 'gbase20110531');
my $sth=$dbh->prepare("drop table if exists t_plodbc");
$sth->execute();
my $sth=$dbh->prepare("create table t_plodbc(a varchar(100), b int)");
$sth->execute();
my $sth=$dbh->prepare("insert into t_plodbc values('南大通用', 10)");
$sth->execute();
my $sth=$dbh->prepare("select * from t_plodbc");
$sth->execute();
while(@data=$sth->fetchrow_array())
{
print "$data[0]\n";
}

GBase UP 产品手册 6 应用开发指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 1189
php 语言调用GBase 8a ODBC 驱动
$conn_str = "DRIVER=GBase 8a ODBC 8.3 Driver;SERVER=192.168.9.173; UID=gbase;
PWD=gbase20110531;database=test;charset=gbk;LOG_QUERY=1";
$sql_drop = "drop table if exists t_php";
$sql_create = "create table t_php (col1 int, col2 varchar(100))";
$sql_insert1 = "insert into t_php values (1, 'abc')";
$sql_insert2 = "insert into t_php values (2, '南大通用')";
$sql_select = "select * from t_php";
$conn = odbc_connect($conn_str, "", "");
if(!($conn)){
echo "get connection: " . odbc_errormsg($conn);
echo "
";
}
odbc_exec($conn,$sql_drop);
if (odbc_error()) {
echo "drop table: " . odbc_errormsg($conn);
echo "
";
}
odbc_exec($conn,$sql_create);
if (odbc_error()) {
echo "create table: " . odbc_errormsg($conn);
echo "
";
}

/*insert data*/
odbc_exec($conn,$sql_insert1);
if (odbc_error()) {
echo "insert" . odbc_errormsg($conn);
echo "
";
}
odbc_exec($conn,$sql_insert2);
if (odbc_error()) {
echo "insert" . odbc_errormsg($conn);
echo "
";
}
/*select data*/
$rs = odbc_exec($conn,$sql_select);
if (odbc_error()) {
echo "select" . odbc_errormsg($conn);
echo "
";
}
while(odbc_fetch_row($rs)){

GBase UP 产品手册 6 应用开发指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 1190
echo "\n" . odbc_result($rs, "col1") . "\t" . odbc_result($rs, "col2") . "\n";
echo "
";
}
odbc_exec($conn,$sql_drop);
if (odbc_error()) {
echo odbc_errormsg($conn);
}
odbc_close($conn);
?>
GBase ODBC 驱动重复执行能够返回结果的SQL 问题
如果应用像如下示例调用ODBC 接口,那么GBase ODBC 会在执行
SQLNumResultCols 时先在Server 端执行一次selectSql,
然后在执行SQLExecute 在
Server 端再执行一次selectSql。
SQLPrepare(hstmt, selectSql, SQL_NTS);
SQLNumResultCols(hstmt, &tnum);
...
SQLExecute(hstmt);
第一次执行selectSql 是为了获取结果集的MetaData, 第二次执行selectSql 时才会真
正获取数据。
获取存储过程的结果集
使用SQLPrepare 接口获取存储过程的结果集必须在调用SQLExecute 后获取结果集
信息,否则获取不到结果集信息。



GBase UP 产品手册 6 应用开发指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 1191
基于C API 开发
GBase C API 版本
GBase C API 版本
说 明



sword GCIStmtExecute(
GCISvcCtx *svchp,
GCIStmt *stmtp,
GCIError *errhp,
ub4 iters,
ub4 rowoff,
CONST GCISnapshot *snap_in,
GCISnapshot *snap_out,
ub4 mode
);

执行通过GCIStmtPrepare准备后的语句。



GBase 8s GCI 接口使用指南

南大通用数据技术股份有限公司 31 参数
输入
/输出


svchp
输入
执行所用的上下文句柄
stmtp
输入
用来执行的语句句柄
errhp
输入
错误信息句柄,该接口调用失败时将错误码和错误信息写入
该句柄
iters
输入
执行操作的行数。
执行select语句时,如果大于等于1 ,GCIStmtExecute会
执行记录预取功能, 此时未进行结果集绑定, 将返回失
败;如果是0,那么不会预取,结果集记录获取需要在
fetch过程完成。
执行其他语句时,设定为0或1时,表示只执行一行;设
定大于1,表示批量执行,即一次执行多行。
rowoff
输入
保留参数, 目前不使用(仅用于和Oracle保持兼容)
snap_in
输入
保留参数, 目前不使用(仅用于和Oracle保持兼容)
Snap_out
输入
保留参数, 目前不使用(仅用于和Oracle保持兼容)
mode
输入
GCI_COMMIT_ON_SUCCESS – 自动提交模式,当SQL
执行以后, 会自动提交执行的SQL
GCI_DEFAULT – 默认模式,当SQL执行以后,不自动
提交执行的SQL

如果执行成功, 则返回GCI_SUCCESS,否则返回GCI_ERROR。



GBase 8s GCI 接口使用指南

南大通用数据技术股份有限公司 32