本人的公司使用ORACLE,数据量非常大除了银行外应该其他类型的公司很难能达到那么大的数量级,数据修改权限控制的比较严, 数据库锁表引发的影响也会比较严重。。但是想完全杜绝对数据库的直接操作又不大可能,领导为了防止操作人员误操作想修改权限做回收又不想把活回收,让我们想想要怎么办。。对单表的修改,我们讨论后的想法都是既然杜绝直接对数据库表进行操作, 要么开发一个界面从界面修改; 要么使用过程,通过输入表名,需要修改的字段名用动态SQL来运行因为公司的关系,开发一个界面专门用于单表字段的修改可行性比较低。。几个人ORACLE技术都不高,方法很土,想不到其他方法。。想向大家请教,有没其他更好的方法,或者如果用过程通过动态SQL来运行,有没什么需要注意的地方?

解决方案 »

  1.   

    declare 
    sql varchar2(2000);
    input1 varchar2(100);
    input2 varchar2(100);
    begin
    sql := 'select '|| sysdate ||'from dual where ....'||input1 ||' and ...'||input2;
    EXECUTE IMMEDIATE sql;end;
      

  2.   

    绑定变量
    declare 
    select_sql varchar2(100);
    begin
    select_sql := 'select * from emp  where deptno=:v_dno ';
    execute immediate select_sql ;
    end;
      

  3.   

    方法很多
    你可以用其他语言写一个类似plsql的东西
    1、需要用户名登录,方便记录谁做了修改。
    2、读取user_Tables,加载系统中所有的表,或其他对象
    3、以datagrid的形式把表中内容展现出来,然后可以在这上面直接修改,也可以支持用语句
    4、记录下修改的原值,新值,如果修改错了还可以恢复。