2017-01-11 5 views
-1

При попытке выполнить приведенный ниже запрос возникает следующая ошибка:PLS-00103: встречается символ "(" при ожидании одного из следующих: <идентификатор><a double -quoted delimited-identifier> LONG_

ERROR at line 6: 

ORA-06550: строка 6, колонка 30: PLS-00103: обнаружена символ "(" когда ожидается одно из следующих действий: LONG_ двойных иого символ времени временной метки интервала дат бинарного национального характера NCHAR

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) должны начинаться с буквы, а не '@'. Также нет команды 'set', и, как упоминалось другими, инструкции должны быть завершены точкой с запятой. Я думаю, что взгляд на руководство может оказаться необходимым. –

ответ

2

Вы пытаетесь запустить код для SQL Server или других RDBMS в Oracle. Синтаксисы не совпадают. Например, использование имен префиксов @ для префикса не является частью синтаксиса Oracle PL/SQL. Существуют и другие проблемы, например, что отдельные команды должны заканчиваться точкой с запятой.

+1

Я могу запускать части кода, если я разбиваю его часть на части в oracle. – Terry

+3

Не знаете, какова ваша точка. Некоторые аспекты синтаксиса распространены между несколькими системами баз данных. Например, чистые заявления ANSI SQL должны запускаться в разных системах без проблем. Поэтому неудивительно, что некоторые части вашего кода запускаются в Oracle самостоятельно. Если вы думаете, что у вас есть пример, который противоречит моему ответу, поделитесь им. –

+2

@Terry Попытка запуска кода Microsoft T-SQL в Oracle - это то же самое, что и попытка запустить Java-код с помощью интерпретатора Python. T-SQL и PL/SQL - это два разных языка поставщика, которые расширяют возможности SQL. – user272735