我正在尝试在Oracle PL / SQL中创建一个过程,现在我正在使用以下代码:
CREATE OR REPLACE PROCEDURE MyProcedure(
cName number,
cStatus varchar2
) AS
BEGIN
declare recCount;
BEGIN
select count(*)
into recCount
from myTable
where colName=cName
AND colStatus=cStatus;
END;
If recCount = 0 Then
do something...
Else
do something else...
End if;
COMMIT;
END;
基本上我想从一个表中计算行数,然后检查表中是否已存在一定数量的行。目前我正在收到PLS-00103错误。
我搜索了很多解决方案,但遗憾的是没有任何效果。我对oracle sql比较新,所以也许我犯了一个常见的错误。
感谢您的时间和精力。
答案 0 :(得分:3)
您的syntax:
中存在一些问题DECLARE
错误;例如,您可以使用DECLARE
构建一个匿名块,您需要声明变量(DECLARE ... BEGIN ... END
)或触发器定义。recCount
指定一个类型,变量定义在BEGIN
BEGIN...END
块;这不是一个错误,但这里的块是无用的;只有将异常处理添加到代码的特定部分才有用我甚至会考虑添加一些异常处理;这里我给出OTHERS
的示例,但您应该根据代码更好地指定要处理的异常。
另外,正如MT0评论中已经注意到的那样,COMMIT不是一个好主意。
CREATE OR REPLACE PROCEDURE MyProcedure(cName NUMBER, cStatus VARCHAR2) AS
recCount NUMBER;
BEGIN
SELECT COUNT(*)
INTO recCount
FROM myTable
WHERE colName = cName
AND colStatus = cStatus;
IF recCount = 0
THEN
-- your code
ELSE
-- your code
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
-- exception handling
END;
如果您只需要检查行是否存在,无论条件符合多少行,您都可以通过添加条件来避免计算所有匹配的行:
SELECT COUNT(*)
INTO recCount
FROM myTable
WHERE colName = cName
AND colStatus = cStatus
AND rownum = 1;
您甚至可以使用它来构建过程中的块的示例,并进行异常处理(我只发布此示例,我不喜欢这种方法):
BEGIN
SELECT 1
INTO recCount
FROM myTable
WHERE colName = cName
AND colStatus = cStatus
AND rownum = 1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
recCount := 0;
END;