/*
* 多条记录连接成一条
* tableName 表名
* type 类型:可以是insert/update/select之一
*/
create or replace function my_concat(tableName varchar2,type varchar2)
return varchar2
is
type typ_cursor is ref cursor;
v_cursor typ_cursor;
v_temp varchar2(30);
v_result varchar2(4000):= '';
v_sql varchar2(200);
begin
v_sql := 'select COLUMN_NAME from user_tab_columns where table_name = ''' || upper(tableName) || ''' order by COLUMN_ID asc';
open v_cursor for v_sql;
loop
fetch v_cursor into v_temp;
exit when v_cursor%notfound;
if type = 'select' or type = 'insert' then
v_result := v_result ||',' || v_temp;
elsif type = 'update' then
v_result := v_result ||',' || v_temp || ' = ?';
elsif type = 'javabean' then
v_result := v_result ||',bean.get' || upper(substr(v_temp,1,1)) || lower(substr(v_temp,2)) || '()';
end if;
end loop;
return substr(v_result,2);
end; /*
* 通过表名自动生成insert/update/select/javabean get方法语句
* tableName 表名
* type 类型:可以是insert/update/select之一
*/
create or replace procedure autoGenerateSQL(
tableName varchar2,
type varchar2,
out_result out varchar2
)
is
sql_insert varchar2(2000);
sql_update varchar2(2000);
sql_select varchar2(2000);
javabean_str varchar2(2000);
field_num integer; --字段个数
type_info varchar2(20); --参数类型判断信息
begin sql_insert := 'insert into ' || upper(tableName) || '(' || my_concat(tableName,type) || ') values (';
sql_update := 'update ' || upper(tableName) || ' set ';
sql_select := 'select ';
javabean_str := '';
type_info := ''; select count(*) into field_num from user_tab_columns where table_name=upper(tableName);
select decode(type,'insert',type,'update',type,'select',type,'javabean',type,'error') into type_info from dual; if field_num = 0 then -- 表不存在时
out_result := '表不存在!请重新输入!';
elsif type_info = 'error' then --type参数错误时
out_result := 'type参数错误:类型只能是insert、update、select、javabean之一';
elsif field_num > 0 then
if type = 'insert' then --生成insert 语句
for i in 1..field_num
loop
sql_insert := sql_insert || '?';
if i < field_num then
sql_insert := sql_insert || ',';
end if;
end loop;
sql_insert := sql_insert || ')';
out_result := sql_insert;
elsif type = 'update' then --生成update 语句
sql_update := sql_update || my_concat(tableName,type);
out_result := sql_update;
elsif type = 'select' then --生成select 语句
sql_select := sql_select || my_concat(tableName,type) || ' from ' || upper(tableName) || ' a';
out_result := sql_select;
elsif type = 'javabean' then --生成javabean的get方法
javabean_str := my_concat(tableName,type);
out_result := javabean_str;
end if;
end if; end autoGenerateSQL; declare out_result varchar2(512);
begin
autoGenerateSQL('tf_Employee2','insert', out_result);
dbms_output.put_line(out_result);
end;

oracle数据库高级应用之《自动生成指定表的insert,update,delete语句》的更多相关文章

  1. C#连接Oracle数据库,通过EF自动生成与数据库表相关的实体类

    C#连接Oracle数据库,通过EF自动生成与数据库表相关的实体类 ps:如需转载,请在转载文章明显处,i标注作者和原文地址 一.准备条件 需要自己电脑上已经安装了Oracle数据库,并且已经创建了相 ...

  2. 基于OCILIB的oracle数据库操作总结及自动生成Model和Dao的工具

    基于OCILIB的oracle数据库操作总结 1.       类图 2.       基类BaseOCIDao的设计与实现 BaseOCIDao.h头文件 #pragma once /* ----- ...

  3. 常用脚本--生成指定表的INSERT 语句

    --================================================= --摘抄自http://www.cnblogs.com/sunth/archive/2013/0 ...

  4. 利用 Oracle EM 企业管理器 进行oracle SQL的优化(自动生成索引)

    利用 Oracle EM 企业管理器 进行oracle SQL的优化(自动生成索引) ##应用情景 项目中有大量的SQL,尤其是涉及到统计报表时,表关联比较多,当初开发建表时也没搞好索引关联的,上线后 ...

  5. SSM 框架基于ORACLE集成TKMYBATIS 和GENERATOR自动生成代码(Github源码)

    基于前一个博客搭建的SSM框架 https://www.cnblogs.com/jiangyuqin/p/9870641.html 源码:https://github.com/JHeaven/ssm- ...

  6. C#连接oracle数据库提示ORA-12154: TNS: 无法解析指定的连接标识符

    C#连接oracle数据库提示ORA-12154: TNS: 无法解析指定的连接标识符如果PLSQL Develope能连接上而用代码无法连接上则可以考虑sqlnet.ora文件中是否有NAMES.D ...

  7. Oracle主键自动生成_表and存储过程

    -- Create table create table T_EB_SYS_DN_SEQUENCE_CONFIG ( sequence_id VARCHAR2(36) default sys_guid ...

  8. SpringBoot系列——Spring-Data-JPA(究极进化版) 自动生成单表基础增、删、改、查接口

    前言 我们在之前的实现了springboot与data-jpa的增.删.改.查简单使用(请戳:SpringBoot系列——Spring-Data-JPA),并实现了升级版(请戳:SpringBoot系 ...

  9. hibernate中.hbm.xml和注解方式自动生成数据表的简单实例(由新手小白编写,仅适用新手小白)

    绝逼新手小白,so 请大神指点! 如果真的错的太多,错的太离谱,错的误导了其他小伙伴,还望大神请勿喷,大神请担待,大神请高抬贵嘴......谢谢. 好了,正题 刚接触ssh,今天在搞使用.hbm.xm ...

随机推荐

  1. jquery 中的事件冒泡

    废话少说,先来一段代码热热身: <!DOCTYPE html> <html> <head> <title>demo</title> < ...

  2. [C#基础]c#中的BeginInvoke和EndEndInvoke

    摘要 异步这东西,真正用起来的时候,发现事情还是挺多的,最近在项目中用到了异步的知识,发现对它还是不了解,处理起来,走了不少弯路.觉得还是补一补还是很有必要的. MSDN原文地址:https://ms ...

  3. Storm与Spark Streaming比较

    前言spark与hadoop的比较我就不多说了,除了对硬件的要求稍高,spark应该是完胜hadoop(Map/Reduce)的.storm与spark都可以用于流计算,但storm对应的场景是毫秒级 ...

  4. 利用afxDump来调试自己的程序

    http://blog.csdn.net/sstower/article/details/7714199

  5. [转]Informatica vs SSIS

    转自 http://blog.csdn.net/thy822/article/details/8489779 这篇文章, 我不能同意更多, 所以转在这里. Here is my thinking af ...

  6. thinkphp 行为扩展以及插件机制介绍

    首先行为扩展这个概念是TP架构的核心组成之一,关于行为的解释我就粗略的概括一下吧:TP在从接受到HTTP请求到最终将视图输出,期间经历的很多步骤,这些步骤大家可以在http://document.th ...

  7. 【bzoj4027】[HEOI2015]兔子与樱花

    题目描述 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1个树枝连接,我们可以把它 ...

  8. mysql explain 中key_len的计算

    今天丁原问我mysql执行计划中的key_len是怎么计算得到的,当时还没有注意,在高性能的那本书讲到过这个值的计算,但是自己看执行计划的时候一直都没有太在意这个值,更不用说深讨这个值的计算了: ke ...

  9. FineUI第九天---表单验证

    表单验证 步骤: 1.比如为TextBox设置Required=”true”或者ShowRedStar=”true”两个属性,表示此输入为必填项,并且在标签的后面显示一个红色的星号提示. 2.Vali ...

  10. EF接触03

    emdx文件解读: