文件的COUNT函数?

时间:2012-03-16 23:09:49

标签: sql oracle count

是否可以以某种方式使用COUNT来提供.sql文件中的元组数量?我尝试在查询中使用它,文件名如下:

SELECT COUNT(*) FROM @q65b;

它告诉我该表无效,我理解这是因为它不是表,q65b是一个保存了查询的文件。我试图将q65b中的行数与我创建的视图进行比较。这是可能的还是我只需运行查询并检查底部的行数?

由于

2 个答案:

答案 0 :(得分:3)

可以在SQL * Plus中执行此操作。例如:

  1. 创建包含查询的文本文件(注意:没有分号!):

    select * from dual
    
  2. 将其保存在文件中,例如myqueryfile.txt,指向可从SQL * Plus会话访问的文件夹。

  3. 您现在可以在另一个SQL查询中调用它 - 但要确保@ as在行的开头,例如:

    SQL> select * from (
      2  @myqueryfile.txt
      3  );
    
    D
    -
    X
    
  4. 然而,我个人并不是很喜欢这个功能。

答案 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文件的内容:

select * from emp
/


~                                                                                                                                                              
~                                                                               
~                                                                               
"scripts/q_emp.sql" 3L, 21C

以下是脚本的运行方式:

SQL>  select get_cnt ('q_emp.sql') from dual
  2  /

GET_CNT('Q_EMP.SQL')
--------------------
                  14

SQL> 

所以它有效。显然我发布的内容只是一个概念证明。您需要为UTL_FILE方面包含大量错误处理 - it's a package which can throw lots of exceptions - 并且可能需要对传递的脚本进行一些安全检查。