存储过程,更新库中相同字段的值

--执行方法:把当前用户中所有'p_tab%'的表的p_col字段全部更新为'p_value'
--在command window中输入:execute pro_update('p_tab','p_col','p_value');
--参数说明:p_tab:匹配表的表名前几位,要大写
--参数说明:p_col:匹配字段,要大写
--参数说明:p_value:修改字段的值
--限制说明:只能更新字符型字段。

--请注明作者:liqinglin
create or replace procedure pro_update
(
  p_tab in varchar2,
  p_col in varchar2,
  p_value in varchar2
)
is
   v_cursor NUMBER;
   v_stat   NUMBER;
   v_str1   varchar2(100);
   v_str2   varchar2(100);
   v_sql    varchar2(200);
   v_up     varchar2(200);
begin
    v_sql := 'select   TABLE_NAME,COLUMN_NAME   from   user_tab_columns where TABLE_NAME like '''||p_tab||'%'''||' AND COLUMN_NAME='||''''||p_col||'''';
    v_cursor := dbms_sql.open_cursor; --打开游标;
    dbms_sql.parse(v_cursor, v_sql, dbms_sql.native); --解析动态SQL语句;
   -- dbms_sql.bind_variable(v_cursor, ':p_tab', '%'||p_tab||'%'); --绑定输入参数;
    --dbms_sql.bind_variable(v_cursor, ':p_col', p_col); --绑定输入参数;
    dbms_sql.define_column(v_cursor, 1, v_str1,128); --定义列
    dbms_sql.define_column(v_cursor, 2, v_str2,128); --定义列
    v_stat := dbms_sql.execute(v_cursor); --执行动态SQL语句
   LOOP
         EXIT WHEN dbms_sql.fetch_rows(v_cursor)<=0; --fetch_rows在结果集中移动游标,如果未抵达末尾,返回1。       
         dbms_sql.column_value(v_cursor, 1, v_str1); --将当前行的查询结果写入上面定义的列中。
         dbms_sql.column_value(v_cursor, 2, v_str2);    
         --处理表
         v_up:=' UPDATE ' ||v_str1|| ' SET ' ||v_str2|| '='''||p_value||'''';
         execute   immediate (v_up);
         COMMIT;
     END LOOP;
     dbms_sql.close_cursor(v_cursor); --关闭游标。
end pro_update;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值