여기 하나의 방법이 있습니다. 이 함수는 디렉토리의 파일을 읽고 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)을 포함시켜야하고 아마도 전달 된 스크립트의 안전성 검사가 필요할 것입니다.
출처
2012-03-17 19:08:06
APC
선택할 파일 이름을 사용할 수 없습니다. 테이블과 같은 구조가 필요합니다 (테이블, 뷰, 상수 ...) – Konerak
+1. 나는 왜 누군가가 이것을 이해하지 못한다. 나는 대답이 "방법이 없다"고 생각하지만, 만약 * 방법이 있다면, 나는 그것을 매우 유용하게 생각할 것이다! – ruakh
("q65b는 쿼리가 저장된 파일입니다."라는 사실에주의하십시오.이 파일은 SQL * Plus 스크립트가 포함 된 파일이고 SQL * Plus 스크립트는 단일 쿼리로 구성됩니다.) – ruakh