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

Matrica CRUD Pl-Sql

[es] :: Oracle :: Matrica CRUD Pl-Sql

[ Pregleda: 5456 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

bluvulture
Nebojsan
Banja di Lucca

Član broj: 172860
Poruke: 7
*.teol.net.

Sajt: www.blc.edu.ba


+2 Profil

icon Matrica CRUD Pl-Sql16.09.2013. u 07:36 - pre 128 meseci
Postovanje,

treba mi pomoc oko zadatka sa CRUD (Create, Read, Update delete) matricom, naime, treba da iščitam source code svoje funkcije, te da odredim kojim je sve tabelama ova funkcija pristupila sa svim SQL upitima i da rezultat otprintam u DBMS_OUTPUT u CRUD matrici. Napravio sam da mi iščita kod, sad imam neku ideju kako da to dalje odradim ali nisam siguran baš, pošto mi je PL/SQL nova stvar, imam ranijeg iskustva u Javi i prethodnog ne baš pretjerano velikog znanja SQL-a.
E sad, poslije ovog dijela koda koji sam odradio, tj iščitavanja funkcije, kako bi mi bilo najbolje da ostale stvari uganjam, da li da pravim petlju da mi pretrazuje text ovaj ili kako?
Sva pomoć je dobrodošla.
Da napomenem da do rezultata moram doci bez koristenja dependecies tabela, vec parsiranjem teksta, tj samog source coda funkcije.
U prilogu kod koji sam koji sam do sad odradio

Code:
CURSOR c_text is SELECT USER_SOURCE.TEXT
                     FROM USER_SOURCE 
                     WHERE USER_SOURCE.name='TEST_FUNCTION' 
                     AND USER_SOURCE.type IN ('FUNCTION');

 v_single_text varchar2(100);
 v_tmp_text varchar2(10000) := ' ';


begin

 open c_text;

 loop
      fetch c_text into v_single_text;
      exit when c_text%notfound;
      v_tmp_text := v_tmp_text||rtrim(v_single_text);
      dbms_output.put_line(v_single_text);
 end loop;
 close c_text;
  
  return(Result);
end test_function;


[Ovu poruku je menjao bluvulture dana 16.09.2013. u 11:02 GMT+1]

[Ovu poruku je menjao bluvulture dana 16.09.2013. u 12:22 GMT+1]
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Matrica CRUD Pl-Sql17.09.2013. u 10:48 - pre 128 meseci
Ovo je nemoguća misija!

A evo i zašto:
Citat:
pošto mi je PL/SQL nova stvar

Citat:
ne baš pretjerano velikog znanja SQL-a

Citat:
parsiranjem teksta


Treba da parsiraš PL/SQL, koji ne znaš, PL/SQL funkcijom (dakle u jeziku koji ne znaš), te da nađeš SQL upite (a ne poznaješ dobro ni SQL) i vidiš na koje objekte se odnose, pa još pri tom ne smeš da koristiš dependencies tabele koje ti ne bi ni dale CRUD, ali bi bar pomogle da vidiš da li si dobro odradio parsiranje. Pri svemu tome, na tvom fakultetu se ni ne uči kako da parsiraš neki jezik (bar na osnovu plana koji sam pogledao).

Pri svemu tome, napisao si funkciju kao primer gde se iz aviona vide bar 4 greške.

1. fali ti prva linija CREATE OR REPLACE FUNCTION test_function RETURN nešto
2. AND USER_SOURCE.type IN ('FUNCTION') - nije greška ali je glupo, treba: AND USER_SOURCE.type ='FUNCTION'
3. fali ti linije u deklaraciji kurzora ORDER BY LINE inače linije teksta uzimaš slučajnim redosledom.
4. v_single_text varchar2(100); Uzimaš kolonu iz tabele koja je varchar2(4000) u varijablu koja je varchar2(100). Jasno je da to ne radi. Treba ili da deklarišeš varijablu kao varchar2(4000) ili kao user_source.text%type
5. spajaš liniju teksta sa prethodnima bez ikakvog separatora. Na primer može da se desi da dobiješ 'beginopen'. Kako misliš da to parsiraš. Treba da ubaciš newline: v_tmp_text := v_tmp_text || chr(10) || rtrim(v_single_text);
6. na kraju vraćaš kao rezultat funkcije nedeklarisanu varijablu: return(Result);

Moj savet: traži od profesora da ti promeni zadatak.
 
Odgovor na temu

bluvulture
Nebojsan
Banja di Lucca

Član broj: 172860
Poruke: 7
*.teol.net.

Sajt: www.blc.edu.ba


+2 Profil

icon Re: Matrica CRUD Pl-Sql17.09.2013. u 11:29 - pre 128 meseci
Odgovorio sam na PM.
LP
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Matrica CRUD Pl-Sql18.09.2013. u 11:20 - pre 128 meseci
Zamolio bih te da ne odgovoraš na PM o stvarima koje se tiču diskusije. Diskusija je javna, pa ako neko prati, može da izgubi kontinuitet toka diskusije, a i ja nemam običaj da odgovoram na PM osim kada je pitanje moguće jedino odgovoriti na PM (recimo, pitanja gde kupiti to i to ne smeju na ovom forumu da se odgovore u dikusiji, nego samo kroz PM).

Dakle, u PM si mi napisao da si popravio program u skladu sa mojim zamerkama, kao i da je delimično tačno ono što sam rekao o tvojim mogućnostima da obradiš ovaj problem o kojem si pisao.

Odmah i da se ispravim u jednoj tački: znak newline se nalazi na poslednjem mestu u svakoj liniji koda zapisanoj u tabeli user_source, pa kod konkatenacije nije potrebno dodavati taj znak.

Što se tiče parsiranja, to je stvarno preširoka tema da bih te na forumu proveo kroz sve cake koje bi ti omogućile da rešiš zadatak.
Ono što mogu da ti preporučim je knjiga Compilers: Principles, Techniques and Tools, odnosno prva četiri poglavlja ove knjige (ili neke slične). Odmah da te upozorim da na netu možeš da nađeš pdf verziju ove knjige koja je jako osakaćena i prektično nemoguća za čitanje. Neko je skenirao knjigu, provukao kroz OCR, pa su se skoro sve slike i dijagrami izgubili, a dosta ima i grešaka u prepoznavanju slova.

Kao pomoć (ali ne i udžbenik za parsiranje) možeš da pogledaš uputstvo za flex (GNU verzija UNIXovog lex-a), kao i bison (što je GNU verzija UNIX yacc kompajlera).
 
Odgovor na temu

bluvulture
Nebojsan
Banja di Lucca

Član broj: 172860
Poruke: 7
*.teol.net.

Sajt: www.blc.edu.ba


+2 Profil

icon Re: Matrica CRUD Pl-Sql18.09.2013. u 11:50 - pre 128 meseci
Zahvaljujem na odgovoru i na datim savjetima, ukoliko uspijem razrijesiti ovaj zadatak napisacu kod i objasnjenje javno na forumu.
Jos jednom hvala.
LP
 
Odgovor na temu

bluvulture
Nebojsan
Banja di Lucca

Član broj: 172860
Poruke: 7
*.teol.net.

Sajt: www.blc.edu.ba


+2 Profil

icon Re: Matrica CRUD Pl-Sql24.09.2013. u 09:00 - pre 128 meseci
E ovako, uspio sam napraviti da mi pravi matricu za moju funkciju, posto je funkcija veoma jednostavna. I to mi sad šljaka kako treba, međutim hoću da napravim da mi bude univerzalna, tj da mi prima funkciju kao parametar i da ju obradjuje. Kod ovoga što sam uradio ide ispod:

Code:

create or replace procedure test_

 IS

  v_string_fnc varchar2(10000) := UPPER('function test_funkcija_nebosja
  
  
  
  Return varchar2
  
  IS
  
    kpp_value varchar2(20);
  
     
  
      begin
  
     
  
      select KPP into kpp_value from CUSTOMER where CUSTOMER_ID = 200713;
  
  
  
      dbms_output.put_line (kpp_value);
  
      
  
  Return kpp_value; 
  
  
  
  end test_funkcija_nebosja;');

  v_check PLS_INTEGER;

  CURSOR c_text is
    SELECT USER_SOURCE.TEXT
      FROM USER_SOURCE
     WHERE USER_SOURCE.name = 'FUNCTION_NAME'
       AND USER_SOURCE.type = 'FUNCTION'
     order by line;

  v_single_text varchar2(4000);
  v_tmp_text    varchar2(10000) := ' ';

  /*v_string      varchar2(10000);*/

  insert_flag char := '-';
  read_flag   char := '-';
  update_flag char := '-';
  delete_flag char := '-';
  underline   char(42) := '==========================================';

  /*v_txt         varchar2(10000) := ' ';*/

  result_table varchar2(1000) := '/';

begin

  /*execute immediate 'create table crud_table_matrix(tables_used varchar2(20), operations_used varchar2(20))';
  insert into crud_table_matrix(tables_used, operations_used) values ('empty', insert_char || read_char || update_char || delete_char);  */

  open c_text;

  loop
    fetch c_text
      into v_single_text;
    exit when c_text%notfound;
    v_tmp_text := v_tmp_text || chr(10) || rtrim(v_single_text);
  
    /* print source code*/
    /*dbms_output.put_line(v_single_text);*/
  
  end loop;

  close c_text;

  dbms_output.put_line(' ');
  dbms_output.put_line('==========' || 'TABLE_NAME' || '==========' ||
                       'OPERATIONS' || '==');
  dbms_output.put_line(' ');
  /*DELETE SEARCH*/

  v_check := instr(v_string_fnc, 'DELETE ');

  if v_check > 0 then
    /*dbms_output.put_line('THERE IS NO DELETE COMMAND');*/
    /*else
    /*dbms_output.put_line('THERE IS A DELETE COMMAND');*/
    delete_flag  := 'D';
    v_check      := instr(v_string_fnc, 'FROM ');
    v_check      := v_check + 5;
    result_table := substr(v_string_fnc, v_check);
    result_table := substr(result_table, 0, instr(result_table, ' '));
    dbms_output.put_line('           ' || result_table || '             ' ||
                         insert_flag || read_flag || update_flag ||
                         delete_flag);
  end if;

  /*SELECT SEARCH*/

  v_check := instr(v_string_fnc, 'SELECT ');
  if v_check > 0 then
    /*dbms_output.put_line('THERE IS NO READ COMMAND');*/
    /*else
    /*dbms_output.put_line('THERE IS A READ COMMAND');*/
    read_flag    := 'R';
    v_check      := instr(v_string_fnc, 'FROM ');
    v_check      := v_check + 5;
    result_table := substr(v_string_fnc, v_check);
    result_table := substr(result_table, 0, instr(result_table, ' '));
    dbms_output.put_line('           ' || result_table || '             ' ||
                         insert_flag || read_flag || update_flag ||
                         delete_flag);
  
  end if;

  /*UPDATE SEARCH*/
  v_check := instr(v_string_fnc, 'UPDATE ');
  if v_check > 0 then
    /*dbms_output.put_line('THERE IS NO UPDATE COMMAND');*/
    /*else
    /*dbms_output.put_line('THERE IS A UPDATE COMMAND');*/
    update_flag  := 'U';
    v_check      := instr(v_string_fnc, 'FROM ');
    v_check      := v_check + 5;
    result_table := substr(v_string_fnc, v_check);
    result_table := substr(result_table, 0, instr(result_table, ' '));
    dbms_output.put_line('           ' || result_table || '             ' ||
                         insert_flag || read_flag || update_flag ||
                         delete_flag);
  
  end if;

  /*INSERT SEARCH*/
  v_check := instr(v_string_fnc, 'INSERT ');
  if v_check > 0 then
    /*dbms_output.put_line('THERE IS NO CREATE COMMAND');*/
    /*else
    /*dbms_output.put_line('THERE IS A CREATE COMMAND');*/
    insert_flag  := 'C';
    v_check      := instr(v_string_fnc, 'FROM ');
    v_check      := v_check + 5;
    result_table := substr(v_string_fnc, v_check);
    result_table := substr(result_table, 0, instr(result_table, ' '));
    dbms_output.put_line('           ' || result_table || '             ' ||
                         insert_flag || read_flag || update_flag ||
                         delete_flag);
  end if;
  /*dbms_output.put_line(' ');
  dbms_output.put_line('==========' || 'TABLE_NAME' || '==========' ||
                       'OPERATIONS' || '==');*/
  /*dbms_output.put_line(empty_space || insert_flag || read_flag ||
  update_flag || delete_flag);*/
  dbms_output.put_line(' ');
  dbms_output.put_line(underline);

end test_;




E sad, kako da strpam output koji mi ispisuje text source cod funkcije u promjenljivu, da ne moram deklarisati u zaglavlju promjenljivu. I savjeti za dalje vezanje operacije tipa SELECT, UPDATE sa tabelom nad kojom se operacija vrši?
Svi savjeti su totalno dobrodošli :)
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Matrica CRUD Pl-Sql25.09.2013. u 11:41 - pre 128 meseci
Vidim da si ovo pitanje postavio još na nekoliko foruma i svi su ti odgovorili slično kao i ja.

Problem sa ovim zadatkom je to ŠTO TI NE MOŽEŠ DA GA REŠIŠ!

Ovo je isto kao da si rekao "Znam nešto malo da krečim i da postavljam pločice u kupatilu, a profesor mi je dao zadatak da izgradim soliter. Kako to da uradim?"

Samo parsiranje PLSQL koda je problem koji je komplikovaniji od 99% diplomskih radova na fakultetima koji se bave programiranjem. Kada bi imao gotov PLSQL parser, onda bi pravljenje CRUD matrice bilo tek težak problem, možda na nivou diplomskog rada.
 
Odgovor na temu

bluvulture
Nebojsan
Banja di Lucca

Član broj: 172860
Poruke: 7
*.teol.net.

Sajt: www.blc.edu.ba


+2 Profil

icon Re: Matrica CRUD Pl-Sql25.09.2013. u 12:29 - pre 128 meseci
Ja cu nastojati da ga odradim sto bolje mogu, makar da mi radi za predefinisani string.
A da je tesko tesko je, dobio sam odgovor i od stranaca kojima je uza specijalnost PL/SQL da je stvarno velika komplikacija to uraditi.
LP
 
Odgovor na temu

bluvulture
Nebojsan
Banja di Lucca

Član broj: 172860
Poruke: 7
*.teol.net.

Sajt: www.blc.edu.ba


+2 Profil

icon Re: Matrica CRUD Pl-Sql04.10.2013. u 14:05 - pre 128 meseci
Odradio sam solidan dio ovog problema, i u verziji sa cuvanjem rezultata kao fizickom tabelom u bazi i u verziji sa kolekcijom.
Ako se neko bude dohvatao ovog problema u buducnosti nek se javi na PM pa koliko budem znao pomoću.
 
Odgovor na temu

[es] :: Oracle :: Matrica CRUD Pl-Sql

[ Pregleda: 5456 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

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