问题描述:
有Table1中有字段Col1,要求如下:
1、 Col1非空
2、 0<= Col1<=900
因为对Col1的非空控制和值域控制是动态的,所以将控制保存到Control_table中,
Control_table中的记录
1 Table1 Col1 0<= Col1<=900
2 Table1 Col1 Col1非空用户使用oracle客户端直接连到服务器上传数据,如果Col1空或者(Col1>=900 or Col1<=0),则不让数据入库,并提示相应的错误信息。问题:
请问应该如何实现?
有Table1中有字段Col1,要求如下:
1、 Col1非空
2、 0<= Col1<=900
因为对Col1的非空控制和值域控制是动态的,所以将控制保存到Control_table中,
Control_table中的记录
1 Table1 Col1 0<= Col1<=900
2 Table1 Col1 Col1非空用户使用oracle客户端直接连到服务器上传数据,如果Col1空或者(Col1>=900 or Col1<=0),则不让数据入库,并提示相应的错误信息。问题:
请问应该如何实现?
id INT,
ctl_condition VARCHAR2(1000)
);insert into control_table values(1, 'IS NOT NULL');
insert into control_table values(2, 'BETWEEN 0 AND 900');CREATE TABLE table1(col1 INT);CREATE OR REPLACE PROCEDURE check_insert(p_col1 NUMBER) AS
sqlstmt VARCHAR2(2000);
v_result NUMBER;
TYPE tab_condition IS TABLE OF VARCHAR2(100);
v_tab_condition TAB_CONDITION;
BEGIN
SELECT ctl_condition BULK COLLECT
INTO v_tab_condition
FROM control_table;
sqlstmt := 'SELECT COUNT(*) FROM dual WHERE '|| p_col1 || ' ' || v_tab_condition(1) || ' AND ' || p_col1 || ' ' || v_tab_condition(2);
EXECUTE IMMEDIATE sqlstmt INTO v_result;
IF v_result = 1 THEN
DBMS_OUTPUT.PUT_LINE('符合插入条件');
ELSE
DBMS_OUTPUT.PUT_LINE('不符合插入条件');
END IF;
END;
/