【问题标题】:How to fix 'Encountered the symbol' when creating store procedure?创建存储过程时如何修复“遇到符号”?
【发布时间】:2019-06-06 09:05:51
【问题描述】:

我想创建一个程序来检查记录是否存在然后更新其他插入。但是,有一个问题我试图解决它但我无法解决它。请帮助。

CREATE TABLE JOB_RUN
(
DATE_KEY VARCHAR2(8),
JOB_NAME VARCHAR2(20),
START_DATE TIMESTAMP,
CTL_ROWS NUMBER,
LOAD_DATA_ROW NUMBER,
END_DATE TIMESTAMP,
FLAG_COMPLETED CHAR(1),
PRIMARY KEY (DATE_KEY,JOB_NAME)
);

这是字段的示例值:

INSERT INTO JOB_RUN(DATE_KEY,JOB_NAME,START_DATE,CTL_ROWS,LOAD_DATA_ROW,END_DATE, FLAG_COMPLETED)
        VALUES('20110101','TABLE_NAME',SYSDATE,10,0, NULL, 'N');

然后,我创建了接收 date_key 和 job_name 的过程

create or replace procedure check_job(pdate IN varchar2,pname IN varchar2) as
declare
v_count int;
    begin
        select count(*) into v_count from MISDBA.job_run where (date_key=pdate and job_name=pname);
        if v_count = 1 then
            update job_run
            set start_date=sysdate,ctl_rows=5;
        else         
        insert into misdba.job_run(date_key,job_name,start_date,ctl_rows,load_data_row,end_date, flag_completed)
        values(pdate,pname,sysdate,10,0, null, 'N');
        end if;
        commit;
    end;

之后我运行下面的查询来调用 PROCEDURE

BEGIN
EXECUTE CHECK_JOB('20200101','table2');
END;

我收到了这个错误:

SQL 错误 [6550] [65000]:ORA-06550:第 2 行,第 9 列: PLS-00103:在预期以下情况之一时遇到符号“CHECK_JOB”:

:= 。 (@%;立即 符号“:=”被替换为“CHECK_JOB”以继续。 java.sql.SQLException:ORA-06550:第 2 行,第 9 列: PLS-00103:在期望以下之一时遇到符号“CHECK_JOB”::=。 (@%;立即 符号“:=”被替换为“CHECK_JOB”以继续。

【问题讨论】:

  • 与您遇到的错误无关,但您的更新是否应该与select count(*) 具有相同的过滤条件?

标签: oracle stored-procedures compiler-errors


【解决方案1】:

你必须删除EXECUTE:

BEGIN
 CHECK_JOB('20200101','table2');
END;

【讨论】:

  • 或者只是EXECUTE CHECK_JOB('20200101','table2');(没有开始...结束;)
  • BEGIN CHECK_JOB('20200101','table2');END; -->得到这个错误 SQL 错误 [6550] [65000]: ORA-06550: 第 2 行第 1 列: PLS-00905: 对象 MISDBA.CHECK_JOB 无效 ORA-06550: 第 2 行第 1 列: PL/SQL: 语句忽略 java.sql.SQLException:ORA-06550:第 2 行,第 1 列:PLS-00905:对象 MISDBA.CHECK_JOB 无效 ORA-06550:第 2 行,第 1 列:PL/SQL:语句被忽略
  • 执行检查作业('20200101','table2'); --> 错误 SQL 错误 [900] [42000]: ORA-00900: 无效的 SQL 语句 java.sql.SQLSyntaxErrorException: ORA-00900: 无效的 SQL 语句
  • @SNPalita - EXECUTE 是客户端快捷方式,因此只能在 SQL*Plus、SQL Developer 和 SQLcl 中使用 - 不过其他人可能已经复制了它。不管你在运行什么,虽然显然不支持它,所以坚持开始/结束。您的程序无效,因此请查询 user_errorsall_errors 以了解原因。 (但看着它,我认为您只需要删除 declare 关键字?)
  • @SNPalita - 这不是我的建议;您当前的客户端可以处理匿名块,它只是不知道execute 速记。 PLS-00905 是因为您的程序无效,与您使用的客户端无关。在没有declare 的情况下重新编译您的程序并查看是否成功,一旦程序有效,您将能够从当前客户端运行它,如 Aleksej 所示。
猜你喜欢
  • 2014-08-12
  • 2011-02-18
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-06
  • 2019-07-31
相关资源
最近更新 更多