2017-01-11 4 views
-1

아래 쿼리를 실행하려고하면 다음 오류가 발생합니다.PLS-00103 : 다음 중 하나가 예상되면 "(") 기호가 나타납니다. <식별자><a doublequoted delimited-identifier> LONG_

ERROR at line 6: 

ORA-06550 : 라인 6, 열 30 : PLS-00103 :가 발생했습니다 기호 "("다음 중 하나를 기대하는 경우 :

NCHAR LONG_ 더블 심판 문자 시간 소인 간격 날짜를 진 국가 문자를
DECLARE 
thisdb int; 
maxDB int; 
execStatement VARCHAR2 (120); 
execStatement2 VARCHAR2 (120); 
TYPE databaseIDs IS TABLE OF (EXECUTION_ID RAW (32)); 


BEGIN 
INSERT INTO databaseIDs (EXECUTION_ID) 
       SELECT distinct jhist.EXECUTION_ID 
       FROM sysman.MGMT_JOB_HISTORY jhist, sysman.MGMT_JOB job 
       WHERE jhist.job_id=job.job_id and 
       job.job_owner='admin' 
       and jhist.step_status not in (1,5,17) 
       and start_time > (sysdate -1); 

INSERT INTO databaseIDs (EXECUTION_ID) 
       SELECT distinct log_ID 
       FROM all_scheduler_job_log 
       WHERE owner = 'admin' 
       AND status <> 'SUCCEEDED' 
       AND log_date > (sysdate -1); 


maxDB := select max(EXECUTION_ID) from databaseIDs; 
thisdb := select min(EXECUTION_ID) from databaseIDs; 

WHILE thisdb <= maxDB 
LOOP 
maxDB >= thisdb 
END LOOP; 



BEGIN 
          execStatement := (Select ' 
INSERT INTO TEST.JOB_FAILURES 
       SELECT distinct jhist.EXECUTION_ID,job_owner,job_name, 
          DECODE(step_status, 
       1, ''SCHEDULED'', 
       2, ''RUNNING'', 
       3, ''FAILED INIT'', 
       4, ''FAILED'', 
       5, ''SUCCEEDED'', 
       6, ''SUSPENDED'', 
       7, ''AGENT DOWN'', 
       8, ''STOPPED'', 
       9, ''SUSPENDED/LOCK'', 
       10, ''SUSPENDED/EVENT'', 
       11, ''SUSPENDED/BLACKOUT'', 
       12, ''STOP PENDING'', 
       13, ''SUSPEND PENDING'', 
       14, ''INACTIVE'', 
       15, ''QUEUED'', 
       16, ''FAILED/RETRIED'', 
       17, ''WAITING'', 
       18, ''SKIPPED'', step_status) AS STATUS, 
       cast(end_time AS timestamp) AS RUNDATE 
       FROM sysman.MGMT_JOB_HISTORY jhist, sysman.MGMT_JOB job 
       WHERE jhist.job_id=job.job_id and 
       job.job_owner='admin' 
       and jhist.step_status not in (1,5,17) 
       and start_time > (sysdate -1) 
          and jhist.EXECUTION_ID = '' + EXECUTION_ID + '' 
WHERE NOT EXISTS (  SELECT distinct jhist.EXECUTION_ID 
       FROM sysman.MGMT_JOB_HISTORY jhist, sysman.MGMT_JOB job 
       WHERE jhist.job_id=job.job_id and 
       job.job_owner='DBadmin' 
       and jhist.step_status not in (1,5,17) 
       and start_time > (sysdate -1) 
          and jhist.EXECUTION_ID = '' + EXECUTION_ID + '';'from databaseIDs where EXECUTION_ID = thisdb); 
          --print execStatement 
          exec(execStatement) 

          execStatement2 := (Select ' 
INSERT INTO TEST.JOB_FAILURES 
     SELECT distinct owner,job_name,status, cast(log_date AS timestamp) as column1 
       FROM all_scheduler_job_log 
       WHERE 
       owner = 'admin' and 
       status <> 'SUCCEEDED' 
       and log_date > (sysdate -1) 
          and log_ID = '' + EXECUTION_ID + '' 
WHERE NOT EXISTS ( SELECT distinct log_ID 
       FROM all_scheduler_job_log 
       WHERE 
       owner = 'admin' and 
       status <> 'SUCCEEDED' 
       and log_date > (sysdate -1) 
          and log_ID = '' + EXECUTION_ID + '';'from databaseIDs where EXECUTION_ID = thisdb); 
          --print execStatement 
          exec(execStatement2) 

     thisdb := (select min(EXECUTION_ID) from databaseIDs where EXECUTION_ID > thisdb) 
END; 
/

무엇이 누락 되었습니까?

+2

[Oracle 매뉴얼] (http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/toc.htm)에서 구문을 찾았습니까? –

+1

이것은 Oracle 구문과 같지 않음 – Aleksej

+1

제목의 오류 메시지와 관련하여 [사용자 정의 식별자] (http://docs.oracle.com/database/121/LNPLS/fundamentals.htm#LNPLS002)는 a로 시작해야합니다. 편지가 아니라'@'. 'set' 명령도없고 다른 사람들이 언급 한 것처럼 명령문은 세미콜론으로 끝나야합니다. 나는 설명서를 한눈에 볼 필요가있을 것이라고 생각한다. –

답변

2

Oracle에서 SQL Server 또는 다른 RDBMS 코드를 실행하려고합니다. 구문은 동일하지 않습니다. 예를 들어 변수 이름의 접두어로 @를 사용하면 Oracle PL/SQL 구문에 포함되지 않습니다. 개별 명령을 세미콜론으로 끝내야하는 것과 같은 다른 문제도 있습니다.

+1

나는 오라클에서 부분적으로 분해하면 코드의 일부를 실행할 수있다. – Terry

+3

귀하의 요점은 확실하지 않습니다. 구문의 일부 측면은 여러 데이터베이스 시스템간에 공통적입니다. 예를 들어, 순수 ANSI SQL 문은 문제없이 다른 시스템에서 실행되어야합니다. 따라서 코드의 일부가 오라클에서만 실행된다는 것은 놀라운 일이 아닙니다. 내 대답과 모순되는 사례가 있다고 생각한다면 공유하십시오. –

+2

@Terry 오라클에서 Microsoft T-SQL 코드를 실행하는 것은 Python 인터프리터로 Java 코드를 실행하는 것과 같은 일입니다. T-SQL과 PL/SQL은 SQL의 기능을 확장하는 두 가지 다른 벤더 특정 언어입니다. – user272735