当前位置: 代码迷 >> Oracle开发 >> 指出上列过程有什么东东
  详细解决方案

指出上列过程有什么东东

热度:13   发布时间:2016-04-24 07:24:39.0
指出下列过程有什么错误 ?
过程由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 ()ISTempID 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)ASTempID 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_UpdateEMPNO_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_DeleteEMPNO_in NUMBERBEGIN AS   DELETE EMP   WHERE EMPNO= EMPNO_in COMMIT;END;--------------------------------------用途:得到实体对象的详细信息 --项目名称:--说明:--时间:2011-12-22 10:19:44------------------------------------CREATE PROCEDURE EMP_GetModelEMPNO_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 EMPCOMMIT;END;


------解决方案--------------------
SELECT max(EMPNO) into TempID FROM EMP;--少了;
------解决方案--------------------
大部分是没加分号";"的原因
------解决方案--------------------
第一个,存储过程无法返回值,应该定义一个存储方法,参考如下:
SQL code
CREATE OR REPLACE  FUNCTION EMP_GetMaxIdRETURN NUMBERIS    TempID NUMBER;    BEGIN    SELECT NVL(max(EMPNO), 1) into TempID FROM EMP;       RETURN TempID; END;
------解决方案--------------------
1)少啦“;”.
2)存储过程没有返回值。
------解决方案--------------------
1.缺少分号
2. IF NVL(TempID) 这样的写法有点怪。。 没见过。
  相关解决方案