2016-09-09 2 views
0

SQL 스크립트를 배포해야하고 변수를 하나의 파일에 정의하고 다른 파일에 스크립트를 정의해야합니다.for 루프에 대한보기에 바인드 변수를 전달하는 방법

파일 1

Define_Variable.sql 

가 hr_SCHEMA = 시간을 정의; 파일 2 :

Createfile.sql 


declare 
lctr varchar2(200); 

BEGIN 

    for rec in (select view_name,count(1) as cnts from all_views where owner='&hr_SCHEMA .' AND VIEW_NAME IN('employee_user_v','employee_id_v') group by view_name) 

LOOP 
    if (rec.cnts = 1) THEN 
     lctr:='DROP VIEW :owner.' || rec.view_name ; 
     execute immediate lctr using '&hr_SCHEMA.'; 
     DBMS_OUTPUT.PUT_LINE('DROPPED VIEW OF..'|| rec.view_name); 
    else 
      DBMS_OUTPUT.PUT_LINE('no view found in the system'); 
    end if; 

END LOOP; 
END ; 
/

답변

0

여기서 실행 하시겠습니까? 익명 PLSQL은 블록에서 변수를 공유하지 않습니다. "전역 변수"가 없으므로 &에 액세스 할 수 없습니다. 선택 사항은 다음과 같습니다. SQLPLUS에서는 변수를 정의하여 사용하거나 변수로 PLSQL 패키지를 작성하여 전역화할 수 있습니다. 또는 데이터베이스를 사용하여 (임시) 테이블에 값을 저장하고 두 번째 스크립트에서 사용할 값을 선택하십시오. 또한 익명 블록을 사용하지 마십시오. Always use a package (그리고 param passing 문제도 해결됨).

+0

변수가 .sql 파일 정의에서 전달되었으며, 모든 테이블 스크립트는 create_table.sql에 있고 모든 뷰는 create_view.sql 파일에 있습니다. 호출시 master.sql 파일을 만들었고 define_Variable.sql과 테이블 스크립트를 먼저 호출합니다. –

관련 문제