• 5 odgovora
  • 2.853 pregleda
Select u PLSQL-u gde je uslov sadrzaj iz table type-a 26.05.2011. u 21:00 · pre 187 meseci #1
Cilj mi je da rezultat kursora, a na kraju i neki update, odradim pomoću nekog niza (type) pošto verujem da će se tako brže izvršiti nego da obrađujem podatak jedan po jedan i tako svaki put otvaram i zatvaram kursor.

Code:

create or replace procedure proc_test is 
    type t_loc is table of varchar2(30);
    lt_loc t_loc;

    -- Cilj mi je da izvedem ovako nesto
    cursor cr1 (cp_tab in t_loc) is  
        select *
        from tabela
        where id in cp_tab;   
    r1 cr1%rowtype;
    
    --  Kursor koji sada koristim
    cursor cr2 (cp_id in number) is 
        select *
        from tabela
        where id = cp_id;  
    r2 cr2%rowtype;

begin
    lt_loc := new t_loc();

/*
 Ovde formiram sadrzaj u lt_loc
*/

    for r1 in cr1(lt_loc) loop
     ---   NESTO RADIM SA RECORDIMA
    end loop;
    
    --  Na kraju mi je cilj ovako nesto
    update tabela
      set kolona1 = 'neki podatak'
      where id in lt_loc;
    
end proc_test;


Da li je izvodljivo ovako nešto?
Re: Select u PLSQL-u gde je uslov sadrzaj iz table type-a 27.05.2011. u 07:51 · pre 187 meseci #2
Trebalo bi da moze sa FORALL. Evo ti primer iz PL/SQL reference-a:
Code:

CREATE TABLE employees_temp AS SELECT * FROM employees;
DECLARE
   TYPE NumList IS VARRAY(10) OF NUMBER;
   depts NumList := NumList(5,10,20,30,50,55,57,60,70,75);
BEGIN
   FORALL j IN 4..7  -- use only part of varray
      DELETE FROM employees_temp WHERE department_id = depts(j);
   COMMIT;
END;
/

Using the FORALL statement
Re: Select u PLSQL-u gde je uslov sadrzaj iz table type-a 27.05.2011. u 08:17 · pre 187 meseci #3
Probaj ovako nesto:

create or replace TYPE t_loc aS TABLE OF VARCHAR2 (30);

---

DECLARE
-- TYPE t_loc IS TABLE OF VARCHAR2 (30);

lt_loc t_loc;

-- Cilj mi je da izvedem ovako nesto
cursor cr1 (
cp_tab IN t_loc
)
IS
SELECT *
FROM tabela
WHERE ID IN (select * from TABLE (CAST (cp_tab AS t_loc)));

r1 cr1%ROWTYPE;

-- Kursor koji sada koristim
/* CURSOR cr2 (
cp_id IN NUMBER
)
IS
SELECT *
FROM tabela
WHERE ID = cp_id;

r2 cr2%ROWTYPE;*/
BEGIN
lt_loc := new t_loc();

/*

Ovde formiram sadrzaj u lt_loc

*/
FOR r1 IN cr1 (lt_loc)
LOOP
--- NESTO RADIM SA RECORDIMA
END LOOP;


-- Na kraju mi je cilj ovako nesto
UPDATE tabela
SET kolona1 = 'neki podatak'
WHERE ID IN (select * from TABLE (CAST (lt_loc AS t_loc)));
END;


Re: Select u PLSQL-u gde je uslov sadrzaj iz table type-a 27.05.2011. u 21:14 · pre 187 meseci #5
Citat:
brzak: Probaj ovako nesto:
create or replace TYPE t_loc aS TABLE OF VARCHAR2 (30);


Više bih hteo da izbegnem kreiranje tipa, ali ako nemam drugog izbora, onda nema veze, niz stringova može i kasnije da posluži na nešto.

varray... moram unapred da definišem neki niz, a ne znam koliko podataka mogu da dobijem za obradu...
forall i depts(j) imam osećaj kao da radi jedan po jedan, ko zna možda i jeste brže.

Svejedno, u toku sledeće nedelje ću moći da testiram, pa javljam da li je ubrzalo...
Hvala na odgovorima ;)
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme