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

 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;
时间: 2024-11-03 08:27:15

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

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

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

oracle中利用trigger,sequence自动生成ID

http://zhanghong.iteye.com/blog/865937 1. 首先创建数据库表 SQL> create table customer( 2  id number(8) not null primary key, 3  name varchar2(20), 4  age number(3), 5  gender varchar2(8) 6  ); 2. 创建Sequence: create sequence customer_SEQUENCE start with 6 inc

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

-- Create table create table T_EB_SYS_DN_SEQUENCE_CONFIG ( sequence_id VARCHAR2(36) default sys_guid() not null, sequence_name VARCHAR2(50) not null, sequence_desc VARCHAR2(200), sequence_len INTEGER default 4 not null, reset_type INTEGER default 2 n

数据库编程3 Oracle 子查询 insert update delete 事务 回收站 字段操作 企业级项目案例

[本文谢绝转载原文来自http://990487026.blog.51cto.com] <大纲> 数据库编程3 Oracle 子查询 insert update delete 事务 回收站 字段操作 企业级项目案例 实验所用数据表 子查询,解决一步不能求解 查询工资比scott高的员工信息: 子查询知识体系搭建: 解释3,查询部门是sales的员工信息: 方法1:子查询 [方法2]:多表: 优化考虑: 解释4[select],只能放单行子查询 解释4[from] 考题:显示员工姓名,薪水 解释

【翻译自mos文章】oracle数据库的最大数据容量限制和表空间的最大数据容量限制

oracle数据库的最大数据容量限制和表空间的最大数据容量限制 参考原文: What Is The Maximum Tablespace Size And Database Limit For An Oracle Database ? (Doc ID 1372905.1) 适用于: Oracle Database - Enterprise Edition - Version 10.1.0.2 to 11.2.0.3 [Release 10.1 to 11.2] Oracle Database -

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

绝逼新手小白,so 请大神指点! 如果真的错的太多,错的太离谱,错的误导了其他小伙伴,还望大神请勿喷,大神请担待,大神请高抬贵嘴......谢谢. 好了,正题 刚接触ssh,今天在搞使用.hbm.xml文件 和 注解方式 来自动生成数据表 其中只是整了spring.hibernate,struts部分没有整.也就是说我只是测试了能够自动生成数据表(自动生成为"标准",自认为是对的......) 下面是配置和代码: 使用工具:myeclipse 2014 ,其中web project项目

[转]用Python做一个自动生成读表代码的小脚本

写在开始(本片文章不是写给小白的,至少你应该知道一些常识!) 大家在Unity开发中,肯定会把一些数据放到配置文件中,尤其是大一点的项目,每次开发一个新功能的时候,都要重复的写那些读表代码.非常烦.来个实用小工具,大家随便看看. 1 #-*- coding: utf-8 -*- 2 #----------------------------------------------------------# 3 # 版本:python-3.5.0a3-amd64 4 # 功能:生成读表代码文件 5 #

【沫沫金原创】Bat批处理完成Oracle数据库7天备份自动删除

导读 数据库的备份是古老而不可忽视的话题,完成备份,随着时间的推移,将会占用大量的空间,这是个问题?解决有两个选项,1.增加存储空间 2.保留最近备份.本篇重点介绍方案2 方案2 编写bat脚本,支持删除指定目录下7天前的文件,核心是"forfiles" forfiles /p "D:\YtForever\YTPQM\DB\backup" /s /m *.* /d -7 /c "cmd /c del @path" 替换路径,存为.bat即可. 自

Oracle生成指定表的列名,并前后添加select from

表的列名比较多的时候,手工一个个的写列名比较麻烦,这个函数可以让人偷偷懒 create or replace function f_GetCols(p_TableName in varchar2/*获取表中所有列名 前后添加select from*/)  RETURN varchar2isResult  varchar2(2000);v_cnts number;v_strTabName varchar2(200);BEGIN v_strTabName:=upper(p_tablename); s