Oracle
 sql >> база данни >  >> RDS >> Oracle

Модифициране на PLSQL функция за връщане на множество редове от една и съща колона

трябва да направите някои промени във вашата функция. от страна на java ще бъде просто изберете

  • трябва да промените типа на вашата функция от int към collection прочетете за табличните функции тук Табични функции
  • потребителски оракул table() функция за преобразуване на резултата от вашата функция в таблица, позволява ви да използвате функцията си в заявки. прочетете повече за синтаксиса тук:Колекции от таблици:Примери

тук е примерът как да извикате функцията си от java:

select t.column_value as process_id 
      from  table(FUNCTION_1(1)) t

--result
    PROCESS_ID
1   1
2   2


--we need create new type - table of integers
CREATE OR REPLACE TYPE t_process_ids IS TABLE OF int;

--and make changes in function
CREATE OR REPLACE FUNCTION FUNCTION_1(
    c_id IN INT)
  RETURN t_process_ids
AS
  l_ids  t_process_ids := t_process_ids();
BEGIN
  --here I populated result of select into the local variables
  SELECT process.id
  bulk collect into l_ids
  FROM PROCESS
  WHERE process.corporate_id = c_id
  ORDER BY process.corporate_id;

  --return the local var
  return l_ids;
END FUNCTION_1;

--the script that I used for testing
create table process(id int, corporate_id int, date_created date);
insert into process values(1, 1, sysdate);
insert into process values(2, 1, sysdate);
insert into process values(3, 2, sysdate);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Списък на таблица и колони в едно изявление

  2. ORA-12170:TNS:Възникна изчакване на връзката

  3. ORA-00942:таблица или изглед не съществува с Spring JDBC шаблон в Spring Boot

  4. Каква е разликата между хеш присъединяване и обединяване с обединяване (Oracle RDBMS)?

  5. Как да използвате таблица с числа в оператора SELECT INTO