Error: PLS-00103: 出现符号 "DECLARE"在需要下列之一时:
begin end function
package pragma procedure subtype type use <an identifier>
<a double-quoted delimited-identifier> form current cursor
Line: 3
Text: DEClAREpl/sql中写了一个小的存储过程总是报错,请高人指点
procedure addCrewBoard1(v_tsk in varchar2, v_userId in varchar2, v_userName in varchar2, v_content in varchar2)is
v_id int;
begin
select crewboardseq.nextval into v_id from dual;
insert into epare_crewboard(id, tsk, userid, username, content)
values(v_id, v_tsk, v_userId, v_userName, v_content);
/**开始向数据表epare_crewISVIEW加记录*/
DEClARE
CURSOR receiver(tskID VARCHAR2) IS SELECT epc.username FROM epare_crewschedule epc where epc.tsk=tskID
v_tmpname epc.username%TYPE;
begin
FOR r_tmp IN receiver(v_tsk) LOOP /**DBMS_OUTPUT.PUT_LINE('Name:' || v_ename || 'salary:' || v_salary);*/ if(v_tmpname=v_userName) then
{
insert into epare_crewisview(CREWBOARDID, TSK, SENDERNAME, RECEIVERNAME, ISVIEW)
values(v_id, v_tsk, v_userName, username,1);
}
else
{
insert into epare_crewisview(CREWBOARDID, TSK, SENDERNAME, RECEIVERNAME, ISVIEW)
values(v_id, v_tsk, v_userName, username,0);
}
end if; END LOOP;
end;
end;
begin end function
package pragma procedure subtype type use <an identifier>
<a double-quoted delimited-identifier> form current cursor
Line: 3
Text: DEClAREpl/sql中写了一个小的存储过程总是报错,请高人指点
procedure addCrewBoard1(v_tsk in varchar2, v_userId in varchar2, v_userName in varchar2, v_content in varchar2)is
v_id int;
begin
select crewboardseq.nextval into v_id from dual;
insert into epare_crewboard(id, tsk, userid, username, content)
values(v_id, v_tsk, v_userId, v_userName, v_content);
/**开始向数据表epare_crewISVIEW加记录*/
DEClARE
CURSOR receiver(tskID VARCHAR2) IS SELECT epc.username FROM epare_crewschedule epc where epc.tsk=tskID
v_tmpname epc.username%TYPE;
begin
FOR r_tmp IN receiver(v_tsk) LOOP /**DBMS_OUTPUT.PUT_LINE('Name:' || v_ename || 'salary:' || v_salary);*/ if(v_tmpname=v_userName) then
{
insert into epare_crewisview(CREWBOARDID, TSK, SENDERNAME, RECEIVERNAME, ISVIEW)
values(v_id, v_tsk, v_userName, username,1);
}
else
{
insert into epare_crewisview(CREWBOARDID, TSK, SENDERNAME, RECEIVERNAME, ISVIEW)
values(v_id, v_tsk, v_userName, username,0);
}
end if; END LOOP;
end;
end;
定义变量要放到开始的位置:
PROCEDURE ADDCREWBOARD1(V_TSK IN VARCHAR2,
V_USERID IN VARCHAR2,
V_USERNAME IN VARCHAR2,
V_CONTENT IN VARCHAR2) IS
/**开始向数据表epare_crewISVIEW加记录*/
CURSOR RECEIVER(TSKID VARCHAR2) IS
SELECT EPC.USERNAME FROM EPARE_CREWSCHEDULE EPC WHERE EPC.TSK = TSKID;
V_TMPNAME EPC.USERNAME%TYPE;
V_ID INT;
BEGIN
SELECT CREWBOARDSEQ.NEXTVAL INTO V_ID FROM DUAL;
INSERT INTO EPARE_CREWBOARD
(ID, TSK, USERID, USERNAME, CONTENT)
VALUES
(V_ID, V_TSK, V_USERID, V_USERNAME, V_CONTENT);END;
/
怎么还有java的语法
{
//
}在里面 procedure addCrewBoard1(v_tsk in varchar2, v_userId in varchar2, v_userName in varchar2, v_content in varchar2)
is
v_id int;
v_tmpname epc.username%TYPE;
begin
select crewboardseq.nextval into v_id from dual;
insert into epare_crewboard(id, tsk, userid, username, content)
values(v_id, v_tsk, v_userId, v_userName, v_content);
FOR r_tmp IN (SELECT epc.username FROM epare_crewschedule epc where epc.tsk=v_tsk)
LOOP
if(r_tmp.v_tmpname=v_userName) then
insert into epare_crewisview(CREWBOARDID, TSK, SENDERNAME, RECEIVERNAME, ISVIEW)
values(v_id, v_tsk, v_userName, r_tmp.username,1);
else
insert into epare_crewisview(CREWBOARDID, TSK, SENDERNAME, RECEIVERNAME, ISVIEW)
values(v_id, v_tsk, v_userName, r_tmpusername,0);
end if;
END LOOP;
End;
/
procedure addCrewBoard1(v_tsk in varchar2, v_userId in varchar2, v_userName in varchar2, v_content in varchar2)is
v_id int;
v_tmpname epc.username%TYPE;
/**开始向数据表epare_crewISVIEW加记录*/
CURSOR receiver(tskID VARCHAR2) IS SELECT epc.username FROM epare_crewschedule epc where epc.tsk=tskID;
begin
select crewboardseq.nextval into v_id from dual;
insert into epare_crewboard(id, tsk, userid, username, content)
values(v_id, v_tsk, v_userId, v_userName, v_content);
FOR r_tmp IN receiver(v_tsk) LOOP /**DBMS_OUTPUT.PUT_LINE('Name:' ¦ ¦ v_ename ¦ ¦ 'salary:' ¦ ¦ v_salary);*/ if v_tmpname=v_userName then
insert into epare_crewisview(CREWBOARDID, TSK, SENDERNAME, RECEIVERNAME, ISVIEW)
values(v_id, v_tsk, v_userName, username,1);
else
insert into epare_crewisview(CREWBOARDID, TSK, SENDERNAME, RECEIVERNAME, ISVIEW)
values(v_id, v_tsk, v_userName, username,0);
end if; END LOOP;
end;
DEClARE
CURSOR receiver(tskID VARCHAR2) IS SELECT epc.username FROM epare_crewschedule epc where epc.tsk=tskID;
v_tmpname epc.username%TYPE;
create or replace package body MYPPEPARENEW is
/**根据需求进行修改机组人员的留言信息2008-08-28**/
procedure addCrewBoard1(v_tsk in varchar2, v_userId in varchar2, v_userName in varchar2, v_content in varchar2)
is
v_id int;
begin
select crewboardseq.nextval into v_id from dual;
insert into epare_crewboard(id, tsk, userid, username, content)
values(v_id, v_tsk, v_userId, v_userName, v_content);
/**开始向数据表epare_crewISVIEW加记录*/
FOR r_tmp IN receiver(v_tsk) LOOP /**DBMS_OUTPUT.PUT_LINE('Name:' || v_ename || 'salary:' || v_salary);*/ if(v_tmpname=v_userName) then
insert into epare_crewisview(CREWBOARDID, TSK, SENDERNAME, RECEIVERNAME, ISVIEW)
values(v_id, v_tsk, v_userName, username,1);
else
insert into epare_crewisview(CREWBOARDID, TSK, SENDERNAME, RECEIVERNAME, ISVIEW)
values(v_id, v_tsk, v_userName, username,0);
end if; END LOOP;
end;
end MYPPEPARENEW;
结果还是报
Compilation errors for PACKAGE BODY EPAREBJ.MYPPEPARENEWError: PLS-00103: 出现符号 ""在需要下列之一时:
begin case declare exit for
goto if loop mod null pragma raise return select update while
with <an identifier> <a double-quoted delimited-identifier>
<a bind variable> << close current delete fetch lock insert
open rollback savepoint set sql execute commit forall merge
<a single-quoted SQL string> pipe
Line: 17
Compilation errors for PACKAGE BODY EPAREBJ.MYPPEPARENEWError: PLS-00103: 出现符号 ""在需要下列之一时:
begin case declare end exit
for goto if loop mod null pragma raise return select update
while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge
<a single-quoted SQL string> pipe
符号 "" 被忽略。
Line: 31
CREATE OR REPLACE procedure addCrewBoard1(v_tsk in varchar2, v_userId in varchar2, v_userName in varchar2, v_content in varchar2)is
v_id int;
v_tmpname epare_crewschedule.username%TYPE;
/**开始向数据表epare_crewISVIEW加记录*/
CURSOR receiver(tskID VARCHAR2) IS SELECT epc.username FROM epare_crewschedule epc where epc.tsk=tskID;
begin
select seq.nextval into v_id from dual;
insert into epare_crewboard(id, tsk, userid, username, content)
values(v_id, v_tsk, v_userId, v_userName, v_content);
FOR r_tmp IN receiver(v_tsk) LOOP /**DBMS_OUTPUT.PUT_LINE('Name:' ?? ?? v_ename ?? ?? 'salary:' ?? ?? v_salary);*/ if v_tmpname=v_userName then
insert into epare_crewisview(CREWBOARDID, TSK, SENDERNAME, RECEIVERNAME, ISVIEW)
values(v_id, v_tsk, v_userName, v_userName,1);
else
insert into epare_crewisview(CREWBOARDID, TSK, SENDERNAME, RECEIVERNAME, ISVIEW)
values(v_id, v_tsk, v_userName, v_username,0);
end if; END LOOP;
end;
/
试试这个。
v_tmpname epc.username%TYPE
CURSOR receiver(tskID VARCHAR2) IS SELECT epc.username FROM epare_crewschedule epc where epc.tsk=tskID;
create or replace package body MYPREPARENEW is
procedure addCrewBoard1(v_tsk in varchar2, v_userId in varchar2, v_userName in varchar2, v_content in varchar2)
is
v_id int;
begin
select crewboardseq.nextval into v_id from dual;
insert into epare_crewboard(id, tsk, userid, username, content)
values(v_id, v_tsk, v_userId, v_userName, v_content);
end;
end MYPREPARENEW;
这样编译就没问题,可是如果
DEClARE
v_tmpname epc.username%TYPE
CURSOR receiver(tskID VARCHAR2) IS SELECT epc.username FROM epare_crewschedule epc where epc.tsk=tskID;
create or replace package body MYPREPARENEW is
procedure addCrewBoard1(v_tsk in varchar2, v_userId in varchar2, v_userName in varchar2, v_content in varchar2)
is
v_id int;
begin
select crewboardseq.nextval into v_id from dual;
insert into epare_crewboard(id, tsk, userid, username, content)
values(v_id, v_tsk, v_userId, v_userName, v_content);
/**开始向数据表epare_crewISVIEW加记录*/
FOR r_tmp IN receiver(v_tsk) LOOP
end loop;
end;
end MYPREPARENEW;
就是加了两行
FOR r_tmp IN receiver(v_tsk) LOOP
end loop;
编译就通不过了,报
Compilation errors for PACKAGE BODY EPAREBJ.MYPREPARENEWError: PLS-00103: 出现符号 "END"在需要下列之一时:
begin case declare exit for
goto if loop mod null pragma raise return select update while
with <an identifier> <a double-quoted delimited-identifier>
<a bind variable> << close current delete fetch lock insert
open rollback savepoint set sql execute commit forall merge
<a single-quoted SQL string> pipe
Line: 14
实在是不清楚这是为什么了?
create or replace package body MYPREPARENEW is
procedure addCrewBoard1(v_tsk in varchar2, v_userId in varchar2, v_userName in varchar2, v_content in varchar2)
is
CURSOR receiver(tskID VARCHAR2) IS SELECT epc.username FROM epare_crewschedule epc where epc.tsk=tskID;
v_tmpname varchar2(80);
v_id int;
begin
select crewboardseq.nextval into v_id from dual;
insert into epare_crewboard(id, tsk, userid, username, content) values(v_id, v_tsk, v_userId, v_userName, v_content);
begin
open receiver(v_tsk);
LOOP
fetch receiver into v_tmpname;
if(v_tmpname=v_userName)then
insert into epare_crewisview(CREWBOARDID, TSK, SENDERNAME, RECEIVERNAME, ISVIEW)
values(v_id, v_tsk, v_userName, v_tmpname,1);
else
insert into epare_crewisview(CREWBOARDID, TSK, SENDERNAME, RECEIVERNAME, ISVIEW)
values(v_id, v_tsk, v_userName, v_tmpname,0);
end if;
exit when receiver%notfound;
end loop;
close receiver;
end;
end;
end MYPREPARENEW;
不知道为什么用for循环就不行,我现结贴,大家要是有什么补充请赐教,入门新手感激仁兄们的帮助!