Oracle中的关联数组作为参数

时间:2016-05-13 16:25:09

标签: sql oracle plsql associative-array sql-function

我有类似的东西:

TYPE MyType IS TABLE OF VARCHAR2(10) INDEX BY VARCHAR2(10);

我如何在像

这样的函数中使用它
function TestFunction
(
 Input    in   MyType 
) return number;

作为参数?

TestFunction(MyType('Value1','Value2'));

这样的东西 由于我需要密钥,因此无法工作 - >值定义如

TestFunction(MyType('key1': 'value1', 'key2': 'value2'));

如何在Oracle中传递关联数组作为参数?

2 个答案:

答案 0 :(得分:2)

这是一种简单的方法:

SQL> set serveroutput on
SQL> declare
  2      TYPE MyType IS TABLE OF VARCHAR2(10) INDEX BY VARCHAR2(10);
  3      myVar MyType;
  4      function TestFunction
  5      (
  6       Input    in   MyType
  7      ) return number is
  8      begin
  9          return Input.count;
 10      end;
 11
 12  begin
 13      myVar(1) := 'one';
 14      myVar(2) := 'two';
 15      myVar('three') := 'THREE';
 16      dbms_output.put_line(TestFunction(myVar));
 17  end;
 18  /
3

PL/SQL procedure successfully completed.

答案 1 :(得分:0)

Oracle 18c介绍Qualified Expressions

  

合格的表达式提供了以紧凑的形式声明和定义复杂值的能力,从而提高了程序的清晰度和开发人员的工作效率。

     

限定表达式组合表达式元素以创建RECORD类型或关联数组类型的值。

     

限定表达式使用显式类型指示来提供限定项的类型。

DECLARE
    TYPE MyType IS TABLE OF VARCHAR2(10) INDEX BY VARCHAR2(10);

    FUNCTION TestFunction(Input IN MyType) RETURN NUMBER
    IS
    BEGIN
        RETURN Input.Count;
    END;
BEGIN
    DBMS_OUTPUT.put_line(TestFunction(MyType('Ind1' => 1, 'Ind2' => 2)));
END;
/
-- output:
-- 2

从集合中创建类型(varray)和直接SELECT

CREATE OR REPLACE TYPE MyType is varray(10) of integer;
/

SELECT *
FROM MyType(1,2,3);
-- Output:
COLUMN_VALUE
===========
1
2
3

或作为默认参数:

CREATE OR REPLACE FUNCTION MyFunc(Input IN MyType DEFAULT MyType(1,2,3)) 
RETURN NUMBER
IS
BEGIN
   RETURN Input.Count;
END;
/

SELECT MyFunc FROM dual;
-- Output:
MYFUNC
======
3

<强> db<>fiddle demo