sql >> Databáze >  >> RDS >> Oracle

Úprava funkce PLSQL pro návrat více řádků ze stejného sloupce

musíte provést nějaké změny ve své funkci. na straně Java to bude jednoduché vybrat

  • potřebujete změnit typ funkce z int do collection přečtěte si o tabulkových funkcích zde Tabulkové funkce
  • uživatel oracle table() funkce pro převod výsledku vaší funkce na tableit vám umožní používat vaši funkci v dotazech. více o syntaxi si přečtěte zde:Sbírky tabulek:příklady

zde je příklad, jak zavolat vaši funkci z 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. Výjimka v hlavním vláknu java.lang.IncompatibleClassChangeError:Bylo nalezeno rozhraní org.apache.hadoop.mapreduce.JobContext, ale třída byla očekávána?

  2. bundle exec rake assets:precompile - konfigurace databáze nespecifikuje adaptér

  3. Zobrazte hodnoty polí tabulky Mysql v poli Vybrat

  4. problém s kódováním při importu json do Postgresu