2010-11-19 3 views
31

Ich habe einen Abfrageblock mit Beginn/Ende erstellt und möchte das in SQL * Plus ausführen. Aber wie kann ich es in der Befehlszeile ausführen?Wie Ausführen von Oracle-Abfrage mit Beginn/Ende in SQL * Plus?

Eigentlich ist der Code von einigen Blog und es wird für die Suche nach Text in der Datenbank verwendet. ABC ist der zu durchsuchende Text.

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; 

aber das wird nie ausgeführt. Wie kann ich die Codes ausführen?

+1

Sehen Sie den gesamten Inhalt des anonymen PLSQL-Blockes würde helfen, und ORA-Code (s), wenn Sie irgendwelche bekommen. –

+0

Ich habe die Frage bearbeitet. – newguy

Antwort

60

Sie müssen es mit einem wie

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

Genau das möchte ich. Danke, Gary. – newguy

+6

Omg ... dummes Orakel! – qwertzguy

+0

Frage ist, es wird keine Zeile in der Konsole angezeigt. Wie kann ich sqlplus mitteilen, alle dbms_output.put_line zu drucken? – Qianlong

13

Sie wahrscheinlich brauchen nur ein „/“ auf einer Linie von selbst am Ende es ausführen zu lassen.