2012-03-16 7 views
1

COUNTを使用すると、.sqlファイル内にあるタプルの数がわかりますか?私はこのようなファイル名を持つクエリでそれを使用してみました:ファイルのCOUNT機能はありますか?

SELECT COUNT(*) FROM @q65b; 

それはそれはテーブルではないので、私は理解している、テーブルが無効であることを私に伝え、q65bはに保存されたクエリを持つファイルでありますそれ。私はq65bの行の数を私が作成したビューと比較しようとしています。これは可能ですか、単にクエリを実行し、下部の行数を確認するだけですか?

ありがとうございました

+0

ファイル名を使用して選択することはできません。あなたはテーブルのような構造(テーブル、ビュー、定数...)が必要 – Konerak

+1

+1。私はなぜ誰かがこのことを理解していない。私は答えが「方法はありません」と思うが、もし*ある方法があれば、それは非常に便利だと思うだろう! – ruakh

+1

(ただし、「q65bはクエリが保存されたファイルです」という注釈は真実ではありません.SQL * Plusスクリプトを含むファイルであり、SQL * Plusスクリプトは単一のクエリで構成されています) – ruakh

答えて

3

You これはSQL * Plusで行います。例えば:例えば、ファイルに保存

select * from dual 
    1. は、クエリを含む、(:なしセミコロン!ノート)をテキストファイルを作成します。 myqueryfile.txtをSQL * Plusセッションからアクセス可能なフォルダにコピーします。

    2. あなたは今、別のSQLクエリの中からこれを呼び出すことができます - 例えば、しかし、行の先頭にとして必ず@を作る:私は個人的に非常にこの機能を使用しないでください

      SQL> select * from (
          2 @myqueryfile.txt 
          3 ); 
      
      D 
      - 
      X 
      

    、 しかしながら。

  • 1

    これは1つのアプローチです。これは、ディレクトリ内のファイルを読み込み、内容をselect count(*) from (....)コンストラクタでラップし、結果の文を実行する関数です。ここで

    1 create or replace function get_cnt 
        2  (p_file in varchar2) 
        3  return number 
        4 as 
        5  n pls_integer; 
        6  stmt varchar2(32767); 
        7  f_line varchar2(255); 
        8  fh utl_file.file_type; 
        9 begin 
    10  stmt := 'select count(*) from ('; 
    11  fh := utl_file.fopen('SQL_SCRIPTS', p_file, 'R'); 
    12  loop 
    13   utl_file.get_line(fh, f_line); 
    14   if f_line is null then exit; 
    15   elsif f_line = '/' then exit; 
    16   else stmt := stmt ||chr(10)||f_line; 
    17   end if; 
    18  end loop; 
    19  stmt := stmt || ')'; 
    20  execute immediate stmt into n; 
    21  return n; 
    22* end get_cnt; 
    SQL> 
    

    は、SQLファイルの内容です:

    SQL> select get_cnt ('q_emp.sql') from dual 
        2/
    
    GET_CNT('Q_EMP.SQL') 
    -------------------- 
            14 
    
    SQL> 
    

    だから、それは動作します:

    select * from emp 
    /
    
    
    ~                                        
    ~                    
    ~                    
    "scripts/q_emp.sql" 3L, 21C 
    

    そして、ここでは、スクリプトの実行方法です。私が投稿したことは明らかに概念の証明に過ぎません。あなたはUTL_FILEアスペクトのために多くのエラー処理(it's a package which can throw lots of exceptions)を含める必要があります。そしておそらく、渡されるスクリプトの安全性のチェックでしょう。

    関連する問題