本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將具有超過 100 個引數的 Oracle 函數和程序遷移至 PostgreSQL
由 Srinivas Potlachervoo 建立 (AWS)
環境:PoC 或試行 | 來源:Oracle | 目標:PostgreSQL |
R 類型:Replatform | 工作負載:開放原始碼;Oracle | 技術:資料庫;遷移 |
AWS 服務:Amazon RDS;Amazon Aurora |
Summary
此模式說明如何將具有超過 100 個引數的 Oracle 資料庫函數和程序遷移至 Postgre SQL。例如,您可以使用此模式將 Oracle 函數和程序遷移至下列其中一個 Postgre SQL相容AWS資料庫服務:
Postgre 的 Amazon Relational Database Service (Amazon RDS)SQL
Amazon Aurora Postgre SQL- 相容版本
PostgreSQL 不支援具有超過 100 個引數的函數或程序。作為解決方法,您可以定義具有符合來源函數引數之類型欄位的新資料類型。然後,您可以建立和執行 PL/pgSQL 函數,使用自訂資料類型作為引數。
先決條件和限制
先決條件
產品版本
Amazon RDS Oracle 資料庫執行個體 10.2 版及更新版本
Amazon RDS PostgreSQL 資料庫執行個體 9.4 版及更新版本,或 Aurora Postgre SQL- 相容資料庫執行個體 9.4 版及更新版本
Oracle SQL 開發人員第 18 版及更新版本
pgAdmin 第 4 版及更新版本
架構
來源技術堆疊
Amazon RDS Oracle 資料庫執行個體 10.2 版及更新版本
目標技術堆疊
Amazon RDS PostgreSQL 資料庫執行個體 9.4 版及更新版本,或 Aurora Postgre SQL- 相容資料庫執行個體 9.4 版及更新版本
工具
AWS 服務
PostgreSQL 的 Amazon Relational Database Service (Amazon RDS) 可協助您在 AWS Cloud 中設定、操作和擴展 PostgreSQL 關聯式資料庫。
Amazon Aurora Postgre SQL-Compatible Edition 是完全受管且ACID合規的關聯式資料庫引擎,可協助您設定、操作和擴展 PostgreSQL 部署。
其他服務
Oracle SQL 開發人員
是整合的開發環境,可簡化傳統和雲端部署中 Oracle 資料庫的開發和管理。 pgAdmin
是 Postgre 的開放原始碼管理工具SQL。它提供圖形界面,可協助您建立、維護和使用資料庫物件。
最佳實務
請確定您建立的資料類型符合來源 Oracle 函數或程序中包含的類型欄位。
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
建立或識別具有超過 100 個引數的現有 Oracle/PLSQL 函數或程序。 | 建立具有超過 100 個引數的 Oracle/PLSQL 函數或程序。 -或- 識別具有超過 100 個引數的現有 Oracle/PLSQL 函數或程序。 如需詳細資訊,請參閱 Oracle 資料庫文件中的第 14.7 CREATEFUNCTION陳述式 | Oracle/PLSQL 知識 |
編譯 Oracle/PLSQL 函數或程序。 | 編譯 Oracle/PLSQL 函數或程序。 如需詳細資訊,請參閱 Oracle 資料庫文件中的編譯函數 | Oracle/PLSQL 知識 |
執行 Oracle/PLSQL 函數。 | 執行 Oracle/PLSQL 函數或程序。然後,儲存輸出。 | Oracle/PLSQL 知識 |
任務 | 描述 | 所需的技能 |
---|---|---|
在 Postgre 中定義新的資料類型SQL。 | 在 PostgreSQL 中定義新資料類型,其中包含出現在來源 Oracle 函數或程序引數中的所有相同欄位。 如需詳細資訊,請參閱 PostgreSQL 文件CREATETYPE | PostgreSQL PL/pgSQL 知識 |
任務 | 描述 | 所需的技能 |
---|---|---|
建立包含新資料類型的 PostgreSQL 函數。 | 建立包含新 若要檢閱範例函數,請參閱此模式的其他資訊區段。 | PostgreSQL PL/pgSQL 知識 |
編譯 PostgreSQL 函數。 | 在 Postgre 中編譯 函數SQL。如果新的資料類型欄位符合來源函數或程序的引數,則函數會成功編譯。 | PostgreSQL PL/pgSQL 知識 |
執行 PostgreSQL 函數。 | 執行 PostgreSQL 函數。 | PostgreSQL PL/pgSQL 知識 |
故障診斷
問題 | 解決方案 |
---|---|
函數傳回下列錯誤: ERROR:<statement> 附近的語法錯誤 | 確定函數的所有陳述式都以分號 () 結尾 |
函數傳回下列錯誤: ERROR:「<variable>」不是已知的變數 | 確定函數內文中使用的變數已列在函數的 |
相關資源
使用 Amazon Aurora PostgreSQL (Amazon Aurora Aurora 使用者指南)
CREATE TYPE
(後方SQL文件)
其他資訊
包含TYPE引數的 PostgreSQL 函數範例
CREATE OR REPLACE FUNCTION test_proc_new ( IN p_rec type_test_proc_args ) RETURNS void AS $BODY$ BEGIN /* ************** The body would contain code to process the input values. For our testing, we will display couple of values. *************** */ RAISE NOTICE USING MESSAGE = CONCAT_WS('', 'p_acct_id: ', p_rec.p_acct_id); RAISE NOTICE USING MESSAGE = CONCAT_WS('', 'p_ord_id: ', p_rec.p_ord_id); RAISE NOTICE USING MESSAGE = CONCAT_WS('', 'p_ord_date: ', p_rec.p_ord_date); END; $BODY$ LANGUAGE plpgsql COST 100;