Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Select u PLSQL-u gde je uslov sadrzaj iz table type-a

[es] :: Oracle :: Select u PLSQL-u gde je uslov sadrzaj iz table type-a

[ Pregleda: 2146 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

GORSHTAK
Ivan Matić

Član broj: 136182
Poruke: 285
*.adsl.verat.net.



+5 Profil

icon Select u PLSQL-u gde je uslov sadrzaj iz table type-a26.05.2011. u 21:00 - pre 156 meseci
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?
 
Odgovor na temu

darkosos
Darko Šoš
Beograd

Član broj: 5053
Poruke: 1131
*.dynamic.isp.telekom.rs.



+64 Profil

icon Re: Select u PLSQL-u gde je uslov sadrzaj iz table type-a27.05.2011. u 07:51 - pre 156 meseci
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
 
Odgovor na temu

brzak

Član broj: 66407
Poruke: 126



+5 Profil

icon Re: Select u PLSQL-u gde je uslov sadrzaj iz table type-a27.05.2011. u 08:17 - pre 156 meseci
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;


 
Odgovor na temu

brzak

Član broj: 66407
Poruke: 126



+5 Profil

icon Re: Select u PLSQL-u gde je uslov sadrzaj iz table type-a27.05.2011. u 08:58 - pre 156 meseci
Mozda ne mora cast, samo select * from TABLE (lt_loc )
 
Odgovor na temu

GORSHTAK
Ivan Matić

Član broj: 136182
Poruke: 285
*.adsl.verat.net.



+5 Profil

icon Re: Select u PLSQL-u gde je uslov sadrzaj iz table type-a27.05.2011. u 21:14 - pre 156 meseci
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
 
Odgovor na temu

GORSHTAK
Ivan Matić

Član broj: 136182
Poruke: 285
*.adsl.verat.net.



+5 Profil

icon Re: Select u PLSQL-u gde je uslov sadrzaj iz table type-a03.06.2011. u 21:21 - pre 156 meseci
Uradio sam test, izvršilo se 5x brže nego da otvaram i zatvaram kursore.
Još ako postoji način bez kreiranja tipa, neka mi neko javi :)
Hvala
 
Odgovor na temu

[es] :: Oracle :: Select u PLSQL-u gde je uslov sadrzaj iz table type-a

[ Pregleda: 2146 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.