返回首页

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

更新日期:2024年09月11日

ifx_lo_specget_estbytes() 函数从 LO-specification 结构取得智能大对象的估计大小。


语法
mint ifx_lo_specget_estbytes(LO_spec, estbytes)
ifx_lo_create_spec_t *LO_spec;
ifx_int8_t *estbytes;
LO_spec
指向从其取得估计的大小的 LO-specification 结构的指针。
estbytes
指向 ifx_lo_specget_estbytes() 将智能大对象的估计字节数放置其内的 ifx_int8_t 结
构的指针。

用法
estbytes 值是以字节计的智能大对象的估计的最终大小。此估计是智能大
对象优化器的优化线索。
重要:在您调用 ifx_lo_specget_estbytes() 之前,您必须调用 ifx_lo_def_create_spec()
函数来初始化 LO-specification 结构。您可使用 ifx_lo_col_info() 函数来存储与
LO-specification 结构中的特定列相关联的存储特征。

返回代码
0
函数成功。
-1
函数不成功。





(String,
GBaseConnection, GBaseTransaction)
使用SQL 查询语句、GBaseConnection 和GBaseTransaction 实例初始化
GBaseCommand 的新实例。

语法
[Visual Basic]
Public Sub New ( _
cmdText As String, _
connection As GBaseConnection, _
transaction As GBaseTransaction _
)
[C#]
public GBaseCommand(
string cmdText,



GBase 8a 程序员手册ADO.NET 篇
南大通用数据技术股份有限公司

- 129 -
GBaseConnection connection,
GBaseTransaction transaction
)

参数
1) cmdText :SQL 查询语句;
2) connection :已经建立连接的GBaseConnection 对象;
3) transaction :事务对象。

您可以在 stores_demo 演示数据库上运行样本 SQL 命令文件。

GBase 8s DB-Access 用户指南
南大通用数据技术股份有限公司 - 44 -

alt_cat.sql 命令文件
以下命令文件改变 catalog 表。它删除 catalog 表上的现有约束 aa,并添加一个指定级
联删除的新约束 ab。您可以使用此命令文件,然后再使用 del_stock.sql 命令文件在包
含记录的数据库上练习级联删除。
ALTER TABLE catalog DROP CONSTRAINT aa;
ALTER TABLE catalog ADD CONSTRAINT
(FOREIGN KEY (stock_num, manu_code) REFERENCES stock
ON DELETE CASCADE CONSTRAINT ab);
c_calls.sql 命令文件
以下命令文件创建 cust_calls 表:
CREATE TABLE cust_calls
(
customer_num INTEGER,
call_dtime DATETIME YEAR TO MINUTE,
user_id CHAR(18) DEFAULT USER,
call_code CHAR(1),
call_descr CHAR(240),
res_dtime DATETIME YEAR TO MINUTE,
res_descr CHAR(240),
PRIMARY KEY (customer_num, call_dtime),
FOREIGN KEY (customer_num) REFERENCES customer (customer_num),
FOREIGN KEY (call_code) REFERENCES call_type (call_code)
);
c_cat.sql 命令文件
以下命令文件创建 catalog 表。它包含约束 aa,该约束使您可通过在包含日志记录的数
据库上运行 alt_cat.sql 和 del_stock.sql 命令文件中的 SQL 语句来练习级联删除。
CREATE TABLE catalog
(
catalog_num SERIAL(10001),

GBase 8s DB-Access 用户指南
南大通用数据技术股份有限公司 - 45 -

stock_num SMALLINT NOT NULL,
manu_code CHAR(3) NOT NULL,
cat_descr TEXT,
cat_picture BYTE,
cat_advert VARCHAR(255, 65),
PRIMARY KEY (catalog_num),
FOREIGN KEY (stock_num, manu_code) REFERENCES stock
CONSTRAINT aa
);
c_custom.sql 命令文件
以下命令文件创建 customer 表:
CREATE TABLE customer
(
customer_num SERIAL(101),
fname CHAR(15),
lname CHAR(15),
company CHAR(20),
address1 CHAR(20),
address2 CHAR(20),
city CHAR(15),
state CHAR(2),
zipcode CHAR(5),
phone CHAR(18),
PRIMARY KEY (customer_num)
);
c_index.sql 命令文件
以下命令文件在 customer 表的 zipcode 列上创建索引:
CREATE INDEX zip_ix ON customer (zipcode);
c_items.sql 命令文件

GBase 8s DB-Access 用户指南
南大通用数据技术股份有限公司 - 46 -

以下命令文件创建 items 表:
CREATE TABLE items
(
item_num SMALLINT,
order_num INTEGER,
stock_num SMALLINT NOT NULL,
manu_code CHAR(3) NOT NULL,
quantity SMALLINT CHECK (quantity >= 1),
total_price MONEY(8),
PRIMARY KEY (item_num, order_num),
FOREIGN KEY (order_num) REFERENCES orders (order_num),
FOREIGN KEY (stock_num, manu_code) REFERENCES stock
(stock_num, manu_code)
);
c_manuf.sql 命令文件
以下命令文件创建 manufact 表:
CREATE TABLE manufact
(
manu_code CHAR(3),
manu_name CHAR(15),
lead_time INTERVAL DAY(3) TO DAY,
PRIMARY KEY (manu_code)
);
c_orders.sql 文件
以下命令文件创建 orders 表:
CREATE TABLE orders
(
order_num SERIAL(1001),
order_date DATE,

GBase 8s DB-Access 用户指南
南大通用数据技术股份有限公司 - 47 -

customer_num INTEGER NOT NULL,
ship_instruct CHAR(40),
backlog CHAR(1),
po_num CHAR(10),
ship_date DATE,
ship_weight DECIMAL(8,2),
ship_charge MONEY(6),
paid_date DATE,
PRIMARY KEY (order_num),
FOREIGN KEY (customer_num) REFERENCES customer (customer_num)
);
c_proc.sql 命令文件
以下命令文件创建 SPL 例程。它读取客户的全名和地址,并将姓氏作为其唯一的自变量。

此例程显示 CREATE PROCEDURE 的旧用法。
为了符合 GBase 8s 首选的 SQL 标准,如果要从例程中返回值,请定义函数。
CREATE PROCEDURE read_address (lastname CHAR(15))
RETURNING CHAR(15), CHAR(15), CHAR(20), CHAR(15), CHAR(2),
CHAR(5);
DEFINE p_fname, p_city CHAR(15);
DEFINE p_add CHAR(20);
DEFINE p_state CHAR(2);
DEFINE p_zip CHAR(5);
SELECT fname, address1, city, state, zipcode
INTO p_fname, p_add, p_city, p_state, p_zip
FROM customer
WHERE lname = lastname;

RETURN p_fname, lastname, p_add, p_city, p_state, p_zip;


GBase 8s DB-Access 用户指南
南大通用数据技术股份有限公司 - 48 -

END PROCEDURE;
c_state 命令文件
以下命令文件创建 state 表:
CREATE TABLE state
(
code CHAR(2),
sname CHAR(15),
PRIMARY KEY (code)
);
c_stock.sql 命令文件
以下命令文件创建 stock 表:
CREATE TABLE stock
(
stock_num SMALLINT,
manu_code CHAR(3),
description CHAR(15),
unit_price MONEY(6),
unit CHAR(4),
unit_descr CHAR(15),
PRIMARY KEY (stock_num, manu_code),
FOREIGN KEY (manu_code) REFERENCES manufact
);
c_stores.sql 命令文件
以下命令文件创建 stores_demo 数据库:
CREATE DATABASE stores_demo;
c_table.sql 命令文件
以下命令文件创建名为 restock 的数据库,
然后在该数据库中创建名为 sports 的定制表:

CREATE DATABASE restock;


GBase 8s DB-Access 用户指南
南大通用数据技术股份有限公司 - 49 -

CREATE TABLE sports
(
catalog_no SERIAL UNIQUE,
stock_no SMALLINT,
mfg_code CHAR(5),
mfg_name CHAR(20),
phone CHAR(18),
descript VARCHAR(255)
);
c_trig.sql 命令文件
以下命令文件创建名为 log_record 的表,
然后创建名为 upqty_i 的用于更新表的触发器:

CREATE TABLE log_record
(item_num SMALLINT,
ord_num INTEGER,
username CHARACTER(8),
update_time DATETIME YEAR TO MINUTE,
old_qty SMALLINT,
new_qty SMALLINT);

CREATE TRIGGER upqty_i
UPDATE OF quantity ON items
REFERENCING OLD AS pre_upd
NEW AS post_upd
FOR EACH ROW(INSERT INTO log_record
VALUES (pre_upd.item_num, pre_upd.order_num, USER, CURRENT,
pre_upd.quantity, post_upd.quantity));
c_type.sql 命令文件
以下命令文件创建 call_type 表:
CREATE TABLE call_type

GBase 8s DB-Access 用户指南
南大通用数据技术股份有限公司 - 50 -

(
call_code CHAR(1),
code_descr CHAR(30),
PRIMARY KEY (call_code)
);
c_view1.sql 命令文件
以下命令文件在单个表上创建名为 custview 的视图,并将视图上的特权授予 public。它
包括 WITH CHECK OPTION 关键字,用于验证通过视图对基础表所做的任何更改是否未破坏
视图的定义。
CREATE VIEW custview (firstname, lastname, company, city) AS
SELECT fname, lname, company, city
FROM customer
WHERE city = 'Redwood City'
WITH CHECK OPTION;

GRANT DELETE, INSERT, SELECT, UPDATE
ON custview
TO public;
c_view2.sql 命令文件
以下命令文件在 orders 和 items 表上创建视图:
CREATE VIEW someorders (custnum,ocustnum,newprice) AS
SELECT orders.order_num, items.order_num,
items.total_price*1.5
FROM orders, items
WHERE orders.order_num = items.order_num
AND items.total_price > 100.00;
d_proc.sql 命令文件
以下命令文件删除 c_proc.sql 命令文件创建的 SPL 例程:
DROP PROCEDURE read_address;

GBase 8s DB-Access 用户指南
南大通用数据技术股份有限公司 - 51 -

d_trig.sql 命令文件
以下命令文件删除 c_trig.sql 命令文件所创建的触发器:
DROP TRIGGER upqty_i;
d_view.sql 命令文件
以下命令文件删除 c_view1.sql 命令文件所创建的名为 custview 的视图:
DROP VIEW custview;
del_stock.sql 命令文件
以下命令文件从库存编号为 102 的 stock 表中删除行。此删除将级联至 catalog 表(尽
管相关制造商代码将保留在 manufact 表中)。可在 alt_cat.sql 命令文件之后使用
del_stock.sql 命令文件,用于在包含记录的数据库上练习级联删除。
DELETE FROM stock WHERE stock_num = 102;
运行 alt_cat.sql 和 del_stock.sql 命令文件中的 SQL 语句之后,对 catalog 表发出
以下查询以验证是否已删除行:
SELECT * FROM catalog WHERE stock_num = 102;
stores_demo 数据库已更改。您可能要重新运行 dbaccessdemo 脚本来重新构建原始数据
库。
ins_table.sql 命令文件
以下命令文件在 c_table.sql 命令文件创建的 sports 表中插入一行:
INSERT INTO sports
VALUES (0,18,'PARKR', 'Parker Products', '503-555-1212',
'Heavy-weight cotton canvas gi, designed for aikido or
judo but suitable for karate. Quilted top with side ties,
drawstring waist on pants. White with white belt.
Pre-washed for minimum shrinkage. Sizes 3-6.');
opt_disk.sql 命令文件
以下命令文件提供光盘子系统上的 SELECT 语句的示例。它包括支持光学存储器的只读
family() 和 volume() 运算符。(这仅在使用 Optical Subsystem 时可用。)
查询生成包含自行车头盔图形的卷列表。将为每个包含自行车头盔图形的数据行生成一行
输出(family 和 volume)。family() 运算符返回存储光学 BLOB 列的光学系列产品的名
称,而 volume() 返回存储光学 BLOB 列的卷的编号。这些函数仅对存储在光学介质上的

GBase 8s DB-Access 用户指南
南大通用数据技术股份有限公司 - 52 -

数据有效。
SELECT family(cat_picture), volume(cat_picture)
FROM catalog
WHERE stock_num = 110;
sel_agg.sql 命令文件
以下命令文件中的 SELECT 语句使用聚集函数查询表数据。它在单个语句中组合了聚集函
数 MAX 和 MIN。
SELECT MAX (ship_charge), MIN (ship_charge)
FROM orders;
sel_all.sql 命令文件
以下命令文件示例包含可在交互式 SQL 的 GBase
8s 实现中使用的全部七个 SELECT 语句
子句。此 SELECT 语句将 orders 表和 items 表连接在一起。它还使用显示标号、表别名
和用作列指示符的整数;对数据进行分组和排序;并将结果放入临时表中。
SELECT o.order_num, SUM (i.total_price) price,
paid_date - order_date span
FROM orders o, items i
WHERE o.order_date > '01/01/90'
AND o.customer_num > 110
AND o.order_num = i.order_num
GROUP BY 1, 3
HAVING COUNT (*) < 5
ORDER BY 3
INTO TEMP temptab1;
sel_group.sql 命令文件
以下命令文件示例包括 GROUP
BY 和 HAVING 子句。HAVING 子句通常在组形成之后通过将
一个或多个限定条件应用到组来补充 GROUP
BY 子句,这与 WHERE 子句限定单独行的方法
类似。(使用 HAVING 子句的一个优点在于:您可以在搜索条件中包括聚集,但是不能在
WHERE 子句的搜索条件中包括聚集。)
每个 HAVING 子句将组的一个列或聚集表达式与组的另一个聚集表达式或常量比较。您可
以使用 HAVING 子句将条件置于组列表中的列值和聚集值上。

GBase 8s DB-Access 用户指南
南大通用数据技术股份有限公司 - 53 -

SELECT order_num, COUNT(*) number, AVG (total_price) average
FROM items
GROUP BY order_num
HAVING COUNT(*) > 2;
sel_join.sql 命令文件
以下命令文件示例对 customer 表和 cust_calls 表使用简单连接。此查询仅返回显示已
调用客户服务的客户的那些行。
SELECT c.customer_num, c.lname, c.company,
c.phone, u.call_dtime, u.call_descr
FROM customer c, cust_calls u
WHERE c.customer_num = u.customer_num;
sel_ojoin1.sql 命令文件
以下命令文件示例对两个表使用简单外连接。
在 cust_calls 表前使用关键字 OUTER 可以
使它成为从属表。外连接导致查询返回有关所有客户的信息,即使他们未调用客户服务。
将检索 customer 控制表中的所有行,
并且将空值指定给 cust_calls 从属表中对应的行。

SELECT c.customer_num, c.lname, c.company,
c.phone, u.call_dtime, u.call_descr
FROM customer c, OUTER cust_calls u
WHERE c.customer_num = u.customer_num;
sel_ojoin2.sql 命令文件
以下命令文件示例创建一个外连接,它是至第三个表的简单连接的结果。外连接的第二种
类型称作嵌套的简单连接。
此查询首先在 orders 表和 items 表上执行简单连接,并检索有关包含 KAR 或 SHM 的
manu_code 的项的所有订单的信息。然后,它执行外连接,将此信息与 customer 控制表
中的数据组合起来。可选的 ORDER BY 子句对数据进行重组。
SELECT c.customer_num, c.lname, o.order_num,
i.stock_num, i.manu_code, i.quantity
FROM customer c, OUTER (orders o, items i)
WHERE c.customer_num = o.customer_num
AND o.order_num = i.order_num

GBase 8s DB-Access 用户指南
南大通用数据技术股份有限公司 - 54 -

AND manu_code IN ('KAR', 'SHM')
ORDER BY lname;
sel_ojoin3.sql 命令文件
以下 SELECT 语句示例是外连接的第三种类型,称为嵌套的外连接。它通过创建外连接来
查询表数据,该外连接是至第三个表的外连接的结果。
此查询首先在 orders 表和 items 表上执行外连接,并检索有关包含 KAR 或 SHM 的
manu_code 的项的所有订单的信息。然后,它执行外连接,将此信息与 customer 控制表
中的数据组合起来。此查询保留上一示例所除去的订单编号,并为不包含具有任一制造商
代码的项的订单返回行。可选的 ORDER BY 子句对数据进行重组。
SELECT c.customer_num, lname, o.order_num,
stock_num, manu_code, quantity
FROM customer c, OUTER (orders o, OUTER items i)
WHERE c.customer_num = o.customer_num
AND o.order_num = i.order_num
AND manu_code IN ('KAR', 'SHM')
ORDER BY lname;
sel_ojoin4.sql 命令文件
以下示例使用第四种类型的外连接查询表数据。此查询显示外连接,该外连接是每两个表
与第三个表的外连接的结果。在此类型的外连接中,连接关系可能仅存在于控制表和从属
表之间。
此查询单独地将从属表 orders 和 cust_calls 连接到 customer 控制表,但不会将两个
从属表连接起来。(INTO TEMP 子句选择结果放入临时表。)
SELECT c.customer_num, lname, o.order_num,
order_date, call_dtime
FROM customer c, OUTER orders o, OUTER cust_calls x
WHERE c.customer_num = o.customer_num
AND c.customer_num = x.customer_num
INTO temp service;
sel_order.sql 命令文件
以下示例使用 ORDER BY 和 WHERE 子句进行查询。在此 SELECT 语句中,通过比较

GBase 8s DB-Access 用户指南
南大通用数据技术股份有限公司 - 55 -

'bicycle%'(LIKE 条件或 MATCHES 条件的 'bicycle*')来指定后跟任意顺序的零或更多
字符的字母 bicycle。它通过添加另一个将 PRC 的 manu_code 排除在外的比较条件来进
一步缩小搜索范围。
SELECT * FROM stock
WHERE description LIKE 'bicycle%'
AND manu_code NOT LIKE 'PRC'
ORDER BY description, manu_code;
sel_sub.sql 命令文件
以下示例使用子查询进行查询。此自连接使用相关子查询进行检索,并列出已订购的价格
最高的 10 项。
SELECT order_num, total_price
FROM items a
WHERE 10 >
(SELECT COUNT (*)
FROM items b
WHERE b.total_price < a.total_price)
ORDER BY total_price;
sel_union.sql 命令文件
以下示例使用 UNION 子句来查询两个表中的数据。
复合查询对 stock 表和 items 表中的
stock_num 列和 manu_code 列执行联合。语句选择单价低于 $25.00 或订购数量大于 3
的项,并列出它们的 stock_num 和 manu_code。
SELECT DISTINCT stock_num, manu_code
FROM stock
WHERE unit_price < 25.00

UNION

SELECT stock_num, manu_code
FROM items

GBase 8s DB-Access 用户指南
南大通用数据技术股份有限公司 - 56 -

WHERE quantity > 3;
upd_table.sql 命令文件
以下示例更新 c_table.sql 命令文件创建的 sports 表:
UPDATE sports
SET phone = '808-555-1212'
WHERE mfg_code = 'PARKR';