합니다. identifier ONE must be declared
메시지는 사용자가 대체 변수를 인용하지 않았기 때문에 나타납니다.
Enter value for source_ats_user_schema: ONE
old 2: source varchar2(100) := &SOURCE_ATS_USER_SCHEMA;
new 2: source varchar2(100) := ONE;
source varchar2(100) := ONE;
*
ERROR at line 2:
ORA-06550: line 2, column 25:
PLS-00201: identifier 'SCOTT' must be declared
ORA-06550: line 2, column 8:
PL/SQL: Item ignored
*
'D 위치가 무엇 ONE
방법을 알고하지 않는 것을 보여줍니다 당신이 set verify on
이 있다면 당신은 같은 것을 볼 수 있습니다. 당신이 여기에 문자열로 취급하려는 때문에, 당신은해야 할 것 :
source varchar2(100) := '&SOURCE_ATS_USER_SCHEMA';
... 보여줄 것이다 :
Enter value for source_ats_user_schema: ONE
old 2: source varchar2(100) := '&SOURCE_ATS_USER_SCHEMA';
new 2: source varchar2(100) := 'ONE';
을 ... 유효한. 그것이가는 한. 오류가 source.WEB_FE
참조되는
select ID from source.WEB_FE;
*
ERROR at line 4:
ORA-06550: line 4, column 27:
PL/SQL: ORA-00942: table or view does not exist
ORA-06550: line 4, column 5:
PL/SQL: SQL Statement ignored
공지 사항, 하지ONE.WEB_FE
: 당신은 여전히 두 번째 오류가 있기 때문에이 실제로 도움이되지 않습니다. source
은 대체되지 않습니다. 일반적으로 니콜라스 크라스 노프 (NicholasKrasnov)가 제시 한 방법 중 하나를 사용하여 대답해야하지만 필요 이상으로 복잡해집니다. 난 그냥 말에 반대가, 여기가 대체 변수를 인용 할 필요가 없습니다
CURSOR cur_list is
select ID from &SOURCE_ATS_USER_SCHEMA..WEB_FE;
참고,하지만 당신은 수행이 특정한 경우에 당신이 전혀 source
를 선언 할 필요가 없습니다, 당신은 다만 수 명시 적으로 .
으로 종료해야 테이블 이름 앞에있는 실제 .
을 종결 자로 취급하지 않아야합니다. (추가로 .
없이 시도해보십시오. 그렇지 않은 경우 어떻게되는지보십시오).
당신이 그것을 실행하면이 메시지가 나타납니다와 같이 확인 출력이 보일 것이다 :
Enter value for source_ats_user_schema: ONE
old 3: select ID from &SOURCE_ATS_USER_SCHEMA..WEB_FE;
new 3: select ID from ONE.WEB_FE;
당신이 볼 수 있듯이, 그것은 이제 지정된 스키마에서 테이블을 찾고있다. 이것은 여전히 동적이지만 특별한 SQL * Plus 방식입니다.
그러나 이러한 방법 중 하나를 사용하면 SQL 주입 가능성을 고려해야합니다.
감사합니다. 원본 varchar2 (100) : = '& SOURCE_ATS_USER_SCHEMA'; 트릭을 했어. – saji159