我有类似的东西:
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中传递关联数组作为参数?
答案 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 强>