2010-11-19 6 views
31

Ho creato un blocco di query con inizio/fine e voglio eseguirlo in SQL * Plus. Ma come posso eseguirlo nella riga di comando?Come eseguire la query Oracle con inizio/fine in SQL * Plus?

In realtà il codice proviene da alcuni blog ed è utilizzato per la ricerca di testo nel database. ABC è i testi da cercare.

set serveroutput on size 1000000 
declare 
TYPE QueryCurType is REF CURSOR; 
query1 QueryCurType ; 

cursor c1 is select owner,table_name from dba_tables where owner not in ('SYS','SYSTEM') and table_name not like '%$%'; 
cursor c2(t1 varchar2) is select column_name from dba_tab_columns where table_name=t1 and DATA_TYPE in ('NVARCHAR2','VARCHAR2','CHAR'); 
temp_var varchar2(3000); 
query varchar2(3000); 

begin 
for tab1 in c1 loop 
    for col in c2(tab1.table_name) loop 
    query:='select '||col.column_name||' from '||tab1.owner||'.'||tab1.table_name||' where '||col.column_name||' like "ABC"'; 
    --dbms_output.put_line('executing..'||query); 
    open query1 for query; 
    loop 
     fetch query1 into temp_var; 
     if concat('a',temp_var) != 'a' then 
     dbms_output.put_line('Found String: "'||temp_var||'"# Column:'||col.column_name||'# Table:'||tab1.table_name); 
     end if; 
     exit when query1%NOTFOUND; 
    end loop; 
    end loop; 
end loop; 
end; 

ma questo non viene mai eseguito. Come posso eseguire i codici?

+1

Vedere l'intero contenuto del blocco PLSQL anonimo sarebbe di aiuto e codice ORA se ne stai ottenendo. –

+0

Ho modificato la domanda. – newguy

risposta

60

è necessario seguire con una barra come

begin 
    dbms_output.put_line('Hello World'); 
end; 
/
+0

Questo è esattamente quello che voglio. Grazie Gary. – newguy

+6

Omg ... stupido Oracle! – qwertzguy

+0

domanda è non c'è nessuna linea visualizzata nella console. Come posso dire a sqlplus di stampare tutto dbms_output.put_line? – Qianlong

13

Probabilmente solo bisogno di un "/" su una riga da solo alla fine per farlo eseguire.