2016-09-14 5 views
0

위의 코드에서 schemaname을 입력으로 지정하고 해당 입력을 사용하여 데이터베이스에 연결해야합니다. 그러나이 경우 입력 한 값은 schemaname에 의해 취해지지 않습니다. 이것은 밖으로 넣어하는 방법과 오류는 다음과 같습니다Variable-Oracle 사용

declare schemaname varchar2(20); 
exec :schemaname := XYZ; 
BEGIN 

end; 

Error report - 
ORA-06550: line 2, column 6: 
PLS-00103: Encountered the symbol "" when expecting one of the following: 

    constant exception <an identifier> 
    <a double-quoted delimited-identifier> table long double ref 
    char time timestamp interval date binary national character 
    nchar 
ORA-06550: line 4, column 1: 
PLS-00103: Encountered the symbol "CONNECT" when expecting one of the following: 

어느 한 그것이 declareend 사이에 스풀

답변

2

코드를 사용하여 작업하는 방법을 제안 할 수 것은 PL/SQL이다. CONNECT 또는 SPOOL과 같은 명령은 SQL * Plus 명령입니다. SQL * Plus 명령은 PL/SQL 블록에서 사용할 수 없습니다.

콘텐츠를

connect &1 
spool C:\ABC 
@c:\ABC 
spool off; 

을 다음과 같이 스크립트를 작성하고 BTW

@your_script_name 

을 실행 : 귀하의 경우

당신은 모든 PL/SQL을 필요 없어 더있다 스크립트 c : \ ABC를 스풀링하는 동안 실행하는 이유. 정확히 무엇을 달성하고 싶습니까?

+0

: \ ABC.LST' 접미사가 주어지지되면서, '@'의 기본값은'C : \ ABC.SQL'입니다. 그래서 그들은 같은 파일이 아닙니다. 혼란을 피하기 위해 적어도 스풀 이름을 전체적으로보기를 원합니다 ... –

1

exec[ute]은 SQL * Plus이고 SQL Developer (및 다른 클라이언트)는 익명 블록의 약식입니다. 클라이언트 명령입니다. PL/SQL의 일부가 아닙니다. 유효하지 않거나 인식되지 않는 PL/SQL 선언 섹션에서 사용하려고합니다. 당신이 클라이언트 바인드 변수를 원하는 경우

당신은 var[iable] command 필요

var schemaname varchar2(20); 
exec :schemaname := '&1'; 

BEGIN 
... 

공지 사항 &1 주위에 작은 따옴표를,이 문자열 변수에 할당 되 고있다.

그러나 PL/SQL 블록 내부에서 연결할 수 없으며 연결에 바인드 변수를 사용할 수 없습니다.

connect :schemaname 

암호 (당신이 user/passwd 같은 값의 정의 경우에도)를 묻는 메시지와 lieterally :schemaname이라는 사용자로 연결을 시도합니다.

대체 변수를 사용할 수 있지만 실제로 새 변수를 정의 할 필요는 없습니다. 당신이 자격 증명을 전달하는 것, 당신은 할 수 있습니다 :

(주변 따옴표없이)
connect &1 

스풀이 C '로 기본 설정됩니다