Oracle 中比较 2 个变量计数并设置游标的过程

问题描述 投票:0回答:1

我有一个比较两个变量的程序。我想设置如果两个变量值相等,则将光标设置为 true 否则为 false。我试过了,但没用

以下是查询

CREATE OR REPLACE PROCEDURE CHECK_REJECTED_SITES_CR 
(
  P_CHANGEREQUESTID IN OUT TBL_CMP_EMG_DATA_INFO.CHANGE_REQUEST_ID%TYPE,
  OUTPUTTABLE OUT SYS_REFCURSOR
)


AS 

VAR_ROW_COUNT        NUMBER;
VAR_REJECTED_COUNT    NUMBER;

BEGIN

VAR_ROW_COUNT     :=0;
VAR_REJECTED_COUNT     :=0;

OPEN OUTPUTTABLE FOR

select COUNT(*) INTO VAR_ROW_COUNT 
from TBL_CMP_EMG_DATA_INFO where CHANGE_REQUEST_ID = P_CHANGEREQUESTID;

select COUNT(*) INTO VAR_REJECTED_COUNT 
from TBL_CMP_EMG_DATA_INFO where CHANGE_REQUEST_ID = P_CHANGEREQUESTID and APPROVE_REJECT = 'Rejected';



IF VAR_ROW_COUNT = VAR_REJECTED_COUNT
THEN OUTPUTTABLE = TRUE;
ELSE
OUTPUTTABLE = FALSE;


END CHECK_REJECTED_SITES_CR;

note 另外,我想在光标中设置这些布尔值

oracle stored-procedures
1个回答
0
投票

你搞错了;你不能将 refcursor 设置为 truefalse,这没有意义。也许您想为此目的包含额外的 OUT 参数?像这样的东西:

示例表(以便程序可以编译):

SQL> CREATE TABLE tbl_cmp_emg_data_info
  2  AS
  3     SELECT 1 change_request_id, 'Rejected' approve_reject FROM DUAL;

Table created.

程序:

SQL> CREATE OR REPLACE PROCEDURE check_rejected_sites_cr (
  2     p_changerequestid  IN     tbl_cmp_emg_data_info.change_request_id%TYPE,
  3     outputtable           OUT SYS_REFCURSOR,
  4     p_bool                OUT BOOLEAN)
  5  IS
  6     var_row_count       NUMBER;
  7     var_rejected_count  NUMBER;
  8  BEGIN
  9     SELECT COUNT (*), SUM (CASE WHEN approve_reject = 'Rejected' THEN 1 ELSE 0 END)
 10       INTO var_row_count, var_rejected_count
 11       FROM tbl_cmp_emg_data_info
 12      WHERE change_request_id = p_changerequestid;
 13
 14     IF var_row_count = var_rejected_count
 15     THEN
 16        p_bool := TRUE;
 17
 18        OPEN outputtable FOR SELECT * FROM tbl_cmp_emg_data_info;
 19     ELSE
 20        p_bool := FALSE;
 21     END IF;
 22  END;
 23  /

Procedure created.

测试:

SQL> SET SERVEROUTPUT ON
SQL>
SQL> DECLARE
  2     rc      SYS_REFCURSOR;
  3     l_bool  BOOLEAN;
  4  BEGIN
  5     check_rejected_sites_cr (2, rc, l_bool);
  6
  7     DBMS_OUTPUT.put_Line (
  8        CASE WHEN l_bool THEN 'Returned value = TRUE' ELSE 'Returned value = FALSE' END);
  9  END;
 10  /
Returned value = FALSE

PL/SQL procedure successfully completed.

SQL>
© www.soinside.com 2019 - 2024. All rights reserved.