从Oracle中的sys_refcursor返回记录计数

时间:2015-12-30 19:35:54

标签: oracle plsql

Oracle版本:11.2.0.2

我有一个表格ABC,它有n列,其中我需要COUNT个状态,年龄和类型列,作为OUT参数提供给其他应用程序。

我的其他应用程序(Web应用程序)将显示如下:

状态10

AGE 05

20型

其中10,05,20是来自表ABC的COUNT值,我需要将其传递给Web应用程序。

2 个答案:

答案 0 :(得分:0)

听起来你想要给我们一个SELECT语句:

SELECT COUNT(DISTINCT STATUS) AS STATUS_COUNT,
       COUNT(DISTINCT AGE)    AS AGE_COUNT,
       COUNT(DISTINCT TYPE)   AS TYPE_COUNT
  FROM YOUR_TABLE

或者,如果您只想计算值,请使用

SELECT COUNT(STATUS) AS STATUS_COUNT,
       COUNT(AGE)    AS AGE_COUNT,
       COUNT(TYPE)   AS TYPE_COUNT
  FROM YOUR_TABLE

祝你好运。

答案 1 :(得分:0)

在这种情况下,可以采用两种方法来实现目标。

1)使用ref光标来计算计数

2)使用标量变量来表示参数。

由于我没有工作区,请原谅任何语法错误。

--1) Using refcursor
    CREATE OR REPLACE PROCEDURE test_out_ref(
        p_ref_out OUT sys_refcursor )
    AS
    BEGIN
      OPEN p_ref_out FOR 
      SELECT COUNT(DISTINCT STATUS) STATUS_COUNT,
      COUNT(DISTINCT AGE) AGE_COUNT,
      COUNT(DISTINCT TYPE) TYPE_COUNT
      FROM YOUR_TABLE ;
    END;

    --2 nd approach may be just passing the count value to scalar variables as OUT param

    CREATE OR REPLACE PROCEDURE test_out_ref(
        p_status_cnt_out  OUT NUMBER,
        p_age_cnt_out     OUT NUMBER,
        p_type_cnt_out    OUT NUMBER)
    AS
    BEGIN

      SELECT COUNT(DISTINCT STATUS) STATUS_COUNT,
      COUNT(DISTINCT AGE) AGE_COUNT,
      COUNT(DISTINCT TYPE) TYPE_COUNT
      INTO
      p_status_cnt_out,
      p_age_cnt_out,
      p_type_cnt_out
      FROM YOUR_TABLE ;
    END;