Oracle PLS-00103:遇到符号“(”当需要下列之一时:LONG_
当我尝试运行以下查询时,出现以下错误: 第6行错误: ORA-06550:第6行第30列: PLS-00103:在预期以下情况时遇到符号: 长的_ 双参考字符时间戳间隔日期二进制国家 字符ncharOracle PLS-00103:遇到符号“(”当需要下列之一时:LONG_,oracle,plsql,oracle10g,Oracle,Plsql,Oracle10g,当我尝试运行以下查询时,出现以下错误: 第6行错误: ORA-06550:第6行第30列: PLS-00103:在预期以下情况时遇到符号: 长的_ 双参考字符时间戳间隔日期二进制国家 字符nchar DECLARE thisdb int; maxDB int; execStatement VARCHAR2 (120); execStatement2 VARCHAR2 (120); TYPE databaseIDs IS TABLE OF (EXECUTION_ID RAW (32)); BE
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;
/
我遗漏了什么?您正在尝试在Oracle中运行SQL Server或其他RDBMS的代码。语法不同。例如,使用@作为变量名前缀不是Oracle PL/SQL语法的一部分。还有其他问题,例如单个命令应以分号终止。您在哪里找到的d语法?这看起来不像Oracle syntax。关于标题中的错误消息,必须以字母开头,而不是@。也没有set命令,正如其他人所提到的,语句必须以分号结尾。我认为可能需要浏览一下手册。如果我在oracle。不确定你的观点是什么。多个数据库系统之间的某些语法方面是通用的。例如,纯ANSI SQL语句应该在不同的系统中运行,没有问题。因此,您的代码的某些部分单独在oracle中运行也就不足为奇了。如果您认为您有一个与我的答案相矛盾的示例,请是吗。@Terry尝试在Oracle中运行Microsoft T-SQL代码与尝试使用Python解释器运行Java代码是一样的。T-SQL和PL/SQL是两种不同的供应商专用语言,它们扩展了SQL的功能。嘿,Dave,我已经更新了代码,出现了一个新错误。您能提供帮助吗?