2016-10-07 5 views
1

Я хочу вернуть varray из функции oracle, но я не знаю, как это сделать. Вот что я пробовал.вернуть varray из функции oracle

set serveroutput on; 
declare 
    type array_t is varray(2) of number; 
CREATE OR REPLACE FUNCTION func() return array_t 
begin 
    array array_t :=array_t(0,0); 
    array(1):=3; 
    array(2):=20; 
    return array; 
end; 

ответ

2

Hier является правильным синтаксисом для функции

create type array_t is varray(2) of number; 
/

CREATE OR REPLACE FUNCTION func return array_t 
IS 
    v_array array_t; 
begin 
    v_array :=array_t(0,0); 
    v_array(1):=3; 
    v_array(2):=20; 
    return v_array; 
end; 
/

вы можете вызвать функцию, например, в анонимном блоке PLSQL

declare 
    v_func_result array_t; 
begin 

v_func_result := func(); 

dbms_output.put_line(v_func_result(1)); 
dbms_output.put_line(v_func_result(2)); 
end; 
/
+0

@ schurik может у пожалуйста, также приведен пример о том, как вызвать эту функцию. –

+0

выберите func из dual; – XING

+0

@XING Я имею в виду, когда пытаюсь вызвать функцию, подобную этой v_array: = func(); Я получаю ошибку. –

1

Вам не нужно объявить процедуру область SQL; вы можете объявить его как nested sub-program in an anonymous PL/SQL block:

SET SERVEROUTPUT ON; 

DECLARE 
    TYPE array_t IS VARRAY(2) OF NUMBER; 

    data array_t; 

    FUNCTION func RETURN array_t IS BEGIN RETURN array_t(3, 20); END func; 
BEGIN 
    data := func(); 
    DBMS_OUTPUT.PUT_LINE('(' || data(1) || ', ' || data(2) || ')'); 
END; 
/
Смежные вопросы