2012-11-12 4 views
2

sqlplus 11에서 실행할 스크립트를 작성하고 있습니다. 압축이라는 사용자 정의 변수가 있습니다. 이것이 사실이라면 스크립트 CreateTablesCompression을 실행하고 그렇지 않으면 실행하고 싶습니다. 나는 다음과 같은 한 :SQLplus가 스크립트를 실행하도록 디코드합니다.

decode(compression,'true',@@CreateTablesCompression,@@CreateTables); 

을하지만, 나는이를 실행할 때 오류 발생하고있다 : 디코드 "시작 알 수없는 명령을 ...

내가 여기서 뭔가를 놓치고, 나는 SQLPLUS가 같으면 이유를 볼 수 없습니다

답변

4
은 SQL * PLUS 명령이 아니며 pl/sql 블록 또는 쿼리 내부에서만 sql * plus에서 직접 사용할 수 없습니다. 다음은 조건부 분기가 될 수있는 방법의 예입니다. done : 실행 가능한 두 스크립트 중 어느 스크립트를 제어 할지를 결정하는 변수 flag을 선언합니다.
SQL> variable flag varchar2(7); 
SQL> exec :flag := 'true'; 

PL/SQL procedure successfully completed. 

SQL> column our_script new_value script noprint; 
SQL> select decode(:flag, 'true', 
    2    'c:\sqlplus\script1.sql', 
    3    'c:\sqlplus\script2.sql' 
    4    ) our_script 
    5 from dual; 




SQL> @&script; 

SCRIPT                   
--------                   
script_1                   
2
SQL> host cat foo.sql 
set scan on 
define compression=&1 
col scr new_value script 
set term off 
select decode('&compression', 'true', 'CreateTablesCompression', 'CreateTables') scr from dual; 
set term on 
@@&script 

SQL> @foo true 
run CreateTablesCompression.sql 
SQL> @foo false 
run CreateTables.sql 
+0

아주 좋은 대답은, 나는 그것을 다른 사람들에게뿐만 아니라 설명을 제공하기 때문에 다른 대답을 수락했다 느꼈다 – Fraser

관련 문제