banjalukaforum.com

Dobrodošli na banjalukaforum.com
Danas je 01 Jun 2024, 03:35

Sva vremena su u UTC [ DST ]




Započni novu temu Odgovori na temu  [ 12 Posta ] 
Autoru Poruka
 Tema posta: PL-SQL pomoc
PostPoslato: 15 Sep 2013, 09:53 
OffLine
Majstorski kandidat
Majstorski kandidat
Korisnikov avatar

Pridružio se: 07 Apr 2009, 12:08
Postovi: 300
Pozz, jel ima neko strucan u PL-SQLu, treba mi neka pomoc, da napravim CRUD matricu za koristenu funkciju, da me pogura sa par savjeta, necu ostati duzan :))


Vrh
 Profil  
 
 Tema posta: Re: PL-SQL pomoc
PostPoslato: 26 Sep 2013, 22:25 
OffLine
Veteran
Veteran

Pridružio se: 01 Jul 2004, 11:47
Postovi: 2597
Sta ti treba tacno?

_________________
Sve sto sam napisao, slucajno je namjerno ...


Vrh
 Profil  
 
 Tema posta: Re: PL-SQL pomoc
PostPoslato: 28 Sep 2013, 19:56 
OffLine
Majstorski kandidat
Majstorski kandidat
Korisnikov avatar

Pridružio se: 07 Apr 2009, 12:08
Postovi: 300
Pravim CRUD matricu funkcije, i sad na kraju moram da izbacim dupla polja iz tabele, tj kolone koje se preklapaju da izbacim a ostale kolone u tom redu da spojim, znam da je nesto oko MERGE operacije ali jos nisam uspio da prokuzim kako da je postavim. Mogu i kod u pm da ti posaljem da pogledas.


Vrh
 Profil  
 
 Tema posta: Re: PL-SQL pomoc
PostPoslato: 30 Sep 2013, 00:06 
OffLine
Veteran
Veteran

Pridružio se: 01 Jul 2004, 11:47
Postovi: 2597
Nista ja tebe ne razumijem :)
Nemoj mi slati PM, nego okaci ovdje, pa cemo zajedno do rjesenja ...

_________________
Sve sto sam napisao, slucajno je namjerno ...


Vrh
 Profil  
 
 Tema posta: Re: PL-SQL pomoc
PostPoslato: 30 Sep 2013, 12:42 
OffLine
Majstorski kandidat
Majstorski kandidat
Korisnikov avatar

Pridružio se: 07 Apr 2009, 12:08
Postovi: 300
Da uprostim problem, korak po korak :)

Evo ovako, recimo da u stringu koji mi je source kod funkcije trazim sve insert komande, da ih ubacim u privremenu tabelu koja ce mi sluziti na kraju za ispis matrice. Ovo mi omogucava da nadjem prvu pojavu komande insert i posle nje riječ into mi daje tabelu na koju se odnosi insert.
E sad, kako da od ovoga napravim petlju koja ce mi vrtiti do kraja stringa i traziti komandu insert i i kljucnu rijec into poslije nje.


Kod:
v_check := instr2(v_string_fnc, 'INSERT ');

if v_check > 0 then
 
    insert_flag  := 'C';
    v_check      := instr2(v_string_fnc, 'INTO ', v_check);
    v_check      := v_check + 5;
    result_table := substr(v_string_fnc, v_check);
    result_table := substr(result_table, 0, instr(result_table, ' '));
    result_table := rtrim(result_table);
 
    merge into result_set
    using dual
    on (tables_used = result_table)
    when matched then
      update set create_operation = insert_flag
    when not matched then
      insert
        (tables_used, create_operation)
      values
        (result_table, insert_flag);


Vrh
 Profil  
 
 Tema posta: Re: PL-SQL pomoc
PostPoslato: 30 Sep 2013, 16:13 
OffLine
Veteran
Veteran

Pridružio se: 01 Jul 2004, 11:47
Postovi: 2597
Bez detaljnog uvida u tvoj source kôd, evo ti odokativni primjer, pa vidi, moze li ti pomoci:

Kod:
create table dummy1(id number, value varchar2(128));

create table dummy2(id number, value varchar2(128));

create table result_set(tables_used varchar2(30), create_operation varchar2(16));

CREATE OR REPLACE FUNCTION test(
   p_id IN NUMBER,
   p_value IN VARCHAR2,
   p_id2 IN NUMBER,
   p_value2 IN VARCHAR2)
RETURN NUMBER
AS
BEGIN
  INSERT INTO dummy1(id, value)
  VALUES(p_id, p_value);
               
  INSERT INTO dummy2(id, value)
  VALUES(p_id2, p_value2);
END test;
/

declare
  lvTableFound VARCHAR2(32);
begin
  FOR func_rec IN (select text
                      from user_source
                     where name = 'TEST'
                       and type = 'FUNCTION'
                     order by line)
  LOOP           
    IF INSTR(func_rec.text, 'INSERT') > 0 THEN
      select UPPER(regexp_replace(func_rec.text, '.*(INSERT([[:blank:]]+)INTO([[:blank:]]+))([[:alnum:]]+)(.*)', '\4')) into lvTableFound from dual;
     
      dbms_output.put_line('found: '|| lvTableFound);
     
      merge into result_set
      using (select lvTableFound as result_table from dual)
      on (tables_used = result_table)
      when matched then
        update set create_operation = 'INSERT'
      when not matched then
        insert
          (tables_used, create_operation)
        values
          (result_table, 'INSERT');
         
    END IF;
  END LOOP;         
end;
/

_________________
Sve sto sam napisao, slucajno je namjerno ...


Vrh
 Profil  
 
 Tema posta: Re: PL-SQL pomoc
PostPoslato: 30 Sep 2013, 16:36 
OffLine
Majstorski kandidat
Majstorski kandidat
Korisnikov avatar

Pridružio se: 07 Apr 2009, 12:08
Postovi: 300
Eo istestiracu sad, imam neki error sa regexp-om ovdje.


Vrh
 Profil  
 
 Tema posta: Re: PL-SQL pomoc
PostPoslato: 30 Sep 2013, 17:31 
OffLine
Majstorski kandidat
Majstorski kandidat
Korisnikov avatar

Pridružio se: 07 Apr 2009, 12:08
Postovi: 300
Nema sanse bar kod mene da se ovo izvrti, vec pet minuta stoji executing sa samo jednom petljom.


Vrh
 Profil  
 
 Tema posta: Re: PL-SQL pomoc
PostPoslato: 01 Okt 2013, 09:34 
OffLine
Majstorski kandidat
Majstorski kandidat
Korisnikov avatar

Pridružio se: 07 Apr 2009, 12:08
Postovi: 300
E skuzio sam, tj imao sam malu pomoc. Nakon prve provjere i sjeckanja stringa, treba taj ostatak staviti u jednu varijablu i napraviti da while > 0 loop i to je to, moram jos popraviti parser, da napisem izraze da bas pogode to sto trebaju gadjati.


Vrh
 Profil  
 
 Tema posta: Re: PL-SQL pomoc
PostPoslato: 02 Okt 2013, 13:11 
OffLine
Majstorski kandidat
Majstorski kandidat
Korisnikov avatar

Pridružio se: 07 Apr 2009, 12:08
Postovi: 300
Mala promjena, trebam umjesto fizicke tabele koristiti TYPE RECORD i njega sam napravio

Kod:
TYPE results_rec IS record (
 
  table_ varchar2(40),
  create_ char(1) := '-',
  read_ char(1) := '-',
  update_ char(1) := '-',
  delete_ char(1) := '-');


i kasnije

Kod:
Type varray_res is varray(100) of results_rec;
 
    va1 varray_res;
   
  TYPE results_tab IS TABLE of varray_res INDEX BY VARCHAR2;


Kako da kasnije napravim da mi ubacuje rezultate u niz rezultata, i u slucaju da dodje do istog imena tabele npr da mi ubaci samo ostale parametre C, R. To me buni malo sada.


Vrh
 Profil  
 
 Tema posta: Re: PL-SQL pomoc
PostPoslato: 04 Okt 2013, 08:39 
OffLine
Majstorski kandidat
Majstorski kandidat
Korisnikov avatar

Pridružio se: 07 Apr 2009, 12:08
Postovi: 300
Napravio sam da radi, ako nekome bude trebala pomoc oko ovoga nek se javi, pa cu pomoci koliko budem znao.


Vrh
 Profil  
 
 Tema posta: Re: PL-SQL pomoc
PostPoslato: 09 Okt 2013, 11:09 
OffLine
Majstorski kandidat
Majstorski kandidat
Korisnikov avatar

Pridružio se: 07 Apr 2009, 12:08
Postovi: 300
Jos jedna nedoumica na koju sam naletio, npr da li je moguće da se napravi varray sa izrazima koje bi mi bile kljucne riječi,

npr commands_type is varray(5) of varchar2(1000);

i onda kazem commands commands_type;

commands := commands_type('DROP TABLE ', 'INSERT INTO ', 'DELETE FROM ');

Je li moguce to tako napraviti, da mi u stringu pretrage bude

v_check := INSTR2(string_za_pretragu, commands(i); ?

Da generalizujem postupak koji mi radi ovaj ovde dio koda:

Kod:
v_check := INSTR2(v_string_fnc, 'UPDATE ');
  string_to_parse := v_string_fnc;
  WHILE v_check > 0 LOOP
      v_check := INSTR2(string_to_parse, 'UPDATE ');
      IF v_check > 0 THEN
      v_check := INSTR2(string_to_parse, 'UPDATE ', v_check) + 7;
      result_table := SUBSTR(string_to_parse, v_check);
      string_to_parse := result_table;
      result_table := RTRIM(SUBSTR(result_table,
                                   0,
                                   INSTR(result_table, ' ')));
      table_indx := result_table;
      tab_res(table_indx).table_ := result_table;
      tab_res(table_indx).update_ := 'U';
        end if;
  end loop;


Da umjesto četri ova dijela koda imam samo jedan blok koji će ovo maksimalno optimizovati i odraditi?


Vrh
 Profil  
 
Prikaži postove u poslednjih:  Poređaj po  
Započni novu temu Odgovori na temu  [ 12 Posta ] 

Sva vremena su u UTC [ DST ]


Ko je OnLine

Korisnici koji su trenutno na forumu: Nema registrovanih korisnika i 1 gost


Ne možete postavljati nove teme u ovom forumu
Ne možete odgovarati na teme u ovom forumu
Ne možete monjati vaše postove u ovom forumu
Ne možete brisati vaše postove u ovom forumu
Ne možete slati prikačene fajlove u ovom forumu

Pronađi:
Idi na:  
Powered by phpBB® Forum Software © phpBB Group
Hosting BitLab
Prevod - www.CyberCom.rs