Stored procedures 如何限制在存储过程中输入的数据?

Stored procedures 如何限制在存储过程中输入的数据?,stored-procedures,plsql,Stored Procedures,Plsql,我有一个存储过程,提示用户输入并存储/更新我的表。我的问题是,当试图在输入数字时添加限制时,它并没有按计划工作 这是表格: Drop table incident; CREATE TABLE INCIDENT (ICD_ID VARCHAR2 (8) NOT NULL PRIMARY KEY, PLR_ID VARCHAR2 (11), M_ID VARCHAR2 (10), PP_ID VARCHAR2 (1

我有一个存储过程,提示用户输入并存储/更新我的表。我的问题是,当试图在输入数字时添加限制时,它并没有按计划工作

这是表格:

       Drop table incident;
       CREATE TABLE INCIDENT 
       (ICD_ID VARCHAR2 (8) NOT NULL PRIMARY KEY,
       PLR_ID VARCHAR2 (11),
       M_ID VARCHAR2 (10),
       PP_ID VARCHAR2 (10),
       I_POINTS NUMBER (8));


       INSERT INTO INCIDENT VALUES
       ('ICD01', 'CHE01', 'M01', 'PP01', NULL);

       INSERT INTO INCIDENT VALUES
       ('ICD02', 'CHE03', 'M07', 'PP02', NULL);

       INSERT INTO INCIDENT VALUES
       ('ICD03', 'CHE03', 'M04', 'PP03', NULL);

       INSERT INTO INCIDENT VALUES
       ('ICD04', 'KLN04', 'M07', 'PP02', NULL);

       INSERT INTO INCIDENT VALUES
       ('ICD05', 'CHE01', 'M04', 'PP03', NULL);
   DECLARE 
   v_icd_id incident.icd_id%type := &INCIDENT_ID; 
   v_inc_I_POINTS incident.i_points%type := &PENALTY_POINTS; 
   v_I_POINTS incident.I_POINTS%type;
   V_PP_ID INCIDENT.PP_ID%TYPE;    
   E_TOO_MANY_POINTS exception;
   E_UPDATE_HIGH exception;   
   E_A exception;
   E_B exception;
   E_C exception;
   BEGIN 
   SELECT I_POINTS INTO v_I_POINTS 
   FROM incident WHERE icd_id = v_icd_id;

   IF v_I_POINTS > 10 THEN 
   RAISE E_UPDATE_HIGH; 
   END IF;

   IF v_inc_I_POINTS >10 THEN
   RAISE E_TOO_MANY_POINTS; 
   END IF;


   IF V_PP_ID = 'PP03' OR V_INC_I_POINTS > 10 OR V_INC_I_POINTS < 10 THEN
   RAISE E_A;
   END IF;


  UPDATE incident SET i_points =  (v_inc_i_points + NVL(i_points,0))               
   WHERE icd_id=v_icd_id;



  DBMS_OUTPUT.PUT_LINE('');
  DBMS_OUTPUT.PUT_LINE('=====================');
  DBMS_OUTPUT.PUT_LINE('PENALTY POINTS UPDATED!');
  DBMS_OUTPUT.PUT_LINE('=====================');
  DBMS_OUTPUT.PUT_LINE('');

  EXCEPTION 
  WHEN E_TOO_MANY_POINTS THEN 
  DBMS_OUTPUT.PUT_LINE('==========================================================');
  DBMS_OUTPUT.PUT_LINE('TOO MANY POINTS ALLOCATED THERE! ACTION ABORTED.');
  DBMS_OUTPUT.PUT_LINE('==========================================================');


  WHEN E_UPDATE_HIGH THEN 
        DBMS_OUTPUT.PUT_LINE('=============================================================');
  DBMS_OUTPUT.PUT_LINE('CAN NOT STORE THAT MANY PENALTY POINTS THERE! ACTION ABORTED.');
    DBMS_OUTPUT.PUT_LINE('=============================================================');


  WHEN E_A THEN 
  DBMS_OUTPUT.PUT_LINE('=============================================================');
  DBMS_OUTPUT.PUT_LINE('CAN ONLY ALLOCATED 10 POINTS HERE! ACTION ABORTED.');
  DBMS_OUTPUT.PUT_LINE('=============================================================');


  WHEN E_B THEN 
  DBMS_OUTPUT.PUT_LINE('=============================================================');
  DBMS_OUTPUT.PUT_LINE('CAN ONLY ALLOCATED 5 POINTS HERE! ACTION ABORTED.');
  DBMS_OUTPUT.PUT_LINE('=============================================================');

  WHEN E_C THEN 
  DBMS_OUTPUT.PUT_LINE('=============================================================');
  DBMS_OUTPUT.PUT_LINE('CAN ONLY ALLOCATED 1 POINTS HERE! ACTION ABORTED.');
  DBMS_OUTPUT.PUT_LINE('=============================================================');

 END;
  /
   IF V_PP_ID = 'PP03' OR V_INC_I_POINTS > 10 OR V_INC_I_POINTS < 10 THEN
   RAISE E_A;
   END IF;
出现提示时,我输入ICD_ID(例如“ICD03”)*必须是大写*条目

程序:

       Drop table incident;
       CREATE TABLE INCIDENT 
       (ICD_ID VARCHAR2 (8) NOT NULL PRIMARY KEY,
       PLR_ID VARCHAR2 (11),
       M_ID VARCHAR2 (10),
       PP_ID VARCHAR2 (10),
       I_POINTS NUMBER (8));


       INSERT INTO INCIDENT VALUES
       ('ICD01', 'CHE01', 'M01', 'PP01', NULL);

       INSERT INTO INCIDENT VALUES
       ('ICD02', 'CHE03', 'M07', 'PP02', NULL);

       INSERT INTO INCIDENT VALUES
       ('ICD03', 'CHE03', 'M04', 'PP03', NULL);

       INSERT INTO INCIDENT VALUES
       ('ICD04', 'KLN04', 'M07', 'PP02', NULL);

       INSERT INTO INCIDENT VALUES
       ('ICD05', 'CHE01', 'M04', 'PP03', NULL);
   DECLARE 
   v_icd_id incident.icd_id%type := &INCIDENT_ID; 
   v_inc_I_POINTS incident.i_points%type := &PENALTY_POINTS; 
   v_I_POINTS incident.I_POINTS%type;
   V_PP_ID INCIDENT.PP_ID%TYPE;    
   E_TOO_MANY_POINTS exception;
   E_UPDATE_HIGH exception;   
   E_A exception;
   E_B exception;
   E_C exception;
   BEGIN 
   SELECT I_POINTS INTO v_I_POINTS 
   FROM incident WHERE icd_id = v_icd_id;

   IF v_I_POINTS > 10 THEN 
   RAISE E_UPDATE_HIGH; 
   END IF;

   IF v_inc_I_POINTS >10 THEN
   RAISE E_TOO_MANY_POINTS; 
   END IF;


   IF V_PP_ID = 'PP03' OR V_INC_I_POINTS > 10 OR V_INC_I_POINTS < 10 THEN
   RAISE E_A;
   END IF;


  UPDATE incident SET i_points =  (v_inc_i_points + NVL(i_points,0))               
   WHERE icd_id=v_icd_id;



  DBMS_OUTPUT.PUT_LINE('');
  DBMS_OUTPUT.PUT_LINE('=====================');
  DBMS_OUTPUT.PUT_LINE('PENALTY POINTS UPDATED!');
  DBMS_OUTPUT.PUT_LINE('=====================');
  DBMS_OUTPUT.PUT_LINE('');

  EXCEPTION 
  WHEN E_TOO_MANY_POINTS THEN 
  DBMS_OUTPUT.PUT_LINE('==========================================================');
  DBMS_OUTPUT.PUT_LINE('TOO MANY POINTS ALLOCATED THERE! ACTION ABORTED.');
  DBMS_OUTPUT.PUT_LINE('==========================================================');


  WHEN E_UPDATE_HIGH THEN 
        DBMS_OUTPUT.PUT_LINE('=============================================================');
  DBMS_OUTPUT.PUT_LINE('CAN NOT STORE THAT MANY PENALTY POINTS THERE! ACTION ABORTED.');
    DBMS_OUTPUT.PUT_LINE('=============================================================');


  WHEN E_A THEN 
  DBMS_OUTPUT.PUT_LINE('=============================================================');
  DBMS_OUTPUT.PUT_LINE('CAN ONLY ALLOCATED 10 POINTS HERE! ACTION ABORTED.');
  DBMS_OUTPUT.PUT_LINE('=============================================================');


  WHEN E_B THEN 
  DBMS_OUTPUT.PUT_LINE('=============================================================');
  DBMS_OUTPUT.PUT_LINE('CAN ONLY ALLOCATED 5 POINTS HERE! ACTION ABORTED.');
  DBMS_OUTPUT.PUT_LINE('=============================================================');

  WHEN E_C THEN 
  DBMS_OUTPUT.PUT_LINE('=============================================================');
  DBMS_OUTPUT.PUT_LINE('CAN ONLY ALLOCATED 1 POINTS HERE! ACTION ABORTED.');
  DBMS_OUTPUT.PUT_LINE('=============================================================');

 END;
  /
   IF V_PP_ID = 'PP03' OR V_INC_I_POINTS > 10 OR V_INC_I_POINTS < 10 THEN
   RAISE E_A;
   END IF;
声明
v_icd_id事件。icd_id%类型:=&事件id;
v_inc_I_POINTS事件。I_POINTS%类型:=&惩罚积分;
v_I_POINTS事件。I_POINTS%类型;
V_PP_ID事件。PP_ID%类型;
E_太多_点例外;
E_更新_高异常;
例外情况;
E_B例外;
电子商务例外;
开始
将I_点选择为v_I_点
icd_id=v_icd_id的事件;
如果v_I_点>10,则
提高E_更新_高;
如果结束;
如果v_inc_I_POINTS>10,则
提高E_分数太多;
如果结束;
如果V_PP_ID='PP03'或V_INC_I_POINTS>10或V_INC_I_POINTS<10,则
提高E_A;
如果结束;
更新事件集i_点=(v_inc_i_点+NVL(i_点,0))
其中icd_id=v_icd_id;
DBMS_OUTPUT.PUT_行(“”);
DBMS_OUTPUT.PUT_LINE('===============================');
DBMS_OUTPUT.PUT_LINE('罚分更新!');
DBMS_OUTPUT.PUT_LINE('===============================');
DBMS_OUTPUT.PUT_行(“”);
例外情况
当你得分太多的时候
DBMS\u输出.输出线('================================================================================================================================================');
DBMS_OUTPUT.PUT_LINE('在那里分配的点太多!操作中止');
DBMS\u输出.输出线('================================================================================================================================================');
当E_更新_HIGH时
DBMS\u输出.PUT\u行('===========================================================================================');
DBMS_OUTPUT.PUT_LINE('不能在那里存储那么多惩罚点!操作已中止');
DBMS\u输出.PUT\u行('===========================================================================================');
那你什么时候来
DBMS\u输出.PUT\u行('===========================================================================================');
DBMS_OUTPUT.PUT_LINE('此处只能分配10个点!操作已中止');
DBMS\u输出.PUT\u行('===========================================================================================');
那什么时候
DBMS\u输出.PUT\u行('===========================================================================================');
DBMS_OUTPUT.PUT_LINE('此处只能分配5个点!操作已中止');
DBMS\u输出.PUT\u行('===========================================================================================');
那什么时候
DBMS\u输出.PUT\u行('===========================================================================================');
DBMS_OUTPUT.PUT_LINE('此处只能分配1个点!操作已中止');
DBMS\u输出.PUT\u行('===========================================================================================');
结束;
/
我正在努力实现的目标:

       Drop table incident;
       CREATE TABLE INCIDENT 
       (ICD_ID VARCHAR2 (8) NOT NULL PRIMARY KEY,
       PLR_ID VARCHAR2 (11),
       M_ID VARCHAR2 (10),
       PP_ID VARCHAR2 (10),
       I_POINTS NUMBER (8));


       INSERT INTO INCIDENT VALUES
       ('ICD01', 'CHE01', 'M01', 'PP01', NULL);

       INSERT INTO INCIDENT VALUES
       ('ICD02', 'CHE03', 'M07', 'PP02', NULL);

       INSERT INTO INCIDENT VALUES
       ('ICD03', 'CHE03', 'M04', 'PP03', NULL);

       INSERT INTO INCIDENT VALUES
       ('ICD04', 'KLN04', 'M07', 'PP02', NULL);

       INSERT INTO INCIDENT VALUES
       ('ICD05', 'CHE01', 'M04', 'PP03', NULL);
   DECLARE 
   v_icd_id incident.icd_id%type := &INCIDENT_ID; 
   v_inc_I_POINTS incident.i_points%type := &PENALTY_POINTS; 
   v_I_POINTS incident.I_POINTS%type;
   V_PP_ID INCIDENT.PP_ID%TYPE;    
   E_TOO_MANY_POINTS exception;
   E_UPDATE_HIGH exception;   
   E_A exception;
   E_B exception;
   E_C exception;
   BEGIN 
   SELECT I_POINTS INTO v_I_POINTS 
   FROM incident WHERE icd_id = v_icd_id;

   IF v_I_POINTS > 10 THEN 
   RAISE E_UPDATE_HIGH; 
   END IF;

   IF v_inc_I_POINTS >10 THEN
   RAISE E_TOO_MANY_POINTS; 
   END IF;


   IF V_PP_ID = 'PP03' OR V_INC_I_POINTS > 10 OR V_INC_I_POINTS < 10 THEN
   RAISE E_A;
   END IF;


  UPDATE incident SET i_points =  (v_inc_i_points + NVL(i_points,0))               
   WHERE icd_id=v_icd_id;



  DBMS_OUTPUT.PUT_LINE('');
  DBMS_OUTPUT.PUT_LINE('=====================');
  DBMS_OUTPUT.PUT_LINE('PENALTY POINTS UPDATED!');
  DBMS_OUTPUT.PUT_LINE('=====================');
  DBMS_OUTPUT.PUT_LINE('');

  EXCEPTION 
  WHEN E_TOO_MANY_POINTS THEN 
  DBMS_OUTPUT.PUT_LINE('==========================================================');
  DBMS_OUTPUT.PUT_LINE('TOO MANY POINTS ALLOCATED THERE! ACTION ABORTED.');
  DBMS_OUTPUT.PUT_LINE('==========================================================');


  WHEN E_UPDATE_HIGH THEN 
        DBMS_OUTPUT.PUT_LINE('=============================================================');
  DBMS_OUTPUT.PUT_LINE('CAN NOT STORE THAT MANY PENALTY POINTS THERE! ACTION ABORTED.');
    DBMS_OUTPUT.PUT_LINE('=============================================================');


  WHEN E_A THEN 
  DBMS_OUTPUT.PUT_LINE('=============================================================');
  DBMS_OUTPUT.PUT_LINE('CAN ONLY ALLOCATED 10 POINTS HERE! ACTION ABORTED.');
  DBMS_OUTPUT.PUT_LINE('=============================================================');


  WHEN E_B THEN 
  DBMS_OUTPUT.PUT_LINE('=============================================================');
  DBMS_OUTPUT.PUT_LINE('CAN ONLY ALLOCATED 5 POINTS HERE! ACTION ABORTED.');
  DBMS_OUTPUT.PUT_LINE('=============================================================');

  WHEN E_C THEN 
  DBMS_OUTPUT.PUT_LINE('=============================================================');
  DBMS_OUTPUT.PUT_LINE('CAN ONLY ALLOCATED 1 POINTS HERE! ACTION ABORTED.');
  DBMS_OUTPUT.PUT_LINE('=============================================================');

 END;
  /
   IF V_PP_ID = 'PP03' OR V_INC_I_POINTS > 10 OR V_INC_I_POINTS < 10 THEN
   RAISE E_A;
   END IF;
是为了防止人们在PP_ID为“PP03”的情况下输入大于10且小于10的值

为此我申请了:

       Drop table incident;
       CREATE TABLE INCIDENT 
       (ICD_ID VARCHAR2 (8) NOT NULL PRIMARY KEY,
       PLR_ID VARCHAR2 (11),
       M_ID VARCHAR2 (10),
       PP_ID VARCHAR2 (10),
       I_POINTS NUMBER (8));


       INSERT INTO INCIDENT VALUES
       ('ICD01', 'CHE01', 'M01', 'PP01', NULL);

       INSERT INTO INCIDENT VALUES
       ('ICD02', 'CHE03', 'M07', 'PP02', NULL);

       INSERT INTO INCIDENT VALUES
       ('ICD03', 'CHE03', 'M04', 'PP03', NULL);

       INSERT INTO INCIDENT VALUES
       ('ICD04', 'KLN04', 'M07', 'PP02', NULL);

       INSERT INTO INCIDENT VALUES
       ('ICD05', 'CHE01', 'M04', 'PP03', NULL);
   DECLARE 
   v_icd_id incident.icd_id%type := &INCIDENT_ID; 
   v_inc_I_POINTS incident.i_points%type := &PENALTY_POINTS; 
   v_I_POINTS incident.I_POINTS%type;
   V_PP_ID INCIDENT.PP_ID%TYPE;    
   E_TOO_MANY_POINTS exception;
   E_UPDATE_HIGH exception;   
   E_A exception;
   E_B exception;
   E_C exception;
   BEGIN 
   SELECT I_POINTS INTO v_I_POINTS 
   FROM incident WHERE icd_id = v_icd_id;

   IF v_I_POINTS > 10 THEN 
   RAISE E_UPDATE_HIGH; 
   END IF;

   IF v_inc_I_POINTS >10 THEN
   RAISE E_TOO_MANY_POINTS; 
   END IF;


   IF V_PP_ID = 'PP03' OR V_INC_I_POINTS > 10 OR V_INC_I_POINTS < 10 THEN
   RAISE E_A;
   END IF;


  UPDATE incident SET i_points =  (v_inc_i_points + NVL(i_points,0))               
   WHERE icd_id=v_icd_id;



  DBMS_OUTPUT.PUT_LINE('');
  DBMS_OUTPUT.PUT_LINE('=====================');
  DBMS_OUTPUT.PUT_LINE('PENALTY POINTS UPDATED!');
  DBMS_OUTPUT.PUT_LINE('=====================');
  DBMS_OUTPUT.PUT_LINE('');

  EXCEPTION 
  WHEN E_TOO_MANY_POINTS THEN 
  DBMS_OUTPUT.PUT_LINE('==========================================================');
  DBMS_OUTPUT.PUT_LINE('TOO MANY POINTS ALLOCATED THERE! ACTION ABORTED.');
  DBMS_OUTPUT.PUT_LINE('==========================================================');


  WHEN E_UPDATE_HIGH THEN 
        DBMS_OUTPUT.PUT_LINE('=============================================================');
  DBMS_OUTPUT.PUT_LINE('CAN NOT STORE THAT MANY PENALTY POINTS THERE! ACTION ABORTED.');
    DBMS_OUTPUT.PUT_LINE('=============================================================');


  WHEN E_A THEN 
  DBMS_OUTPUT.PUT_LINE('=============================================================');
  DBMS_OUTPUT.PUT_LINE('CAN ONLY ALLOCATED 10 POINTS HERE! ACTION ABORTED.');
  DBMS_OUTPUT.PUT_LINE('=============================================================');


  WHEN E_B THEN 
  DBMS_OUTPUT.PUT_LINE('=============================================================');
  DBMS_OUTPUT.PUT_LINE('CAN ONLY ALLOCATED 5 POINTS HERE! ACTION ABORTED.');
  DBMS_OUTPUT.PUT_LINE('=============================================================');

  WHEN E_C THEN 
  DBMS_OUTPUT.PUT_LINE('=============================================================');
  DBMS_OUTPUT.PUT_LINE('CAN ONLY ALLOCATED 1 POINTS HERE! ACTION ABORTED.');
  DBMS_OUTPUT.PUT_LINE('=============================================================');

 END;
  /
   IF V_PP_ID = 'PP03' OR V_INC_I_POINTS > 10 OR V_INC_I_POINTS < 10 THEN
   RAISE E_A;
   END IF;
如果V_PP_ID='PP03'或V_INC_I_POINTS>10或V_INC_I_POINTS<10,则
提高E_A;
如果结束;
这很好,但是当我添加另一个限制时,比如:

       Drop table incident;
       CREATE TABLE INCIDENT 
       (ICD_ID VARCHAR2 (8) NOT NULL PRIMARY KEY,
       PLR_ID VARCHAR2 (11),
       M_ID VARCHAR2 (10),
       PP_ID VARCHAR2 (10),
       I_POINTS NUMBER (8));


       INSERT INTO INCIDENT VALUES
       ('ICD01', 'CHE01', 'M01', 'PP01', NULL);

       INSERT INTO INCIDENT VALUES
       ('ICD02', 'CHE03', 'M07', 'PP02', NULL);

       INSERT INTO INCIDENT VALUES
       ('ICD03', 'CHE03', 'M04', 'PP03', NULL);

       INSERT INTO INCIDENT VALUES
       ('ICD04', 'KLN04', 'M07', 'PP02', NULL);

       INSERT INTO INCIDENT VALUES
       ('ICD05', 'CHE01', 'M04', 'PP03', NULL);
   DECLARE 
   v_icd_id incident.icd_id%type := &INCIDENT_ID; 
   v_inc_I_POINTS incident.i_points%type := &PENALTY_POINTS; 
   v_I_POINTS incident.I_POINTS%type;
   V_PP_ID INCIDENT.PP_ID%TYPE;    
   E_TOO_MANY_POINTS exception;
   E_UPDATE_HIGH exception;   
   E_A exception;
   E_B exception;
   E_C exception;
   BEGIN 
   SELECT I_POINTS INTO v_I_POINTS 
   FROM incident WHERE icd_id = v_icd_id;

   IF v_I_POINTS > 10 THEN 
   RAISE E_UPDATE_HIGH; 
   END IF;

   IF v_inc_I_POINTS >10 THEN
   RAISE E_TOO_MANY_POINTS; 
   END IF;


   IF V_PP_ID = 'PP03' OR V_INC_I_POINTS > 10 OR V_INC_I_POINTS < 10 THEN
   RAISE E_A;
   END IF;


  UPDATE incident SET i_points =  (v_inc_i_points + NVL(i_points,0))               
   WHERE icd_id=v_icd_id;



  DBMS_OUTPUT.PUT_LINE('');
  DBMS_OUTPUT.PUT_LINE('=====================');
  DBMS_OUTPUT.PUT_LINE('PENALTY POINTS UPDATED!');
  DBMS_OUTPUT.PUT_LINE('=====================');
  DBMS_OUTPUT.PUT_LINE('');

  EXCEPTION 
  WHEN E_TOO_MANY_POINTS THEN 
  DBMS_OUTPUT.PUT_LINE('==========================================================');
  DBMS_OUTPUT.PUT_LINE('TOO MANY POINTS ALLOCATED THERE! ACTION ABORTED.');
  DBMS_OUTPUT.PUT_LINE('==========================================================');


  WHEN E_UPDATE_HIGH THEN 
        DBMS_OUTPUT.PUT_LINE('=============================================================');
  DBMS_OUTPUT.PUT_LINE('CAN NOT STORE THAT MANY PENALTY POINTS THERE! ACTION ABORTED.');
    DBMS_OUTPUT.PUT_LINE('=============================================================');


  WHEN E_A THEN 
  DBMS_OUTPUT.PUT_LINE('=============================================================');
  DBMS_OUTPUT.PUT_LINE('CAN ONLY ALLOCATED 10 POINTS HERE! ACTION ABORTED.');
  DBMS_OUTPUT.PUT_LINE('=============================================================');


  WHEN E_B THEN 
  DBMS_OUTPUT.PUT_LINE('=============================================================');
  DBMS_OUTPUT.PUT_LINE('CAN ONLY ALLOCATED 5 POINTS HERE! ACTION ABORTED.');
  DBMS_OUTPUT.PUT_LINE('=============================================================');

  WHEN E_C THEN 
  DBMS_OUTPUT.PUT_LINE('=============================================================');
  DBMS_OUTPUT.PUT_LINE('CAN ONLY ALLOCATED 1 POINTS HERE! ACTION ABORTED.');
  DBMS_OUTPUT.PUT_LINE('=============================================================');

 END;
  /
   IF V_PP_ID = 'PP03' OR V_INC_I_POINTS > 10 OR V_INC_I_POINTS < 10 THEN
   RAISE E_A;
   END IF;
防止人们在PP_ID为“PP02”的情况下输入大于5且小于5的值

如果V_PP_ID='PP02'或V_INC_I_POINTS>5或V_INC_I_POINTS<5,则
提高E_B;
如果结束;

防止人们在PP_ID为“PP01”的情况下输入大于1且小于1的值

如果V_PP_ID='PP01'或V_INC_I_POINTS>1或V_INC_I_POINTS<1,则
提高能效;
如果结束;

它不起作用,只跟在第一个后面。我怎样才能克服这个问题提前谢谢。非常感谢您的帮助。

我认为您的情况不正确:

如果V_PP_ID='PP03'或V_INC_I_POINTS>10或V_INC_I_POINTS<10,则无论何时V_PP_ID等于'PP03'(无论V_INC_POINTS的值如何),以及无论何时V_INC_I_POINTS不等于10(无论V_PP_ID的值如何),都将计算为真

我相信预期的修订是:

如果V_PP_ID='PP03'(V_INC_I_积分>10或V_INC_积分<10),则

或者简单地说:

如果V_PP_ID='PP03'和V_INC_I_POINTS!=10然后

(关于“PP02”和“PP01”的其余条件应相应修改。)

编辑:

我第一次错过了它,但似乎“V_PP_ID”从未设置为任何值。我们需要将其实例化为所选行的PP\u ID列的值

尝试替换:

SELECT I_POINTS INTO v_I_POINTS 
    FROM incident WHERE icd_id = v_icd_id;


您是否考虑过将这些限制作为(域)限制来实施?我考虑过,但我认为这会很麻烦,并决定在过程中坚持这些限制。感谢您的尝试,尽管它没有改变我最初的结果(尝试了您的两个建议)。您能提供一些结果吗,例如,使用以下输入组合:v_icd_id=ICD03,v_inc_I_POINTS={9,10,11}| v_icd_id=ICD02,v_inc_I_POINTS={4,5,11}| v_icd_id=ICD01,v_inc_I_I_POINTS={0,1,6}使用您提供的输入数据尝试了两个示例。虽然它没有任何限制地更新了要点,但我发现了第二个问题,我最初的回答没有提到。请看一看我编辑过的答案,让我们知道它是否有效:)你不知道我有多感激你的帮助,它有效!非常感谢你!