1.字符型变量声明,要给出长度
returnValue CHAR := '00';
lxbh CHAR;
改为:
returnValue CHAR(10) := '00';
lxbh CHAR(10);
2. 在Procedure中,select必须是select into语句
returnValue CHAR := '00';
lxbh CHAR;
改为:
returnValue CHAR(10) := '00';
lxbh CHAR(10);
2. 在Procedure中,select必须是select into语句
LINE/COL ERROR
-------- -----------------------------------------------------------------
26/3 PLS-00103: Encountered the symbol "BEGIN" when expecting one of
the following:
; is with authid deterministic parallel_enable as
The symbol ";" was substituted for "BEGIN" to continue.45/2 PLS-00103: Encountered the symbol "END"
SELECT * INTO ???FROM SYSTEM.DUANXXLX_NEW WHERE LEIXBH = lxbh;
IF SQL%ROWCOUNT < 0
rtVALUE := '04';
END IF;
改为:
IF SQL%ROWCOUNT < 0 then
rtVALUE := '04';
END IF;
这个错我已经该了,可是还是不行:
6/3 PLS-00103: Encountered the symbol "BEGIN" when expecting one of
the following:
; is with authid deterministic parallel_enable as
The symbol ";" was substituted for "BEGIN" to continue.45/2 PLS-00103: Encountered the symbol "END"
CREATE OR REPLACE PACKAGE sdsms AS
FUNCTION checkUSER(uname IN VARCHAR2,
passwd IN VARCHAR2,sjtype IN CHAR,dxtype IN CHAR) RETURN CHAR;
PROCEDURE sendtoTABLE(username IN VARCHAR2,password IN VARCHAR2,
mobiletype IN VARCHAR2,smstype IN VARCHAR2,sender IN VARCHAR2,
receiver IN VARCHAR2,rtVALUE OUT CHAR);
END sdsms;
/
CREATE OR REPLACE PACKAGE BODY sdsms AS
FUNCTION checkUSER(uname IN VARCHAR2,passwd IN VARCHAR2,
sjtype IN CHAR,dxtype IN CHAR) RETURN CHAR IS
returnValue CHAR(4) := '00';
lxbh CHAR(6);
wjlx SYSTEM.DUANXXLX_NEW.WENJLX%TYPE;
ser_num SYSTEM.USERS.C_SPEC_SERV_NUM%TYPE;
BEGIN
lxbh :=sjtype + dxtype;
SELECT C_SPEC_SERV_NUM INTO ser_num FROM SYSTEM.USERS WHERE C_USER_NAME = uname AND C_PASSWORD = passwd;
IF SQL%NOTFOUND THEN
returnValue := '02';
END IF;
SELECT WENJLX INTO wjlx FROM SYSTEM.DUANXXLX_NEW WHERE LEIXBH = lxbh;
IF SQL%NOTFOUND THEN
returnValue :='05';
END IF;
EXCEPTION
WHEN OTHERS THEN
RETURN '05';
RETURN returnValue;
END checkUSER;
PROCEDURE sendtoTABLE(username IN VARCHAR2,password IN VARCHAR2,
mobiletype IN VARCHAR2,smstype IN VARCHAR2,
sender IN VARCHAR2,receiver IN VARCHAR2,rtVALUE OUT CHAR)
BEGIN
COMMIT;
SET TRANSACTION READ WRITE ;
rtVALUE := checkUSER(username ,password ,
mobiletype ,smstype );
IF(rtVALUE = '00') THEN
INSERT INTO SYSTEM.SPRECORD (C_USERNAME,C_PASSWORD,
C_SENDER,C_RECEIVER ,I_MOBILE_TYPE,I_SMS_TYPE,I_STATUS,
I_SEND_TIME) VALUES(username ,password ,
sender,receiver, mobiletype ,smstype ,
0,0,SYSDATE);
IF SQL%ROWCOUNT < 0 THEN
rtVALUE := '04';
END IF;
END IF;
EXCEPTION
WHEN OTHERS THEN
rtVALUE := '04';
END sendtoTABLE;
END sdsms;
/-----------------------------------
错误提示:
警告: 创建的包体带有编译错误。PACKAGE BODY SDSMS 出现错误:LINE/COL ERROR
-------- -----------------------------------------------------------------
28/3 PLS-00103: Encountered the symbol "BEGIN" when expecting one of
the following:
; is with authid deterministic parallel_enable as
The symbol ";" was substituted for "BEGIN" to continue.47/2 PLS-00103: Encountered the symbol "END"
mobiletype IN VARCHAR2,smstype IN VARCHAR2,
sender IN VARCHAR2,receiver IN VARCHAR2,rtVALUE OUT CHAR)
改为
PROCEDURE sendtoTABLE(username IN VARCHAR2,password IN VARCHAR2,
mobiletype IN VARCHAR2,smstype IN VARCHAR2,
sender IN VARCHAR2,receiver IN VARCHAR2,rtVALUE OUT CHAR)
AS
SQL%NOTFOUND 不行吗??????????????
SELECT FIELD INTO V_NUM FROM TAB WHERE { your condition };
EXCEPTION
WHEN NO_DATA_FOUND THEN //对没有满足条件的记录的处理
……
WHEN TOO_MANY_ROWS THEN //对满足条件返回多条记录的处理
……
END;