博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle数据库高级应用之《自动生成指定表的insert,update,delete语句》
阅读量:6849 次
发布时间:2019-06-26

本文共 3303 字,大约阅读时间需要 11 分钟。

1 /*        2 * 多条记录连接成一条        3 * tableName 表名   4 * type 类型:可以是insert/update/select之一    5 */   6 create or replace function my_concat(tableName varchar2,type varchar2)   7 return varchar2   8 is   9  type typ_cursor is ref cursor;  10  v_cursor typ_cursor;  11  v_temp varchar2(30);  12  v_result varchar2(4000):= '';  13  v_sql varchar2(200);  14 begin  15  v_sql := 'select COLUMN_NAME from user_tab_columns where table_name = ''' || upper(tableName) || ''' order by COLUMN_ID asc';  16  open v_cursor for v_sql;  17  loop  18     fetch v_cursor into v_temp;  19     exit when v_cursor%notfound;  20     if type = 'select' or type = 'insert' then  21        v_result := v_result ||',' || v_temp;  22     elsif type = 'update' then  23        v_result := v_result ||',' || v_temp || ' = ?';  24     elsif type = 'javabean' then  25        v_result := v_result ||',bean.get' || upper(substr(v_temp,1,1)) || lower(substr(v_temp,2)) ||  '()';       26     end if;           27  end loop;  28  return substr(v_result,2);  29 end;  30 31 32 /*       33 * 通过表名自动生成insert/update/select/javabean get方法语句       34 * tableName 表名  35 * type 类型:可以是insert/update/select之一   36 */  37 create or replace procedure autoGenerateSQL(  38 tableName varchar2,  39 type varchar2,  40 out_result out varchar2  41 )  42 is  43   sql_insert varchar2(2000);  44   sql_update varchar2(2000);  45   sql_select varchar2(2000);  46   javabean_str varchar2(2000);  47   field_num integer;        --字段个数  48   type_info varchar2(20);   --参数类型判断信息  49 begin  50   51 sql_insert := 'insert into ' || upper(tableName) || '(' || my_concat(tableName,type) || ') values (';  52 sql_update := 'update ' || upper(tableName) || ' set ';  53 sql_select := 'select ';  54 javabean_str := '';  55 type_info := '';  56   57 select count(*) into field_num from user_tab_columns where table_name=upper(tableName);  58 select decode(type,'insert',type,'update',type,'select',type,'javabean',type,'error') into type_info from dual;  59   60 if field_num = 0 then             -- 表不存在时     61    out_result := '表不存在!请重新输入!';  62 elsif type_info = 'error' then    --type参数错误时  63    out_result := 'type参数错误:类型只能是insert、update、select、javabean之一';         64 elsif field_num > 0 then  65   if type = 'insert' then         --生成insert 语句  66     for i in 1..field_num  67       loop  68          sql_insert := sql_insert || '?';  69          if i < field_num then  70             sql_insert := sql_insert || ',';  71          end if;       72       end loop;  73       sql_insert := sql_insert || ')';  74       out_result := sql_insert;  75   elsif type = 'update' then      --生成update 语句        76       sql_update := sql_update || my_concat(tableName,type);  77       out_result := sql_update;  78   elsif type = 'select' then      --生成select 语句    79       sql_select := sql_select || my_concat(tableName,type) || ' from ' || upper(tableName) || ' a';  80       out_result := sql_select;  81   elsif type = 'javabean' then    --生成javabean的get方法  82       javabean_str := my_concat(tableName,type);     83       out_result := javabean_str;       84   end if;  85 end if;  86   87 end autoGenerateSQL; 88 89 declare out_result varchar2(512);90 begin 91 autoGenerateSQL('tf_Employee2','insert', out_result);92 dbms_output.put_line(out_result);93 end;

 

转载地址:http://worul.baihongyu.com/

你可能感兴趣的文章
生活大爆炸系列之磨望远镜
查看>>
文档:Windows Server 2012 配置Hyper-V复制
查看>>
正则表达式
查看>>
Angular企业级开发(1)-AngularJS简介
查看>>
如何查看自己电脑系统的安装日期-Window上
查看>>
tomcat 连接数设置(转)
查看>>
Windows压缩包安装MySQL
查看>>
13040:All in All
查看>>
动态规划
查看>>
单纯形法
查看>>
21.Spring Boot 使用Java代码创建Bean并注册到Spring中
查看>>
window.location.href的用法
查看>>
C# MVC中直接执行Js
查看>>
mac book下批量替换多个文件中的字符
查看>>
python IO编程-序列化
查看>>
9.回文数
查看>>
[转] 使用NVM快速搭建NODE开发环境
查看>>
软件测试入门随笔——软件测试基础知识(七)
查看>>
Spring Boot快速入门(三):依赖注入
查看>>
STL里的算法
查看>>