banjalukaforum.com https://banjalukaforum.com/ |
|
PL-SQL pomoc https://banjalukaforum.com/viewtopic.php?f=18&t=63653 |
Stranica 1 od 1 |
Autoru: | bluvulture [ 15 Sep 2013, 09:53 ] |
Tema posta: | PL-SQL pomoc |
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 ![]() |
Autoru: | Digresija [ 26 Sep 2013, 22:25 ] |
Tema posta: | Re: PL-SQL pomoc |
Sta ti treba tacno? |
Autoru: | bluvulture [ 28 Sep 2013, 19:56 ] |
Tema posta: | Re: PL-SQL pomoc |
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. |
Autoru: | Digresija [ 30 Sep 2013, 00:06 ] |
Tema posta: | Re: PL-SQL pomoc |
Nista ja tebe ne razumijem ![]() Nemoj mi slati PM, nego okaci ovdje, pa cemo zajedno do rjesenja ... |
Autoru: | bluvulture [ 30 Sep 2013, 12:42 ] |
Tema posta: | Re: PL-SQL pomoc |
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); |
Autoru: | Digresija [ 30 Sep 2013, 16:13 ] |
Tema posta: | Re: PL-SQL pomoc |
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; / |
Autoru: | bluvulture [ 30 Sep 2013, 16:36 ] |
Tema posta: | Re: PL-SQL pomoc |
Eo istestiracu sad, imam neki error sa regexp-om ovdje. |
Autoru: | bluvulture [ 30 Sep 2013, 17:31 ] |
Tema posta: | Re: PL-SQL pomoc |
Nema sanse bar kod mene da se ovo izvrti, vec pet minuta stoji executing sa samo jednom petljom. |
Autoru: | bluvulture [ 01 Okt 2013, 09:34 ] |
Tema posta: | Re: PL-SQL pomoc |
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. |
Autoru: | bluvulture [ 02 Okt 2013, 13:11 ] |
Tema posta: | Re: PL-SQL pomoc |
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. |
Autoru: | bluvulture [ 04 Okt 2013, 08:39 ] |
Tema posta: | Re: PL-SQL pomoc |
Napravio sam da radi, ako nekome bude trebala pomoc oko ovoga nek se javi, pa cu pomoci koliko budem znao. |
Autoru: | bluvulture [ 09 Okt 2013, 11:09 ] |
Tema posta: | Re: PL-SQL pomoc |
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? |
Stranica 1 od 1 | Sva vremena su u UTC [ DST ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |