【发布时间】:2011-07-22 20:19:50
【问题描述】:
我们正在我的工作中测试 Oracle,我负责在 Oracle 上构建所有数据库对象(表、过程、触发器等),我们目前使用 Microsoft SQL Server 2008 R2。我们几乎所有的 ID 列都使用唯一标识符。我使用这个函数来创建 GUID:
CREATE OR REPLACE FUNCTION NEWID RETURN CHAR IS guid CHAR(36) ;
BEGIN
SELECT SYS_GUID() INTO guid FROM DUAL;
guid :=
SUBSTR(guid, 1, 8) ||
'-' || SUBSTR(guid, 9, 4) ||
'-' || SUBSTR(guid, 13, 4) ||
'-' || SUBSTR(guid, 17, 4) ||
'-' || SUBSTR(guid, 21);
RETURN guid;
END NEWID;
/
但现在我不知道如何在创建表时将其用作列的默认值。这是一个无效的示例:
CREATE TABLE "NonWorkingExample"
(
"ID" CHAR(36) NOT NULL DEFAULT NEWID(),
"UnitNumber" NUMBER(38) NOT NULL,
"StartDateTime" TIMESTAMP NOT NULL,
"EndDateTime" TIMESTAMP NULL,
CONSTRAINT PK_RentalAgreements PRIMARY KEY ("ID")
);
还有错误:
Error starting at line 1 in command:
CREATE TABLE "NonWorkingExample"
(
"ID" CHAR(36) NOT NULL DEFAULT NEWID(),
"UnitNumber" NUMBER(38) NOT NULL,
"StartDateTime" TIMESTAMP NOT NULL,
"EndDateTime" TIMESTAMP NULL,
CONSTRAINT PK_RentalAgreements PRIMARY KEY ("ID")
)
Error at Command Line:3 Column:58
Error report:
SQL Error: ORA-00907: missing right parenthesis
00907. 00000 - "missing right parenthesis"
*Cause:
*Action:
任何帮助将不胜感激。谢谢。
【问题讨论】:
-
顺便说一句,我无法让您的函数按所写的方式运行。它编译了文件,但
select newid from dual导致ORA-06502: PL/SQL: numeric or value error: character string buffer too small将guid 的声明更改为varchar2(36)修复了它。 -
有趣。我从另一个 SO 帖子中获得了该功能