【发布时间】:2011-06-13 10:53:29
【问题描述】:
以下过程将 Timestamp(9) 舍入为 Timestamp(6):
CREATE
TABLE MY_TABLE
(
MY_TIMESTAMP TIMESTAMP(9) NOT NULL
)
CREATE OR REPLACE PROCEDURE "DB"."INSERT_ROW"
(myTimestamp IN TIMESTAMP)
AS
v_sys_error NUMBER := 0;
v_err INTEGER;
v_rc INTEGER;
BEGIN
BEGIN
INSERT
INTO
DB.INSERT_ROW
(
MY_TIMESTAMP
)
VALUES
(
myTimestamp
);
EXCEPTION
WHEN OTHERS THEN
v_sys_error := SQLCODE;
v_err := v_sys_error;
v_rc := SQL%ROWCOUNT;
RAISE;
END;
END;
下面的调用将插入:2007-12-12 12:23:45.123457000
@call DB.INSERT_ROW(TIMESTAMP '2007-12-12 12:23:45.123456789');
而下面的代码将插入:2007-12-12 12:23:45.123456789
INSERT
INTO
DB.MY_TABLE
(
MY_TIMESTAMP
)
VALUES
(
TIMESTAMP '2007-12-12 12:23:45.123456789'
);
如何防止这种情况发生?使用 (myTimestamp IN TIMESTAMP(9)) 验证失败。
【问题讨论】:
-
你确定表格列够宽吗?
标签: sql stored-procedures timestamp oracle11g