HaloDB 的 Oracle 兼容模式

↑ 關注“少安事務所”公眾號,歡迎?收藏,不錯過精彩內容~

前傾回顧

前面介紹了“光環”數據庫的基本情況和安裝辦法。

  • 哈嘍,國產數據庫!Halo DB!
  • 三步走,Halo DB 安裝指引

HaloDB是基于原生PG打造的新一代高性能安全自主可控全場景通用型統一數據庫。 業內首次創造性的提出插件式內核架構設計,通過配置的方式,適配不同的應用場景,打造全場景覆蓋的能力,滿足企業大部分數據存儲處理需求。從而消除數據孤島,降低系統復雜度,保護企業既有投資,降低企業成本。同時支持x86、arm等異構平臺之間的混合部署。

或許大家對 Halo DB 在 Oracle 和 MySQL 的兼容性支持方面也非常感興趣。

本文將介紹如何開啟 HaloDB 的 Oracle 兼容模式,以及基礎使用方法。

HaloDB 的 Oracle 兼容模式

那么,HaloDB 到底兼容哪些 Oracle 語法、視圖、系統包呢?

這里有一份(部分)清單,可供參考。

Halo 數據庫支持 Oracle 兼容語法:

  • 支持連接符
  • 支持帶別名的 UPDATE
  • 支持匿名子查詢
  • 支持窗口函數 DISTINCT 操作
  • 支持 DUAL 偽表
  • 支持 SYSDATE/SYSTIMESTAMP
  • 支持 ROWNUM
  • 支持 ROWID
  • 支持 MINUS 操作
  • 支持 DECODE 函數(不限制參數個數)
  • 支持 DBLINK 語法
  • 支持 Oracle 格式的數值輸出
  • 支持 VARCHAR2/NUMBER/CLOB/BLOB 數據類型
  • 支持 START WITH/CONNECT BY 語法
  • 支持 IN 的特別語法(例: SELECT * FROM a_table WHERE a IN b)
  • 支持 Oracle 格式的日期類型及運算
  • 支持 LISTAGG/WM_CONCAT 函數
  • 支持 HAVING/GROUP BY 子句順序互換(即 HAVING 子句可在GROUP BY 之前也可在 GROUP BY 之后)
  • 支持 NULL 與空串的等價轉換
  • 支持 Oracle 語法的序列取值
  • 支持 Oracle 語法的 PROCEDURE/FUNCTION/PACKAGE 的創建
  • 支持 ORDER BY 子句中使用列別名
  • 支持 TABLE 函數
  • 支持 MERGE INTO 語法
  • 支持 WITHIN GROUP 語法
  • 支持 Q’ 轉義語法
  • 支持 NLS_DATE_FORMAT 參數
  • 支持 Oracle 的常用視圖

Halo 數據庫支持 Oracle 兼容的視圖:

  • DBA_SEGMENTS
  • PRODUCT_COMPONENT_VERSION
  • USER_CON_COLUMNS
  • USER_CONSTRAINTS
  • USER_IND_COLUMNS
  • USER_OBJECTS
  • USER_PROCEDURES
  • USER_SOURCE
  • USER_TAB_COLUMNS
  • USER_TABLES

Halo 數據庫支持 Oracle 兼容的系統包:

  • DBMS_ALERT
  • DBMS_ASSERT
  • DBMS_OBFUSCATION_TOOLKIT
  • DBMS_OUTPUT
  • DBMS_PIPE
  • DBMS_RANDOM
  • DBMS_UTILITY
  • UTL_FILE
  • UTL_I18N

等等。

清單很長,這里就不再列舉了,詳情可留言,帶你進《HaloDB產品吐槽群》。

開啟 HaloDB 的 Oracle 兼容模式

修改配置文件

如需開啟 Oracle 兼容模式,需要先對數據庫配置文件 postgresql.conf 進行調整。

#database_compat_mode?=?'postgresql'?-->?database_compat_mode?=?'oracle'
#standard_parserengine_auxiliary?=?'on'?-->?standard_parserengine_auxiliary?=?'on'
#transform_null_equals?=?off?-->?transform_null_equals?=?off
#oracle.use_datetime_as_date?=?false?-->?oracle.use_datetime_as_date?=?true

其中,

  • database_compat_mode

該參數表示:

該參數為枚舉類型,表示數據庫運行模式。

默認值為 postgresql,其它可取值包括 oracle 、 mysql 、 sybase 、 sqlserver 、 db2 等。

  • standard_parserengine_auxiliary

該參數表示:

是否需要標準編譯引擎協同。默認值 on.

  • transform_null_equals

該參數表示:

由于針對NULL的任何操作都只會返回NULL,所以要判斷一個值是否為NULL一般只能用IS NULL來判斷。

Halo提供了參數 transform_null_equals 來控制是否可以用“=”操作符來判斷一個值是否為NULL。

  • oracle.use_datetime_as_date

該參數表示:

Oracle 的 date 類型帶有日期和時間信息,這和Halo的默認設置不同。

默認情況下,Halo的date類型只包含日期,datetime類型才包含日期和時間信息。

如果想要實現和Oracle相同的date類型,可以將參數use_datetime_as_date設置為true (默認值是 off)。

重啟 Halo 數據庫

pg_ctl?restart

創建 Oracle 擴展

針對需要啟用 Oracle 解析引擎的數據庫創建 Oracle 擴展:

需要注意的是:如需采用 oracle 模式,新建庫要創建擴展才能使用 oracle 語法。

create?extension?aux_oracle?cascade;

查看已安裝的擴展:

halo0root=#?\dx
??????????????????????????????????List?of?installed?extensions
????Name????|?Version?|???????Schema???????|????????????????????Description
------------+---------+--------------------+----------------------------------------------------
?aux_init???|?1.0?????|?information_schema?|?Init?Supplementary?Extension
?aux_oracle?|?1.8?????|?public?????????????|?Halo?Oracle?Supplementary?Extension
?pgcrypto???|?1.3?????|?public?????????????|?cryptographic?functions
?plorasql???|?1.0?????|?pg_catalog?????????|?Oracle?Compatibal?SQL?(PL/SQL)?procedural?language
?plpgsql????|?1.0?????|?pg_catalog?????????|?PL/pgSQL?procedural?language
(5?rows)

測試 HaloDB 的 Oracle 兼容模式

1. 查看組件產品的版本和狀態信息。

halo0root=#?table?product_component_version;
??product???|??????version???????|??????status
------------+--------------------+------------------
?Halo?14.10?|?1.0.14.10?(231130)?|?64bit?Production
?plpgsql????|?1.0.14.10?(231130)?|?64bit?Production
?aux_init???|?1.0????????????????|?64bit?Production
?plorasql???|?1.0????????????????|?64bit?Production
?pgcrypto???|?1.3????????????????|?64bit?Production
?aux_oracle?|?1.8????????????????|?64bit?Production
(6?rows)

2. 測試 DBMS_ASSERT 系統包

該系統包用于對輸入值的屬性進行驗證。

ENQUOTE_NAME 方法表示用雙引號引用字符串,并檢查其是否為合法的SQL標識符。

halo0root=#?SELECT?DBMS_ASSERT.ENQUOTE_NAME('Hello,?HaloDB');
??enquote_name
-----------------
?"hello,?halodb"
(1?row)

halo0root=#?SELECT?DBMS_ASSERT.ENQUOTE_NAME('Hello,?HaloDB',?false);
??enquote_name
-----------------
?"Hello,?HaloDB"
(1?row)

3. 驗證和Oracle相同的date類型

確認 oracle.use_datetime_as_date 參數已開啟。

halo0root=#?show?oracle.use_datetime_as_date;
?oracle.use_datetime_as_date
-----------------------------
?on
(1?row)

驗證步驟如下:

halo0root=#?create?table?t?(a?date,?b?datetime);
CREATE?TABLE
halo0root=#?insert?into?t?select?now(),now();
INSERT?0?1
halo0root=#?table?t;
??????????a??????????|??????????b
---------------------+---------------------
?2024-05-28?12:09:11?|?2024-05-28?12:09:11
(1?row)

總結

到此,我們介紹了如何開啟 HaloDB 的 Oracle 兼容模式,并做了簡單驗證。

如果你也對這款“光環”數據庫感興趣,歡迎轉發、留言。

🌻 往期精彩 ▼

  • 哈嘍,國產數據庫!Halo DB!
  • 從 PG 技術峰會南京站汲取的那些干貨
  • PG 擴展推薦:pgpasswd & PG 密碼長度
  • 即將告別PG 12,建議升級到PG 16.3版本
  • PG Style! 盤點幾個常用的 Postgres 環境變量
  • 后 EL 7 時代,PG 16 如何在 CentOS 7 上運行

-- / END / --

alt

如果這篇文章為你帶來了靈感或啟發,就請幫忙點『贊』or『在看』or『轉發』吧,感謝!(??????)

本文由 mdnice 多平臺發布

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/19151.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19151.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/19151.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

代碼隨想錄訓練營Day 43|力扣343. 整數拆分、96.不同的二叉搜索樹

1.整數拆分 代碼隨想錄 視頻講解:動態規劃,本題關鍵在于理解遞推公式!| LeetCode:343. 整數拆分_嗶哩嗶哩_bilibili 代碼: class Solution { public:int integerBreak(int n) {// dp[i] 拆分數字i所獲得的最大乘積為d…

景源暢信:抖音小店如何開櫥窗?

在當今數字化時代,社交媒體平臺不僅僅是人們交流和分享生活的工具,更成為了商家們展示和銷售產品的重要場所。抖音作為一款流行的短視頻社交應用,其內置的電商功能——抖音小店,為眾多商家和個人提供了便捷的在線銷售途徑。其中&a…

使用NuScenes數據集生成ROS Bag文件:深度學習與機器人操作的橋梁

在自動駕駛、機器人導航及環境感知的研究中,高質量的數據集是推動算法發展的關鍵。NuScenes數據集作為一項開源的多模態自動駕駛數據集,提供了豐富的雷達、激光雷達(LiDAR)、攝像頭等多種傳感器數據,是進行多傳感器融合…

Go語言 gRPC 簡述

參考文章 grpc-我們為什么要用gRpc?gRpc快在哪里?_grpc 優點-CSDN博客 GRPC詳解-CSDN博客 1. 什么是gRPC gRPC 是一個高性能 遠程調用(RPC)框架,屏蔽分布式計算中的各種調用細節,可以像本地調用一樣調用遠程的函數。 2. 為什么要…

jmeter多用戶并發登錄教程

有時候為了模擬更真實的場景,在項目中需要多用戶登錄操作,大致參考如下 jmx腳本:百度網盤鏈接 提取碼:0000 一: 單用戶登錄 先使用1個用戶登錄(先把1個請求調試通過) 發送一個登錄請求&…

貪心(臨項交換)+01背包,藍橋云課 搬磚

一、題目 1、題目描述 2、輸入輸出 2.1輸入 2.2輸出 3、原題鏈接 0搬磚 - 藍橋云課 (lanqiao.cn) 二、解題報告 1、思路分析 將物品按照w[i] v[i]升序排序然后跑01背包就是答案 下面證明:(不要問怎么想到的,做題多了就能想到&#xff…

AVB協議分析(一) FQTSS協議介紹

FQTSS協議介紹 一、AVB整體架構二、概述三、協議作用及作用對象四、協議的實現五、參考文獻: 一、AVB整體架構 可見FQTSS位于MAC層的上面,代碼看不懂,咱們就從最底層開始,逐層分析協議,逐個擊破,慢就是快。…

基于GO 寫的一款 GUI 工具,M3u8視頻下載播放器-飛鳥視頻助手

M3u8視頻下載播放器-飛鳥視頻助手 M3u8視頻飛鳥視頻助手使用m3u8下載m3u8 本地播放 軟件下載地址m3u8嗅探 M3u8視頻 M3u8視頻格式是為網絡視頻播放設計,視頻網站多數采用 m3u8格式。如騰訊,愛奇藝等網站。 m3u8和 mp4的區別: 一個 mp4是一個…

【PB案例學習筆記】-12秒表實現

寫在前面 這是PB案例學習筆記系列文章的第11篇,該系列文章適合具有一定PB基礎的讀者。 通過一個個由淺入深的編程實戰案例學習,提高編程技巧,以保證小伙伴們能應付公司的各種開發需求。 文章中設計到的源碼,小凡都上傳到了gite…

Python3 筆記:math模塊

要使用 math 函數必須先導入math模塊 語法:import math Python math 模塊提供了許多對浮點數的數學運算函數。 math 模塊下的函數,返回值均為浮點數,除非另有明確說明。 如果需要計算復數,需使用 cmath 模塊中的同名函數。 m…

【2.文件和目錄相關(下)】

一、查看文件內容命令 1、cat 文件名:用于顯示文件內容,比如 cat test.c。 (1)cat -b test.c 表示加行號顯示文件內容。 (2)cat -s test.c 表示多個空行合并成一個空行顯示。 2、nl 文件名:…

2024 京麟ctf -MazeCodeV1

文章目錄 檢查代碼思路一個字節的指令注意附上S1uM4i佬們的exp https://www.ctfiot.com/184181.html 檢查 代碼 __int64 __fastcall check_solve(char *a1) {__int64 result; // rax__int64 v2; // rax__int64 index_step; // rax__int64 v4; // rax__int64 v5; // rax__int64…

vb.net,C#強制結束進程,“優雅”的退出方式

在VB.NET中,Application.Exit()和Environment.Exit(0)都用于結束程序,但它們的使用場景和背后的邏輯略有不同。 **Application.Exit()**: Application.Exit()通常用于Windows Forms應用程序中。當調用Application.Exit()時,它會觸…

cocos 屏幕點擊坐標轉換為節點坐標

let scPos event.getLocation(); let camera find(Canvas/Camera).getComponent(Camera).screenToWorld(new Vec3(scPos.x,scPos.y,0));//攝像機 let p this.node.getComponent(UITransform).convertToNodeSpaceAR(camera);//this.node為指定的節點為原點(0,0&…

MVC架構中的servlet層重定向404小坑

servlet層中的UserLoginServlet.java package com.mhys.servlet; /*** ClassName: ${NAME}* Description:** Author 數開_11* Create 2024-05-29 20:32* Version 1.0*/import com.mhys.pojo.User; import com.mhys.service.UserService; import com.mhys.service.impl.UserSer…

Unix環境高級編程--8-進程控制---8.7函數waitid 8.8函數wait3 wait4

1、Single Unix Specification支持一個取得進程終止狀態的函數--waitid,此函數類似于waitpid: pid_t wait(int *status); pid_t waitpid(pid_t pid, int *status, int options); int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options); …

MySQL之創建高性能的索引(六)

創建高性能的索引 選擇合適的索引列順序 當使用前綴索引的時候,在某些條件值的基數比正常值高的時候,問題就來了。例如,在某些應用程序中,對于沒有登錄的用戶,都將其用戶名記錄為"guest",在記錄…

【axios】的淺度分析

一、Axios的攔截器能干些什么? Axios攔截器的實現原理主要涉及兩個方面:請求攔截器和響應攔截器,它們分別在請求發送前和響應返回后進行預處理和后處理。 Axios內部維護了兩個數組,一個用于存儲請求攔截器,另一個用于…

數據庫基礎+增刪查改初階

數據庫基礎增刪查改初階 一。數據庫操作 1.概念: 一個mysql服務器上有很多的表,把有關系的表放在一起就構成了一個數據集合,此時稱為“數據庫”,一個mysql1服務器上可以有多個這樣的數據庫 2.創建數據庫: create …

穩住!一招制勝:打造JavaScript防抖函數的終極指南【含代碼示例】

穩住!一招制勝:打造JavaScript防抖函數的終極指南【含代碼示例】 防抖函數:概念與作用基礎實現:案例一簡單防抖函數使用示例 進階功能:案例二 - 立即執行版本性能優化與安全考量實戰技巧與問題排查實際問題與解決方案結…