簡體   English   中英

將 postgresql 函數轉換為 oracle

[英]converting postgresql functions to oracle

我需要在我工作的產品中支持 postgresql 和 oracle。當我們在 oracle 上安裝我們的數據庫時,我們沒有給予“創建類型”的權限。 所以我不確定如何將以下兩種情況轉換為 oracle:

  1. 返回數組的函數

     create or replace function get_array_of_integers(i_param int) returns integer[] as $body$ declare array_of_integers int[]; begin select case when i_param = 1 then array[1] when i_param = 2 then array[1, 2, 3, 4] when i_param = 3 then array[5, 6] else array[]::integer[] end into array_of_integers; return array_of_integers; end; $body$ language 'plpgsql' volatile cost 100;

第二種情況:接受整數數組的函數:

create or replace function some_function(params int[])
 ...

您可以使用 Oracle 的內置集合類型sys.odcinumberlist

你的功能相當於。

CREATE OR REPLACE FUNCTION get_array_of_integers(i_param INT)
RETURN sys.odcinumberlist
AS
  array_of_integers sys.odcinumberlist := NEW sys.odcinumberlist() ; --Initialization
BEGIN
    IF i_param = 1 THEN
      array_of_integers.EXTEND(1); 
      array_of_integers(1) := 1;
    ELSIF i_param = 2 THEN
      array_of_integers.EXTEND(4);--appends 4 null elements to a collection
      array_of_integers(1) := 1; --assign elements
      array_of_integers(2) := 2;
      array_of_integers(3) := 3;
      array_of_integers(4) := 4;
    ELSIF i_param = 3 THEN
      array_of_integers.EXTEND(2);
      array_of_integers(1) := 5;
      array_of_integers(2) := 6;
    END IF;

   RETURN array_of_integers;
END;
/  

您可以在查詢中使用TABLE函數從該表中進行選擇。

SQL> select * FROM TABLE(get_array_of_integers(2));

COLUMN_VALUE
------------
           1
           2
           3
           4

SQL> select * FROM TABLE(get_array_of_integers(0));

no rows selected

對於 Oracle 12.2 及更高版本,您不需要TABLE函數,您可以直接從您的函數中進行選擇。

select * FROM get_array_of_integers(3);

第二種情況可能是這樣的。

 CREATE OR REPLACE FUNCTION some_function( params sys.odcinumberlist )
 RETURN INTEGER
 AS
 BEGIN
   RETURN 1;
 END;
 /

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM