2016-09-28 3 views
1

실행할 스크립트가 몇 개 있으며 각 스크립트는 동일한 대체 변수를 사용합니다. 각 스크립트의 상단에, 내가 가진 모든 곳에 &&COFFEE..를 사용하는 경우대체 변수가 정의되지 않은 경우에만 ACCEPT를 호출하는 방법은 무엇입니까?

ACCEPT COFFEE CHAR PROMPT 'Please indicate your preferred coffee brand: '; 

모든 스크립트 커피의 유형을 입력하는 것을 방지하기 위해, 난 그저 기본 동작에 의존 할 수있다. 그러나 이것은 단지 나에게 덜 친숙한 Enter value for coffee의 프롬프트를 가져옵니다.

호기심입니다. COFFEE가 이미 정의되어 있는지 확인하는 방법이 있습니까? 그렇다면 ACCEPT... 만 호출하면됩니까?

나는 순간이있다 : 그러나

IF COFFEE IS NULL THEN 
    ACCEPT COFFEE CHAR PROMPT 'Please indicate your preferred coffee brand: '; 
END IF; 

, 내가 SQLPLUS에서이 프로그램을 실행할 때, 나는 다음과 같은 오류가 발생합니다 :

SP2-0734: unknown command beginning "IF COFFEE I..." - rest of line ignored. 

변수 이름은 무고한을 보호하기 위해 변경되었습니다 ...

나는이 사이트를 통해 좋은 Google과 검색을 통해 답변을 찾았지만 찾지 못했습니다. PL/SQL 및 SQLPlus의 한계를 강조하는 답변을 읽었으므로 가능하지 않다고 생각합니다. 변수가 정의되고 사용자는이 메시지가 나타납니다 변수를 사용하려고하지 않을 경우

답변

0

는 :

SQL> define var1='defined' 
SQL> select '&var1' from dual; 
old 1: select '&var1' from dual 
new 1: select 'defined' from dual 

'DEFINE 
------- 
defined 

SQL> select '&var2' from dual; 
Enter value for var2: var2 
old 1: select '&var2' from dual 
new 1: select 'var2' from dual 

'VAR 
---- 
var2 

을 명시 적으로 다음 다시 사용됩니다 그것은 변수를 정의하면, 그러나 사람이 지속되지 않습니다 메시지 :

SQL> define var1='SYS' 
SQL> select username from dba_users where username = '&var1'; 
old 1: select username from dba_users where username = '&var1' 
new 1: select username from dba_users where username = 'SYS' 

USERNAME 
------------------------------ 
SYS 

SQL> select username from dba_users where username = '&var1'; 
old 1: select username from dba_users where username = '&var1' 
new 1: select username from dba_users where username = 'SYS' 

USERNAME 
------------------------------ 
SYS 

SQL> select username from dba_users where username = '&var2'; 
Enter value for var2: SYSTEM 
old 1: select username from dba_users where username = '&var2' 
new 1: select username from dba_users where username = 'SYSTEM' 

USERNAME 
------------------------------ 
SYSTEM 

SQL> select username from dba_users where username = '&var2'; 
Enter value for var2: SYS 
old 1: select username from dba_users where username = '&var2' 
new 1: select username from dba_users where username = 'SYS' 

USERNAME 
------------------------------ 
SYS 

당신이 & &를 사용하는 경우 다음이 설정되지 않은 경우 메시지를 표시하고 지속됩니다

SQL> select username from dba_users where username = '&&var3'; 
Enter value for var3: SYS 
old 1: select username from dba_users where username = '&&var3' 
new 1: select username from dba_users where username = 'SYS' 

USERNAME 
------------------------------ 
SYS 

SQL> select username from dba_users where username = '&&var3'; 
old 1: select username from dba_users where username = '&&var3' 
new 1: select username from dba_users where username = 'SYS' 

USERNAME 
------------------------------ 
SYS 

SQL> select username from dba_users where username = '&var3'; 
old 1: select username from dba_users where username = '&var3' 
new 1: select username from dba_users where username = 'SYS' 

USERNAME 
------------------------------ 
SYS 

정말 물어 보지하지만 예상대로 당신은 'NULL'으로 설정하여, UNDEFINE를 사용하여 선언 된 변수를 취소 할 수 없습니다

SQL> define var3=NULL; 
SQL> select username from dba_users where username = '&var3'; 
old 1: select username from dba_users where username = '&var3' 
new 1: select username from dba_users where username = 'NULL' 
SQL> undefine var3; 
SQL> select username from dba_users where username = '&var3'; 
Enter value for var3: SYS 
old 1: select username from dba_users where username = '&var3' 
new 1: select username from dba_users where username = 'SYS' 

USERNAME 
------------------------------ 
SYS