返回首页

gbase数据、南大通用产品文档:GBase8sifx_getserial8() 函数

更新日期:2024年09月11日

ifx_getserial8() 函数返回插入至 int8 主变量内的最后一行的 SERIAL8 值。
语法
void ifx_getserial8(serial8_val)
ifx_int8_t *serial8_val;
serial8_val
指向 ifx_getserial8() 在其中放置新插入的 SERIAL8 值的 int8 结构的指针。

用法
在您插入包含 SERIAL8 列的行之后,请使用 ifx_getserial8() 函数。该函数返回您声
明的 int8 变量、serial8_val 中新的 SERIAL8 值。如果 INSERT 语句生成了新的
SERIAL8 值,
则 serial8_val 指向大于零的值。
零或空的 SERIAL8 值指示无效的 INSERT;
该 INSERT 可能以失败,或可能尚未执行。

示例
EXEC SQL BEGIN DECLARE SECTION;
int8 order_num;
int8 rep_num;
char str[20];
EXEC SQL END DECLARE SECTION;

EXEC SQL create table order2
(
order_number SERIAL8(1001),

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

order_date DATE,
customer_num INTEGER,
backlog CHAR(1),
po_num CHAR(10),
paid_date DATE,
sales_rep INT8
);
EXEC SQL insert into order2 (order_number, sales_rep)
values (0, :rep_num);
if (SQLCODE == 0)
{
ifx_getserial8(order_num);
if (ifx_int8toasc(ℴ_num, str, 20) == 0)
printf("New order number is %s\n", str);
}

尽管您最可能使用 GBase 8s 扩展类在不透明类型上下文之外的数据库服务器上创建大对
象,但是智能大对象仍可以是不透明类型中的数据成员,
有关智能大对象的更多信息,请参阅智能大对象数据类型。
在不透明类型中大对象存储在 IfxLocator 对象中;
在内部定义不透明类型的 C 结构中,

对象通过 MI_LO_HANDLE 类型的定位指针引用。该对象使用 IfxSmartBlob 类提供的方
法创建,并且从这些方法获得的大对象句柄成为不透明类型中的数据成员。BLOB 和
CLOB 对象都使用相同的大对象句柄,如下例所示:
import java.sql.*;
import com.gbasedbt.jdbc.*;
/*
* C struct of large_bin_udt:
*
* typedef struct LARGE_BIN_TYPE
* {
* MI_LO_HANDLE lb_handle; // handle to large object (72 bytes)
* }
* large_bin_udt;
*
*/
public class largebinUDT implements SQLData
{
private String sql_type = "large_bin_udt";
public Clob lb_handle;

public largebinUDT() { }

public largebinUDT(Clob clob)
{
lb_handle = clob;
}

public String getSQLTypeName()
{

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 195
-
return sql_type;
}
// reads a stream of data values and builds a Java object
public void readSQL(SQLInput stream, String type) throws SQLException
{
sql_type = type;
lb_handle = stream.readClob();
}
// writes a sequence of values from a Java object to a stream
public void writeSQL(SQLOutput stream) throws SQLException
{
stream.writeClob(lb_handle);
}
}
在 JDBC 应用程序中,使用 IfxSmartBlob 类提供的方法创建 MI_LO_HANDLE 对象:
String s = "insert into largebin_tab (int_col, largebin_col, lvc_col) " +
"values (?,?,?)";
System.out.println(s);
pstmt = conn.prepareStatement(s);

...
// create a large object using IfxSmartBlob's methods
String filename = "lbin_in1.dat";
File file = new File(filename);
int fileLength = (int) file.length();
FileInputStream fin = new FileInputStream(file);

IfxLobDescriptor loDesc = new IfxLobDescriptor(conn);
System.out.println("create large object descriptor...ok");

IfxLocator loPtr = new IfxLocator();
IfxSmartBlob smb = new IfxSmartBlob((IfxConnection)conn);
int loFd = smb.IfxLoCreate(loDesc, 8, loPtr);
System.out.println("create large object...ok");

int n = smb.IfxLoWrite(loFd, fin, fileLength);

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 196
-
System.out.println("write file content into large object...ok");

pstmt.setInt(1, 1);
System.out.println("setInt...ok");

// initialize largebin object using the large object created
// above, before doing setObject for the large_bin_udt column.
largebinUDT largebinObj = new largebinUDT();
largebinObj.lb_handle = new IfxCblob(loPtr);
pstmt.setObject(2, largebinObj);
System.out.println("setObject(largebinUDT)...ok");

pstmt.setString(3, "Sydney");
System.out.println("setString...ok");

pstmt.executeUpdate();
System.out.println("execute...ok");

// close/release large object
smb.IfxLoClose(loFd);
System.out.println("close large object...ok");
smb.IfxLoRelease(loPtr);
System.out.println("release large object...ok");
有关详细信息,请参阅智能大对象数据类型。

gbase_stmt_errno
 摘要:
返回上次语句执行的错误编号。
 语法:
unsigned int gbase_stmt_errno(GBASE_STMT * stmt);
 参数:
 返回值:
错误代码值。如果未出现错误,返回0。