oracle自动生成uuid
时间: 2023-09-30 14:06:37 AIGC 浏览: 357
Oracle数据库中并没有直接生成UUID的内置函数,但你可以使用以下方法生成UUID:
1. 使用SYS_GUID()函数:SYS_GUID()函数返回一个全局唯一标识符(GUID)。该函数生成一个基于MAC地址、时间戳和会话ID的唯一值。示例如下:
```sql
SELECT SYS_GUID() FROM DUAL;
```
2. 使用UUID生成函数:如果你使用Oracle 12c或更高版本,可以使用SYS_GUID()函数来生成UUID。示例如下:
```sql
SELECT SYS_GUID() AS UUID FROM DUAL;
```
请注意,SYS_GUID()生成的值不是标准的UUID格式,但在大多数情况下可以满足唯一性的需求。如果你需要标准的UUID格式,可以通过一些额外的处理来实现转换。
相关问题
oracle添加id列自动生成uuid
在Oracle数据库中添加id列自动生成uuid可以通过创建触发器来实现。首先,需要创建一个名为SYS_GUID()的Oracle内置函数,该函数可以生成唯一的uuid号。接着,在表中添加id列,将数据类型设置为原生UUID,并将默认值设置为SYS_GUID()。最后,创建一个BEFORE INSERT触发器,在插入新数据时自动为id列生成uuid值。这样,每次插入新数据时,id列都会自动生成唯一的uuid值。触发器的示例代码如下:
```sql
CREATE OR REPLACE TRIGGER trg_uuid_insert
BEFORE INSERT
ON your_table
FOR EACH ROW
BEGIN
:NEW.id_col := SYS_GUID();
END;
/
```
需要注意的是,触发器只会在插入新数据时自动生成uuid,如果以其他方式向该表中插入数据,需要手动为id列赋值为新的uuid。
oracle 生成uuid
在 Oracle 数据库中生成 UUID(通用唯一标识符),可以使用以下几种方式:
---
## ✅ 1. 使用 `SYS_GUID()` 函数
Oracle 提供了内置函数 **`SYS_GUID()`**,它会返回一个 **RAW(16)** 类型的全局唯一标识符(类似于 UUID)。
### 示例:直接查询生成 UUID
```sql
SELECT SYS_GUID() AS guid FROM dual;
```
输出示例:
```
GUID
--------------------------------
7B903D5E2A4A4F86E0530A0C200B5C21
```
> 注意:Oracle 的 `SYS_GUID()` 生成的是 **16 字节的 RAW 值**,格式不同于标准的 UUID v4(例如 Java 中的 `UUID.randomUUID()` 返回的是带连字符的标准 UUID 格式)。
---
## ✅ 2. 在插入语句中使用 `SYS_GUID()` 设置默认值
你可以在建表时将某个字段设置为默认值为 `SYS_GUID()`,如下所示:
```sql
CREATE TABLE my_table (
id RAW(16) DEFAULT SYS_GUID() PRIMARY KEY,
name VARCHAR2(100)
);
```
插入数据时不需要指定 `id` 字段:
```sql
INSERT INTO my_table(name) VALUES ('Test');
```
---
## ✅ 3. 将 `SYS_GUID()` 转换为字符串(VARCHAR2)
如果你希望将 GUID 转换为字符串格式以便查看或传输,可以使用 `RAWTOHEX()` 函数:
```sql
SELECT RAWTOHEX(SYS_GUID()) AS guid_str FROM dual;
```
输出示例:
```
GUID_STR
------------------------------
7B903D5E2A4A4F86E0530A0C200B5C21
```
注意:该字符串不包含连字符 `-`,与 Java 中的 UUID 不完全一致。
---
## ✅ 4. 在 MyBatis 中使用 `SYS_GUID()`
你可以通过 SQL 或插入语句调用 `SYS_GUID()`:
### 示例 1:插入记录并自动生成 GUID
```xml
<insert id="insertWithUuid">
INSERT INTO my_table (id, name)
VALUES (SYS_GUID(), #{name})
</insert>
```
### 示例 2:获取一个 GUID 字符串用于业务逻辑
```xml
<select id="getUuid" resultType="string">
SELECT RAWTOHEX(SYS_GUID()) FROM dual
</select>
```
Java 调用示例:
```java
String uuid = myMapper.getUuid();
System.out.println(uuid); // 输出类似: 7B903D5E2A4A4F86E0530A0C200B5C21
```
---
## ✅ 5. 生成标准 UUID 格式(含连字符)
如果你想在 Oracle 中生成标准的 UUID 格式(如 `xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`),可以写一个 PL/SQL 函数来模拟。
### 示例:创建函数生成标准 UUID v4 格式
```sql
CREATE OR REPLACE FUNCTION generate_uuid RETURN VARCHAR2 IS
guid_str VARCHAR2(36);
BEGIN
guid_str := LOWER(RAWTOHEX(SYS_GUID()));
RETURN SUBSTR(guid_str, 1, 8) || '-' ||
SUBSTR(guid_str, 9, 4) || '-4' ||
SUBSTR(guid_str, 13, 3) || '-'
|| SUBSTR('89AB', FLOOR(DBMS_RANDOM.VALUE(0, 4)) + 1, 1) ||
SUBSTR(guid_str, 16, 3) || '-' ||
SUBSTR(guid_str, 19, 12);
END;
/
```
调用:
```sql
SELECT generate_uuid() FROM dual;
```
输出示例:
```
generate_uuid()
------------------------------------
a1b2c3d4-e5f6-4789-a0b1-c2d3e4f5a6b7
```
---
## ✅ 总结对比
| 方法 | 是否推荐 | 说明 |
|------|----------|------|
| `SYS_GUID()` | ✅ 推荐 | Oracle 原生支持,性能好 |
| `RAWTOHEX(SYS_GUID())` | ✅ 推荐 | 适用于需要字符串格式的情况 |
| 自定义 PL/SQL 函数生成标准 UUID | ⚠️ 可选 | 模拟标准 UUID v4,复杂但可读性好 |
| 插入语句中直接使用 | ✅ 推荐 | 简洁明了,适合主键等场景 |
---
##
阅读全文
相关推荐














