我有一个比较两个变量的程序。我想设置如果两个变量值相等,则将光标设置为 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 另外,我想在光标中设置这些布尔值
你搞错了;你不能将 refcursor 设置为 true 或 false,这没有意义。也许您想为此目的包含额外的 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>