日期:2014-05-17  浏览次数:20897 次

指出下列过程有什么错误 ?
过程由Codematic工具生成 但运行时都有错误
SQL code


/******************************************************************
* 表名:EMP
* 时间:2011-12-22 10:19:44
* Made by Codematic
******************************************************************/

------------------------------------
--用途:得到主键字段最大值 
--项目名称:
--说明:
--时间:2011-12-22 10:19:44
------------------------------------
CREATE OR REPLACE  PROCEDURE EMP_GetMaxId (
)
IS
TempID Number;
BEGIN
  SELECT max(EMPNO) into TempID FROM EMP
  IF NVL(TempID) then
    RETURN 1;
  ELSE
    RETURN TempID;
  end IF;
END;

------------------------------------
--用途:是否已经存在 
--项目名称:
--说明:
--时间:2011-12-22 10:19:44
------------------------------------
CREATE PROCEDURE EMP_Exists (
EMPNO_in NUMBER
)
AS
TempID Number;
BEGIN
  SELECT count(1) into TempID  FROM EMP WHERE EMPNO= EMPNO_in 
  IF TempID = 0 then
    RETURN 0;
  ELSE
    RETURN 1;
  end IF;
END;


------------------------------------
--用途:增加一条记录 
--项目名称:
--说明:
--时间:2011-12-22 10:19:44
------------------------------------
CREATE PROCEDURE EMP_ADD (
EMPNO_in NUMBER
)
 AS 
BEGIN
  INSERT INTO EMP(
  EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO
  )VALUES(
  EMPNO_in ,ENAME_in ,JOB_in ,MGR_in ,HIREDATE_in ,SAL_in ,COMM_in ,DEPTNO_in 
  );
COMMIT;
END;

------------------------------------
--用途:修改一条记录 
--项目名称:
--说明:
--时间:2011-12-22 10:19:44
------------------------------------
CREATE PROCEDURE EMP_Update
EMPNO_in NUMBER,
ENAME_in VARCHAR2,
JOB_in VARCHAR2,
MGR_in NUMBER,
HIREDATE_in DATE,
SAL_in NUMBER,
COMM_in NUMBER,
DEPTNO_in NUMBER
 AS 
BEGIN
  UPDATE EMP SET 
  ENAME = ENAME_in ,JOB = JOB_in ,MGR = MGR_in ,HIREDATE = HIREDATE_in ,SAL = SAL_in ,COMM = COMM_in ,DEPTNO = DEPTNO_in 
  WHERE EMPNO= EMPNO_in 

COMMIT;
END;

------------------------------------
--用途:删除一条记录 
--项目名称:
--说明:
--时间:2011-12-22 10:19:44
------------------------------------
CREATE PROCEDURE EMP_Delete
EMPNO_in NUMBER
BEGIN
 AS 
  DELETE EMP
   WHERE EMPNO= EMPNO_in 
COMMIT;
END;

------------------------------------
--用途:得到实体对象的详细信息 
--项目名称:
--说明:
--时间:2011-12-22 10:19:44
------------------------------------
CREATE PROCEDURE EMP_GetModel
EMPNO_in NUMBER
 AS 
BEGIN
  SELECT 
  EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO
   FROM EMP
   WHERE EMPNO= EMPNO_in 
COMMIT;
END;

------------------------------------
--用途:查询记录信息 
--项目名称:
--说明:
--时间:2011-12-22 10:19:44
------------------------------------
CREATE PROCEDURE EMP_GetList
 AS 
BEGIN
  SELECT 
  EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO
   FROM EMP
COMMIT;
END;





------解决方案--------------------
SELECT max(EMPNO) into TempID FROM EMP;--少了;
------解决方案--------------------
大部分是没加分号";"的原因
------解决方案--------------------
第一个,存储过程无法返回值,应该定义一个存储方法,参考如下:
SQL code

CREATE OR REPLACE  FUNCTION EMP_GetMaxId
RETURN NUMBER
IS
    TempID NUMBER;    
BEGIN
    SELECT NVL(max(EMPNO), 1) into TempID FROM EMP;   
    RETURN TempID; 
END;

------解决方案--------------------
1)少啦“;”.
2)存储过程没有返回值。
------解决方案--------------------
1.缺少分号
2. IF NVL(TempID) 这样的写法有点怪。。 没见过。