问题描述:
有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),则不让数据入库,并提示相应的错误信息。问题:
请问应该如何实现?

解决方案 »

  1.   

    因为条件是动态的,只能用动态sql了,下面是一个例子,楼主可以在此基础上修改CREATE TABLE CONTROL_TABLE(
    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;
    /