【发布时间】:2018-01-15 16:29:32
【问题描述】:
我有以下查询,我想在存储过程中使用它并返回值为 0 或 1 或 2 的状态。
CREATE OR REPLACE PROCEDURE TEST_CHECK
(NAME IN VARCHAR2, IN_ID IN NUMBER,
IN_STATUS OUT NUMBER)
AS
CURSOR CHK_STATUS IS
select STATUS
from TEST_LOG
where NAME = 'TT'
and ID = 19
and CHK_DATE >= to_date( TRUNC ( SYSDATE - 1 , 'MM' ) , 'YYYYMMDD' )
and CHK_DATE < to_date ( TRUNC ( SYSDATE), 'YYYYMMDD' );
BEGIN
FOR CHK_STAT IN CHK_STATUS
LOOP
IF CHK_STAT.STATUS = 0
THEN
IN_STATUS := 0;
ELSE
IF CHK_STAT.STATUS = 1
THEN
IN_STATUS := 1;
ELSE
IN_STATUS := 2;
END IF;
END IF;
END LOOP;
END TEST_CHECK;
但我想使用这样的逻辑,如果此查询中的任何状态返回 2,那么它应该返回 2。如果所有状态都返回 0,那么只返回 0。如果所有状态都返回 1,那么只返回 1。如果状态返回在 0 和 1 之间,则返回 1。如果状态返回在 1 和 2 之间,则返回 2。
因此,我不想返回太多值,而是想将结果限制为只有一个值状态,我想将其作为 OUT 参数传递给另一个函数。我已经编写了上述程序,但它没有给出预期的输出。我不确定是否需要使用游标或只编写查询来代替。
【问题讨论】:
标签: sql oracle if-statement stored-procedures plsql