返回过程中的计数 - Oracle

时间:2017-09-30 23:43:49

标签: oracle

我把这个程序放到一个包中,我需要返回一个表的计数,但我不知道怎么做。我有这个,它没有用。

PROCEDURE OBTENER_TOTALCAMPAÑA(TOTAL OUT NUMBER)
IS
row_count number;
BEGIN
SELECT COUNT(*) AS TOTAL_CARTERA INTO row_count  FROM CLIENTE
RETURNING row_count INTO TOTAL;
END;    

2 个答案:

答案 0 :(得分:3)

试试这个。在这种情况下你不需要说回来。返回通常用于插入行后需要获取id的插入。在您的情况下,只需使用select ... INTO从....填充输出参数。

PROCEDURE OBTENER_TOTALCAMPAÑA(TOTAL OUT NUMBER)
IS
BEGIN
SELECT COUNT(*) AS TOTAL_CARTERA INTO TOTAL FROM CLIENTE;

END;  

Buena suerte

答案 1 :(得分:0)

尝试一下,对我来说,创建Oralal包

create or replace PACKAGE LEVEL_CRUD AS 
PROCEDURE INSERT_LEVEL_DATA (
P_LEVEL_ID      IN APP_LEVEL_MASTER.LEVEL_ID%TYPE,
P_LEVEL_NAME    IN APP_LEVEL_MASTER.LEVEL_NAME%TYPE,
P_CREATED_BY    IN APP_LEVEL_MASTER.CREATED_BY%TYPE,
P_CREATE_DATE   IN VARCHAR2,
P_UPDATE_DATE   IN VARCHAR2
);
PROCEDURE FETCH_LEVEL_DATA (    
 LEVEL_C               OUT  SYS_REFCURSOR 
);  
PROCEDURE UPDATE_LEVEL_DATA (
P_LEVEL_ID       IN APP_LEVEL_MASTER.LEVEL_ID%TYPE,
P_LEVEL_NAME     IN APP_LEVEL_MASTER.LEVEL_NAME%TYPE,  
P_CREATED_BY     IN APP_LEVEL_MASTER.CREATED_BY%TYPE,
P_CREATE_DATE   IN APP_LEVEL_MASTER.CREATE_DATE%TYPE,
P_UPDATE_DATE   IN varchar2,
P_UPDATE_COUNT  OUT NUMBER             
);
PROCEDURE GET_LEVEL_RECORD_ID_WISE(
P_LEVEL_ID      IN APP_LEVEL_MASTER.LEVEL_ID%TYPE,
LEVEL_C         OUT  SYS_REFCURSOR 
);

PROCEDURE DELETE_LEVEL_DATA(
P_LEVEL_ID     IN APP_LEVEL_MASTER.LEVEL_ID%TYPE,
DELETE_C       OUT NUMBER
);  

END LEVEL_CRUD;

在实际过程可用的地方创建包主体,sql查询将返回计数和数据

create or replace PACKAGE BODY LEVEL_CRUD AS
PROCEDURE INSERT_LEVEL_DATA (
P_LEVEL_ID      IN APP_LEVEL_MASTER.LEVEL_ID%TYPE,
P_LEVEL_NAME    IN APP_LEVEL_MASTER.LEVEL_NAME%TYPE,
P_CREATED_BY    IN APP_LEVEL_MASTER.CREATED_BY%TYPE,
P_CREATE_DATE   IN VARCHAR2,
P_UPDATE_DATE   IN VARCHAR2
) AS
BEGIN
INSERT INTO APP_LEVEL_MASTER
( LEVEL_ID,LEVEL_NAME,CREATED_BY,CREATE_DATE,UPDATE_DATE,STATUS)
VALUES ( ESC_LEVEL_ID.NEXTVAL,P_LEVEL_NAME,P_CREATED_BY,SYSDATE,SYSDATE,1);
END INSERT_LEVEL_DATA;


PROCEDURE FETCH_LEVEL_DATA (
LEVEL_C               OUT  SYS_REFCURSOR 
 ) AS
BEGIN
open LEVEL_C FOR 
SELECT * FROM APP_LEVEL_MASTER where STATUS = 1;
END FETCH_LEVEL_DATA;


PROCEDURE UPDATE_LEVEL_DATA (
P_LEVEL_ID       IN APP_LEVEL_MASTER.LEVEL_ID%TYPE,
P_LEVEL_NAME     IN APP_LEVEL_MASTER.LEVEL_NAME%TYPE,  
P_CREATED_BY     IN APP_LEVEL_MASTER.CREATED_BY%TYPE,
P_CREATE_DATE   IN APP_LEVEL_MASTER.CREATE_DATE%TYPE,
P_UPDATE_DATE   IN varchar2,
P_UPDATE_COUNT  OUT NUMBER        
) AS
 BEGIN
  UPDATE APP_LEVEL_MASTER AUM 
 SET 
 AUM.LEVEL_NAME = P_LEVEL_NAME,
 AUM.CREATED_BY = P_CREATED_BY,
 AUM.CREATE_DATE= TO_DATE(P_CREATE_DATE,'DD/MM/YYYY'),
 AUM.UPDATE_DATE=TO_DATE(sysdate) 
 WHERE AUM.LEVEL_ID = P_LEVEL_ID;
 P_UPDATE_COUNT:=SQL%ROWCOUNT;  
 END UPDATE_LEVEL_DATA;


 PROCEDURE GET_LEVEL_RECORD_ID_WISE(
  P_LEVEL_ID      IN APP_LEVEL_MASTER.LEVEL_ID%TYPE,
 LEVEL_C         OUT  SYS_REFCURSOR 

 )AS
 BEGIN    
 OPEN LEVEL_C FOR  
 SELECT * FROM APP_LEVEL_MASTER WHERE LEVEL_ID=P_LEVEL_ID;
  END GET_LEVEL_RECORD_ID_WISE;


  PROCEDURE DELETE_LEVEL_DATA(
  P_LEVEL_ID     IN APP_LEVEL_MASTER.LEVEL_ID%TYPE,
  DELETE_C       OUT NUMBER
  )AS
  BEGIN
  UPDATE  APP_LEVEL_MASTER SET STATUS='0' WHERE LEVEL_ID=P_LEVEL_ID;
  DELETE_C:=SQL%ROWcOUNT;
  END DELETE_LEVEL_DATA;  

  END LEVEL_CRUD;