2010-11-19 8 views
31

私はbegin/endでクエリブロックを作成し、SQL * Plusでクエリブロックを実行します。しかし、それをコマンドラインでどのように実行できますか?SQL * Plusでbegin/endを指定してOracleクエリを実行する方法は?

実際にはコードは一部のブログからのもので、データベースのテキストを検索するために使用されます。 ABCは検索対象のテキストです。

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; 

これは決して実行されません。コードをどのように実行できますか?

+1

匿名PLSQLブロックの全内容を参照すると、ORAコードが表示されます。 –

+0

質問を編集しました。 – newguy

答えて

60

あなたはおそらくちょうどそれが実行させるための最後の単独行に「/」が必要

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

それは私が欲しいものです。ありがとう、ゲーリー。 – newguy

+6

Omg ...愚かなオラクル! – qwertzguy

+0

質問コンソールに表示される行がありません。 sqlplusにすべてのdbms_output.put_lineを出力するように指示するにはどうすればよいですか? – Qianlong

13

のようなスラッシュでそれを実行する必要があります。

関連する問題