將具有超過 100 個引數的 Oracle 函數和程序遷移至 PostgreSQL - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將具有超過 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 服務

其他服務

  • Oracle SQL 開發人員是整合的開發環境,可簡化傳統和雲端部署中 Oracle 資料庫的開發和管理。

  • pgAdmin 是 Postgre 的開放原始碼管理工具SQL。它提供圖形界面,可協助您建立、維護和使用資料庫物件。

最佳實務

請確定您建立的資料類型符合來源 Oracle 函數或程序中包含的類型欄位。

史詩

任務描述所需的技能

建立或識別具有超過 100 個引數的現有 Oracle/PLSQL 函數或程序。

建立具有超過 100 個引數的 Oracle/PLSQL 函數或程序。

-或-

識別具有超過 100 個引數的現有 Oracle/PLSQL 函數或程序。

如需詳細資訊,請參閱 Oracle 資料庫文件中的第 14.7 CREATEFUNCTION陳述式14.11 CREATEPROCEDURE陳述式

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 函數。

建立包含新TYPE引數的 PostgreSQL 函數。

若要檢閱範例函數,請參閱此模式的其他資訊區段。

PostgreSQL PL/pgSQL 知識

編譯 PostgreSQL 函數。

在 Postgre 中編譯 函數SQL。如果新的資料類型欄位符合來源函數或程序的引數,則函數會成功編譯。

PostgreSQL PL/pgSQL 知識

執行 PostgreSQL 函數。

執行 PostgreSQL 函數。

PostgreSQL PL/pgSQL 知識

故障診斷

問題解決方案

函數傳回下列錯誤:

ERROR:<statement> 附近的語法錯誤

確定函數的所有陳述式都以分號 () 結尾;

函數傳回下列錯誤:

ERROR:「<variable>」不是已知的變數

確定函數內文中使用的變數已列在函數的DECLARE區段中。

相關資源

其他資訊

包含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;