2010-11-19 30 views
31

He creado un bloque de consulta con begin/end y quiero ejecutarlo en SQL * Plus. ¿Pero cómo puedo ejecutarlo en la línea de comando?¿Cómo ejecutar la consulta de Oracle con begin/end en SQL * Plus?

En realidad, el código es de algún blog y se utiliza para buscar texto en la base de datos. ABC es el texto que se buscará.

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; 

pero esto nunca se ejecuta. ¿Cómo puedo ejecutar los códigos?

+1

Ver todo el contenido del bloque PLSQL anónimo ayudaría, y código (s) ORA si está obteniendo alguno. –

+0

He editado la pregunta. – newguy

Respuesta

60

que debe seguir con una barra como

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

Eso es exactamente lo que quiero. Gracias Gary. – newguy

+6

¡Omg ... estúpido Oracle! – qwertzguy

+0

pregunta es que no se muestra ninguna línea en la consola. ¿Cómo puedo decirle a sqlplus que imprima todo dbms_output.put_line? – Qianlong

13

es probable que sólo necesita un "/" en una línea por sí mismo al final para que sea ejecutado.

Cuestiones relacionadas