2012-03-16 2 views
1

COUNT을 .sql 파일에있는 튜플의 수를 줄 수있는 방법으로 사용할 수 있습니까? 나는이 같은 파일 이름으로 쿼리를 사용하여 시도 :파일에 대한 COUNT 함수는 무엇입니까?

SELECT COUNT(*) FROM @q65b; 

그것은 테이블은 테이블이 아니기 때문에 내가 이해하는 잘못되었음을 알려줍니다, q65b은에 저장된 쿼리 파일입니다 그것. q65b의 행 수를 내가 만든 뷰와 비교하려고합니다. 이것이 가능합니까 아니면 그냥 쿼리를 실행하고 하단의 행 수를 확인해야합니까?

감사합니다.

+0

선택할 파일 이름을 사용할 수 없습니다. 테이블과 같은 구조가 필요합니다 (테이블, 뷰, 상수 ...) – Konerak

+1

+1. 나는 왜 누군가가 이것을 이해하지 못한다. 나는 대답이 "방법이 없다"고 생각하지만, 만약 * 방법이 있다면, 나는 그것을 매우 유용하게 생각할 것이다! – ruakh

+1

("q65b는 쿼리가 저장된 파일입니다."라는 사실에주의하십시오.이 파일은 SQL * Plus 스크립트가 포함 된 파일이고 SQL * Plus 스크립트는 단일 쿼리로 구성됩니다.) – ruakh

답변

3

이 작업은 SQL * Plus에서 수행하십시오. 예를 들어 :

  1. 쿼리를 포함, (참고 : 세미콜론를!) : 텍스트 파일을 생성하지 그것을 저장

    select * from dual 
    
  2. 을 파일에, 예를 들어, myqueryfile.txt을 SQL * Plus 세션에서 액세스 할 수있는 폴더로 복사하십시오.

  3. 이제 다른 SQL 쿼리 내에서이 호출 할 수 있습니다 -하지만 라인의 시작으로 확인 @을, 예를 들면 :

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

나는 개인적으로 많은이 기능을 사용하지 않는 그러나.

1

여기 하나의 방법이 있습니다. 이 함수는 디렉토리의 파일을 읽고 select count(*) from (....) 구문으로 내용을 래핑하고 결과 문을 실행하는 기능입니다.

select * from emp 
/


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

그리고 여기에 스크립트가 실행 방법은 다음과 같습니다 :

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> 

그래서 그것을 작동합니다. 분명히 내가 게시 한 것은 단지 개념 증명 일뿐입니다. UTL_FILE aspect에 대한 많은 에러 핸들링 ( it's a package which can throw lots of exceptions)을 포함시켜야하고 아마도 전달 된 스크립트의 안전성 검사가 필요할 것입니다.

관련 문제