回答: 有一个方法可以返回一个近似值,只需要在where后加上:AND rowid=(trunc(rowid/x)*x)
其中的x代表你想要返回的总的记录的1/x。需要说明的是,这种方法只能返回一个近似的值,并且表中的数据在物理上分布的连续性。
五、创建一个表结构和永久表完全一致的临时表。
例如:CREATE TEMP TABLE mytemp (prodno LIKE
product.prodno desc LIKE product.desc)
你可以使用如下的语句:
SELECT prodno, desc FROM product WHERE ROWID = -1 INSERT INTO TEMP mytemp |
六、更改serial类型下一次插入操作产生的值
我们知道serial类型的字段是系统自动增加的整数字段,那么怎样能控制下一个serial类型字段的值。想要下一个插入的serial类型的值比默认值大,可以用:
ALTER TABLE tabname MODIFY ( ser_col_name SERIAL([new_start_number]) |
想要下一个插入的serial类型的值比默认的值要小,首先需要将serial类型重新置为1:
INSERT INTO table (serial_column) VALUES (2147483647); INSERT INTO table (serial_column) VALUES (0); -- 重新从1开始! ....然后执行ALTER TABLE(就像上面的做法一样)。 |
七、在发生错误的时候终止sql脚本的执行
如果你创建了一个sql脚本,并且在UNIX命令行中使用以下的方式来执行这个脚本:
$ dbaccess
这时,脚本中的所有的sql语句都会被执行,即使其中的一个sql语句发生了错误。例如,如果你脚本中为如下的语句:
如果INSERT语句失败了,DELETE语句仍旧会继续执行。直到commit work。这样的后果可能会很严重。你可以通过设置一个环境变量来防止这种情况的发生。 DBACCNOIGN=1
八、设置decimal字段运算结果的精度
假定你使用dbaccess或者isql,设置环境变量DBFLTMASK=6 就可以设置为小数点后面6位,比如:
BEGIN WORK;
INSERT INTO history
SELECT *
FROM current
WHERE month = 11;
DELETE FROM current
WHERE month = 11;
COMMIT WORK;
CREATE TEMP TABLE t
( col_a DECIMAL(8,4) NOT NULL,
col_b DECIMAL(8,4) NOT NULL,
col_c DECIMAL(8,4) NOT NULL
);
INSERT INTO t VALUES(1.2345, 3.4567, 5.6789);
SELECT (col_a + col_b) / col_c AS value FROM t;
value 0.826075
如果DBFLTMASK=7
value 0.8260755
最新相关文章
发表评论