oracle数据库高级应用之《自动生成指定表的insert,update,delete语句》
/*
* 多条记录连接成一条
* 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语句》的更多相关文章
- C#连接Oracle数据库,通过EF自动生成与数据库表相关的实体类
C#连接Oracle数据库,通过EF自动生成与数据库表相关的实体类 ps:如需转载,请在转载文章明显处,i标注作者和原文地址 一.准备条件 需要自己电脑上已经安装了Oracle数据库,并且已经创建了相 ...
- 基于OCILIB的oracle数据库操作总结及自动生成Model和Dao的工具
基于OCILIB的oracle数据库操作总结 1. 类图 2. 基类BaseOCIDao的设计与实现 BaseOCIDao.h头文件 #pragma once /* ----- ...
- 常用脚本--生成指定表的INSERT 语句
--================================================= --摘抄自http://www.cnblogs.com/sunth/archive/2013/0 ...
- 利用 Oracle EM 企业管理器 进行oracle SQL的优化(自动生成索引)
利用 Oracle EM 企业管理器 进行oracle SQL的优化(自动生成索引) ##应用情景 项目中有大量的SQL,尤其是涉及到统计报表时,表关联比较多,当初开发建表时也没搞好索引关联的,上线后 ...
- SSM 框架基于ORACLE集成TKMYBATIS 和GENERATOR自动生成代码(Github源码)
基于前一个博客搭建的SSM框架 https://www.cnblogs.com/jiangyuqin/p/9870641.html 源码:https://github.com/JHeaven/ssm- ...
- C#连接oracle数据库提示ORA-12154: TNS: 无法解析指定的连接标识符
C#连接oracle数据库提示ORA-12154: TNS: 无法解析指定的连接标识符如果PLSQL Develope能连接上而用代码无法连接上则可以考虑sqlnet.ora文件中是否有NAMES.D ...
- Oracle主键自动生成_表and存储过程
-- Create table create table T_EB_SYS_DN_SEQUENCE_CONFIG ( sequence_id VARCHAR2(36) default sys_guid ...
- SpringBoot系列——Spring-Data-JPA(究极进化版) 自动生成单表基础增、删、改、查接口
前言 我们在之前的实现了springboot与data-jpa的增.删.改.查简单使用(请戳:SpringBoot系列——Spring-Data-JPA),并实现了升级版(请戳:SpringBoot系 ...
- hibernate中.hbm.xml和注解方式自动生成数据表的简单实例(由新手小白编写,仅适用新手小白)
绝逼新手小白,so 请大神指点! 如果真的错的太多,错的太离谱,错的误导了其他小伙伴,还望大神请勿喷,大神请担待,大神请高抬贵嘴......谢谢. 好了,正题 刚接触ssh,今天在搞使用.hbm.xm ...
随机推荐
- Aspect Oriented Programming using Interceptors within Castle Windsor and ABP Framework AOP
http://www.codeproject.com/Articles/1080517/Aspect-Oriented-Programming-using-Interceptors-wit Downl ...
- VS2012打包Winform教程 [转]
VS2012打包部署Winform程序 打包前的准备工作: 里边会提到第一次使用的时候打开网页填数据什么的..最终要下载一个EXE文件..其实大可不必.. 直接百度InstallShield2012S ...
- C# 操作mongodb子文档
var mongoString = "mongodb://jamesbing:123456@localhost:27017"; var host = new TMongodbHos ...
- Bootstrap学习------Tabel
Bootstrap的表格和Html表格大同小异,只是封装了一些css供我们使用 <table>标签必须引用class="table"基类样式,我们可以根据需求赛选需要的 ...
- Navicat For Mysql快捷键
1.ctrl+q 打开查询窗口 2.ctrl+/ 注释sql语句 3.ctrl+shift +/ 解除注释 4.ctrl+r 运行查询窗 ...
- 10位IT领袖给大学生的忠告
10位IT领袖给大学生的忠告 苹果创始人史蒂夫乔布斯(Steve Jobs):把每一天都当成生命中的最后一天 在我17岁的时候,我读到了一句箴言,差不多是这样的:“如果你把每一天都当作生命中的最后一天 ...
- ubuntu系统无法访问无法磁盘最佳解决办法
出现如下错误: Error mounting /dev/sda8 at /media/fzh/System: Command-line `mount -t "ntfs" -o &q ...
- HDOJ 4336 Card Collector
容斥原理+状压 Card Collector Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- PHP通过访问第三方接口,根据IP地址获取所在城市
<?php header('Content-Type:text/html;Charset=utf-8'); /** * 获取IP地址 * * @return string */ function ...
- JQuery选择器细节-遁地龙卷风
1.层次选择器-子元素选择器 <body> <div> <p>lol</p> <div> <p></p> </ ...