oralce数据库中sys_guid()和自定义函数newid()
在工作编写代码的时候发现,在写sql的时候经常使用newid();
然后自己测试:
使用NEWID() 生成guid
SELECT NEWID() FROM DUAL;
查询出的ID有分隔符
ORACLE也有相同的函数,sys_guid() ,但是生成的格式跟newid()中的有区别。
sys_guid() 生成的guid不含有分隔符;
使用navicate工具查询出来的是乱码:
SELECT sys_guid() FROM dual;

下面用一张测试表TMP_TEST_TABLE来验证一下两者的区别:
CREATE TABLE TMP_TEST_TABLE (
ID VARCHAR(36) NOT NULL,
NAME VARCHAR(4) NOT NULL,
AGE INTEGER NULL,
BIRTHYEAR VARCHAR(4) NULL,
CREATEDTIME TIMESTAMP (6) NOT NULL ENABLE
)

插入两条数据:
INSERT INTO TMP_TEST_TABLE (ID,NAME,CREATEDTIME) VALUES (NEWID(),'AAA',SYSDATE);
INSERT INTO TMP_TEST_TABLE (ID,NAME,CREATEDTIME) VALUES (SYS_GUID(),'BBB',SYSTIMESTAMP);
查询TMP_TEST_TABLE表的数据:
SELECT * FROM TMP_TEST_TABLE;

在自己本地的oracle数据库中执行select newid() from dual;发现报错;
原来newid()是自定义函数。在自己本地oracle数据库创建自定义函数newid();
CREATE OR REPLACE FUNCTION newid RETURN VARCHAR2
IS
guid VARCHAR2 (50);
BEGIN
guid := sys_guid();
RETURN substr(guid,1,8)||'-'||substr(guid,9,4)||'-'||substr(guid,13,4)||'-'||substr(guid,17,4)||'-'||substr(guid,21,12);
END newid;
然后就可以正常使用newid()了。
版权声明:本文为weixin_47115586原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。