是否可以以某种方式使用COUNT
来提供.sql文件中的元组数量?我尝试在查询中使用它,文件名如下:
SELECT COUNT(*) FROM @q65b;
它告诉我该表无效,我理解这是因为它不是表,q65b
是一个保存了查询的文件。我试图将q65b中的行数与我创建的视图进行比较。这是可能的还是我只需运行查询并检查底部的行数?
由于
答案 0 :(得分:3)
您可以在SQL * Plus中执行此操作。例如:
创建包含查询的文本文件(注意:没有分号!):
select * from dual
将其保存在文件中,例如myqueryfile.txt
,指向可从SQL * Plus会话访问的文件夹。
您现在可以在另一个SQL查询中调用它 - 但要确保@ as在行的开头,例如:
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文件的内容:
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 - 并且可能需要对传递的脚本进行一些安全检查。