Oracle функций могут быть сколь угодно сложными, и вы можете применять столько logi c, сколько захотите. Очень простой c пример функции с logi c внутри
- Функция допускает только два параметра, один как varchar, а другой как число
- C2 может быть только A или B. Другое значение является ошибкой
- Функция, основанная на этом, возвращает число, которое является суммой c1 +10, если это A, +100, если это B.
Давайте заставим это работать
SQL> create or replace function my_example ( c1 in number , c2 in varchar2 ) return
number
is
begin
if c2 = 'A'
then
return c1 + 10 ;
elsif c2 = 'B'
then
2 3 4 5 6 7 8 9 return c1 + 100 ;
else
raise_application_error ( -20001, 'c1 only allows A or B' );
10 11 12 end if;
end;
13 14 /
Function created.
SQL> select my_example( 1 , 'A' ) from dual ;
MY_EXAMPLE(1,'A')
-----------------
11
SQL> select my_example( 1 , 'B' ) from dual ;
MY_EXAMPLE(1,'B')
-----------------
101
SQL>
UPDATE
Если вы хотите вернуть любое количество строк, используйте return varchar2
SQL> create or replace function my_example ( c1 in number , c2 in varchar2 ) return varchar2
2 is
3 begin
if c2 = 'A'
then
return c1 + 10 ;
4 5 6 7 elsif c2 = 'B'
8 then
9 return c1 + 100 ;
10 elsif c2= 'C'
then
return 'Alfa' ;
11 12 13 else
raise_application_error ( -20001, 'c1 only allows A or B' );
end if;
end;
/ 14 15 16 17
Function created.
SQL> select my_example( 1 , 'C' ) from dual ;
MY_EXAMPLE(1,'C')
--------------------------------------------------------------------------------
Alfa
SQL> select my_example( 1 , 'A' ) from dual ;
MY_EXAMPLE(1,'A')
--------------------------------------------------------------------------------
11
SQL> select my_example( 1 , 'B' ) from dual ;
MY_EXAMPLE(1,'B')
--------------------------------------------------------------------------------
101
Затем вы также можете применить (начиная с версии 12.2) стандартную функцию VALIDATE_CONVERSION
, чтобы определить, является ли возврат исходной функции строкой или числом.
SQL> select validate_conversion ( my_example( 1 , 'B' ) as number ) from dual ;
VALIDATE_CONVERSION(MY_EXAMPLE(1,'B')ASNUMBER)
----------------------------------------------
1
SQL> select validate_conversion ( my_example( 1 , 'C' ) as number ) from dual ;
VALIDATE_CONVERSION(MY_EXAMPLE(1,'C')ASNUMBER)
----------------------------------------------
0
SQL>
1 означает истинное число, 0 означает, что это не число