Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Tạo chuỗi UUID không có REGEXP_REPLACE và PL / SQL

Rất tiếc, bạn không thể bao gồm các ký tự chuỗi ở các định dạng số, nếu không, bạn có thể chuyển đổi chuỗi hex thành một số rồi quay lại, chèn các ký tự vào mặt nạ định dạng ở đúng vị trí - nhưng bạn chỉ có thể làm điều đó cho các ngày.

Bạn có thể sử dụng substr() kể từ khi các vị trí được cố định. Bạn lo ngại rằng

Rõ ràng là tôi không thể sử dụng substr và nối vì mỗi SUBSTR sẽ xử lý một SYS_GUID khác nhau.

Sử dụng tính toán truy vấn con (còn gọi là biểu thức bảng chung / CTE) có nghĩa là substr() các lệnh gọi cho một hàng từ CTE đó đều thấy cùng một GUID; phương pháp này không tạo SYS_GUID mới cho mỗi phương thức.

with t as (
  select rawtohex(sys_guid()) guid from dual
  connect by level <= 2
)
select guid, substr(guid, 1, 8)
  ||'-'|| substr(guid, 9, 4)
  ||'-'|| substr(guid, 13, 4)
  ||'-'|| substr(guid, 17, 4)
  ||'-'|| substr(guid, 21, 12) as formatted_guid
from t;

GUID                             FORMATTED_GUID                         
-------------------------------- ----------------------------------------
2F6BA62518F926D0E0534D49E50ABB46 2F6BA625-18F9-26D0-E053-4D49E50ABB46    
2F6BA62518FA26D0E0534D49E50ABB46 2F6BA625-18FA-26D0-E053-4D49E50ABB46    

Đó là nhanh hơn rất nhiều so với regex trên một lượng dữ liệu lớn hơn. Với 100000 giá trị trong một vòng lặp (trong một khối PL / SQL, thực hiện một lượng công việc tối thiểu bên trong vòng lặp để làm cho nó thực sự được đánh giá đúng cách và sử dụng dbms_utility.get_cpu_time để kiểm tra thời gian đã trôi qua) phiên bản regex mất khoảng 2,51 giây, trong khi phiên bản chuỗi con mất khoảng 0,29 giây. Tất nhiên, hệ thống của bạn sẽ nhận được các con số khác nhau, nhưng nó vẫn phải có cùng độ lớn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiểu về Java của Oracle trên Mac

  2. Oracle cách xuất truy vấn sang tệp văn bản / csv

  3. Tồn tại / không tồn tại:'chọn 1' so với 'trường chọn'

  4. SQL chọn hàng theo ngày gần đây nhất với hai cột duy nhất

  5. Không thể truy xuất id của hàng được chèn cuối cùng trong Hibernate bằng Oracle