PLS-00103:在期待以下之一时遇到符号“IS”::=。 ( @ % ; 非空范围默认字符
Posted
技术标签:
【中文标题】PLS-00103:在期待以下之一时遇到符号“IS”::=。 ( @ % ; 非空范围默认字符【英文标题】:PLS-00103: Encountered the symbol "IS" when expecting one of the following: := . ( @ % ; not null range default character 【发布时间】:2020-11-09 10:38:16 【问题描述】:我正面临这个错误:
LINE/COL ERROR
-------- -----------------------------------------------------------------
4/11 PLS-00103: Encountered the symbol "IS" when expecting one of the
following:
:= . ( @ % ; not null range default character
我的包裹是:
CREATE OR REPLACE PACKAGE BODY EMP_PK AS
PROCEDURE INSERT_TR(EMPNO EMP_20171250.EMPNO%TYPE,ENAME EMP_20171250.ENAME%TYPE,SAL EMP_20171250.SAL%TYPE) IS
INSERT_ERROR EXCEPTION;
CRUSOR C1 IS INSERT INTO EMP_20171250(EMPNO,ENAME,SAL) VALUES(EMPNO,ENAME,SAL);
BEGIN
IF(C1%FOUND) THEN
DBMS_OUTPUT.PUT_LINE('RECORD INSERTED');
ELSE
RAISE INSERT_ERROR;
END IF;
EXCEPTION
WHEN INSERT_ERROR THEN
DBMS_OUTPUT.PUT_LINE('ERROR WHILE RECORD INSERTION');
END INSERT_TR;
END EMP_PK;
【问题讨论】:
【参考方案1】: 不是CRUSOR
,而是CURSOR
游标不能包含INSERT
语句;这是SELECT
您正在检查 cursor 是否返回了某些内容,但是 - 您从未打开它也没有从中获取它,所以它几乎没用
insert_error
看起来在 插入 一行时出错了,但是 - 如果光标没有返回任何内容,你实际上是在提升它
基本上,您根本不需要光标。这样的程序会做:
PROCEDURE insert_tr (p_empno emp_20171250.empno%TYPE,
p_ename emp_20171250.ename%TYPE,
p_sal emp_20171250.sal%TYPE)
IS
BEGIN
INSERT INTO emp_20171250 (empno, ename, sal)
VALUES (p_empno, p_ename, p_sal);
END insert_tr;
如果insert
失败,Oracle 无论如何都会引发异常 - 是的,如果你愿意,你可以处理它/它们。
另外,最好区分参数名和列名;例如,在他们的名字前加上p_
(就像我一样)。
【讨论】:
以上是关于PLS-00103:在期待以下之一时遇到符号“IS”::=。 ( @ % ; 非空范围默认字符的主要内容,如果未能解决你的问题,请参考以下文章
PLS-00103:在期待以下之一时遇到符号“&”:%符号“%被插入在“&”之前继续[关闭]
错误:PLS-00103:遇到符号“;”当期望以下之一时:* & = - + < / > at in is mod remaining not rem then
PLS-00103:在预期以下情况之一时遇到符号“TEST_PKG”:;