【发布时间】:2021-12-30 00:23:23
【问题描述】:
根据我的项目要求,我需要将所有验证检查查询存储在一个表中,并验证另一个表的所有记录,并使用其验证状态更新每条记录。
例如,我有两个表名为 EMP 和 VALIDATIONS
验证表有如下两列:
------------------- --------------
Validation_desc Validation_sql
------------------ --------------
EID_IS_NULL related SQL should be here
SAL_HIGH related SQL should be here
EMPtable 有像eid,ename,sal,dept,is_valid,val_desc 这样的普通列。
我应该编写 PL/SQL 代码,该代码将从 VALIDATIONS 表中获取所有验证 sql,并检查 EMP 表的每条记录并验证它们。如果第一条记录通过VALIDATIONS 表中可用的所有验证成功,则EMP 表IS_VALID 列应更新为1,Validation_desc 对于该特定记录应为空。如果第二条记录通过 2 次检查失败,则该记录的 IS_VALID 列应更新为 0,Validation_desc 应更新为 Validation_desc 并以逗号分隔,同样,它应该检查 EMP 的所有记录的所有验证表。
我已尝试使用以下代码从两个表中获取所有详细信息,但无法编写验证逻辑。
CREATE PROCEDURE P_VALIDATION
as
TYPE REC_TYPE IS RECORD( Validation_desc VARCHAR2(4000),
Validation_sql VARCHAR2(4000));
TYPE VAL_CHECK_TYPE IS TABLE OF REC_TYPE;
LV_VAL_CHECK VAL_CHECK_TYPE;
CURSOR CUR_FEED_DATA IS SELECT * FROM EMP;
LV_FEED_DATA EMP%ROWTYPE;
BEGIN
SELECT Validation_desc, Validation_sql
BULK COLLECT INTO LV_VAL_CHECK FROM VALIDATIONS;
OPEN CUR_FEED_DATA;
LOOP
FETCH CUR_FEED_DATA INTO LV_FEED_DATA;
EXIT WHEN CUR_FEED_DATA%NOTFOUND;
FOR I IN LV_VAL_CHECK.FIRST .. LV_VAL_CHECK.LAST LOOP
----SOME VALIDATIONS LOGIC HERE--
END LOOP;
END LOOP;
CLOSE CUR_FEED_DATA;
END;
【问题讨论】: