多谢大家!慧眼如炬!============== 表 ===============
create table A(
downloadID  number(4) not null,
fileTitle varchar2(160),
ShareStatuts CHAR(1),
constraint pk_tb_download primary key (downloadID),
);create table B(
FILEID char(36) NOT NULL,
FILENAME VARCHAR(200) NOT NULL,
constraint pk_B primary key(FILEID)
);================存储过程==============
CREATE OR REPLACE PROCEDURE SetShareStatuts
IS
BEGIN
FOR rec_A IN  (SELECT downloadID, fileTitle FROM A) LOOP
FOR rec_B in (SELECT filename FROM B) LOOP
IF rec_B.filename = rec_A.fileTitle THEN
UPDATE A SET ShareStatuts = 'Y' WHERE downloadID = rec_A.downloadID;
EXIT;
END IF;
END LOOP;
UPDATE A SET ShareStatuts = 'N' WHERE downloadid = rec_A.downloadid;
END LOOP;
COMMIT;
END;
/====================报错===========================
BEGIN SetShareStatuts.sql; END;                      *
第 1 行出现错误:
ORA-06550: 第 1 行, 第 23 列:
PLS-00103: 出现符号 "SQL"在需要下列之一时:
<an identifier>
<a double-quoted delimited-identifier> delete exists prior
符号 "<an identifier>在 "SQL" 继续之前已插入。

解决方案 »

  1.   

    你这些错误是在什么时候报的?
    create table A(
    downloadID  number(4) not null,
    fileTitle varchar2(160),
    ShareStatuts CHAR(1),
    constraint pk_tb_download primary key (downloadID)
    );
      

  2.   

    错误应该是你输入的字符引起的。重新找工具查下,你的脚本UPDATE A SET ShareStatuts = 'N' WHERE downloadid = rec_A.downloadid;在什么情况下都会执行,应该不符合你的要求
    update a set a.ShareStatuts = 'N'   where   exists 
    (select * from  b
     where a.fileTitle =  b.filename)
    update a set a.ShareStatuts = 'Y'   where not   exists 
    (select * from  b
     where a.fileTitle =  b.filename)
    就够老