`
supttkl
  • 浏览: 17608 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

自动生成sql

阅读更多
适用:oracle
用法

call COM_BKY_TOOL .CRUSQL('表名','c') 生成insert语句

call COM_BKY_TOOL .CRUSQL('表名','r') 生成select语句

call COM_BKY_TOOL .CRUSQL('表名','u') 生成update语句
 -----------------------------------------------------------------------包名------------------------------------------
CREATE OR REPLACE PACKAGE COM_BKY_TOOL IS

	PROCEDURE CRUSQL
	(
		TNAME     IN VARCHAR2,
		CRUD_TYPE IN VARCHAR2
	);

	PROCEDURE CREATETYPE(TNAME IN VARCHAR2);

END COM_BKY_TOOL;





-----------------------------------------------------------------------包体------------------------------------------

CREATE OR REPLACE PACKAGE BODY COM_BKY_TOOL AS

	PROCEDURE CRUSQL
	(
		TNAME     IN VARCHAR2,
		CRUD_TYPE IN VARCHAR2
	) AS
		CURSOR T_CURSOR IS
			SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH
				FROM ALL_TAB_COLUMNS
			 WHERE OWNER = 'SCOTT'
				 AND TABLE_NAME = UPPER(TNAME)
			 ORDER BY COLUMN_ID;
		SQL_STR VARCHAR2(1000);
		TYPE TB IS RECORD(
			C_NAME ALL_TAB_COLUMNS.COLUMN_NAME%TYPE,
			D_TYPE ALL_TAB_COLUMNS.DATA_TYPE%TYPE,
			D_LEN  ALL_TAB_COLUMNS.DATA_LENGTH%TYPE);
		TB2      TB;
		ALLCOUNT NUMBER;
		COUNTNUM NUMBER := 0;
	BEGIN
		SELECT COUNT(*)
			INTO ALLCOUNT
			FROM ALL_TAB_COLUMNS
		 WHERE OWNER = 'SCOTT'
			 AND TABLE_NAME = UPPER(TNAME)
		 ORDER BY COLUMN_ID;
		IF CRUD_TYPE = 'r' THEN
			DBMS_OUTPUT.PUT('SELECT ');
			OPEN T_CURSOR;
			LOOP
				FETCH T_CURSOR
					INTO TB2;
				IF T_CURSOR%FOUND THEN
					COUNTNUM := COUNTNUM + 1;
					DBMS_OUTPUT.PUT(UPPER(TNAME));
					DBMS_OUTPUT.PUT('.');
					DBMS_OUTPUT.PUT(TB2.C_NAME);
					IF COUNTNUM < ALLCOUNT THEN
						DBMS_OUTPUT.PUT(',');
					END IF;
				ELSE
					EXIT;
				END IF;
			END LOOP;
			CLOSE T_CURSOR;
			DBMS_OUTPUT.PUT(' FROM ');
			DBMS_OUTPUT.PUT(UPPER(TNAME));
			DBMS_OUTPUT.PUT_LINE('');
		ELSIF CRUD_TYPE = 'c' THEN
			DBMS_OUTPUT.PUT('INSERT INTO ');
			DBMS_OUTPUT.PUT(UPPER(TNAME));
			DBMS_OUTPUT.PUT('(');
			OPEN T_CURSOR;
			LOOP
				FETCH T_CURSOR
					INTO TB2;
				IF T_CURSOR%FOUND THEN
					COUNTNUM := COUNTNUM + 1;
					DBMS_OUTPUT.PUT(TB2.C_NAME);
					SQL_STR := SQL_STR || '?';
					IF COUNTNUM < ALLCOUNT THEN
						DBMS_OUTPUT.PUT(',');
						SQL_STR := SQL_STR || ',';
					END IF;
				ELSE
					EXIT;
				END IF;
			END LOOP;
			CLOSE T_CURSOR;
			DBMS_OUTPUT.PUT(')VALUES(');
			DBMS_OUTPUT.PUT(SQL_STR);
			DBMS_OUTPUT.PUT(')');
			DBMS_OUTPUT.PUT_LINE('');
		ELSIF CRUD_TYPE = 'u' THEN
			DBMS_OUTPUT.PUT('UPDATE ');
			DBMS_OUTPUT.PUT(UPPER(TNAME));
			DBMS_OUTPUT.PUT(' SET ');
			OPEN T_CURSOR;
			LOOP
				FETCH T_CURSOR
					INTO TB2;
				IF T_CURSOR%FOUND THEN
					COUNTNUM := COUNTNUM + 1;
					DBMS_OUTPUT.PUT(TB2.C_NAME);
					DBMS_OUTPUT.PUT('=?');
					IF COUNTNUM < ALLCOUNT THEN
						DBMS_OUTPUT.PUT(',');
					END IF;
				ELSE
					EXIT;
				END IF;
			END LOOP;
			CLOSE T_CURSOR;
			DBMS_OUTPUT.PUT_LINE(' WHERE ID=?');
			DBMS_OUTPUT.PUT_LINE('');
		END IF;
	END CRUSQL;

	--  
	PROCEDURE CREATETYPE(TNAME IN VARCHAR2) AS
	CURSOR T_CURSOR IS
		SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH
			FROM ALL_TAB_COLUMNS
		 WHERE OWNER = 'SCOTT'
			 AND TABLE_NAME = UPPER(TNAME)
		 ORDER BY COLUMN_ID;
	TYPE TB IS RECORD(
		C_NAME ALL_TAB_COLUMNS.COLUMN_NAME%TYPE,
		D_TYPE ALL_TAB_COLUMNS.DATA_TYPE%TYPE,
		D_LEN  ALL_TAB_COLUMNS.DATA_LENGTH%TYPE);
	TB2      TB;
	ALLCOUNT NUMBER;
	COUNTNUM NUMBER := 0;
BEGIN
	SELECT COUNT(*)
			INTO ALLCOUNT
			FROM ALL_TAB_COLUMNS
		 WHERE OWNER = 'SCOTT'
			 AND TABLE_NAME = UPPER(TNAME);

	OPEN T_CURSOR;
	DBMS_OUTPUT.PUT('TYPE ');
	DBMS_OUTPUT.PUT(UPPER(TNAME));
	DBMS_OUTPUT.PUT_line(' IS RECORD(');
	LOOP
		FETCH T_CURSOR
			INTO TB2;
		IF T_CURSOR%FOUND THEN
			COUNTNUM := COUNTNUM + 1;
			 
			DBMS_OUTPUT.PUT(TB2.C_NAME);
			DBMS_OUTPUT.PUT('        ');
			DBMS_OUTPUT.PUT(UPPER(TNAME));
			DBMS_OUTPUT.PUT('.');
			DBMS_OUTPUT.PUT(TB2.C_NAME);
			DBMS_OUTPUT.PUT('%TYPE');
			IF COUNTNUM < ALLCOUNT THEN
				DBMS_OUTPUT.PUT_LINE(',');
			END IF;
		ELSE
			EXIT;
		END IF;
	END LOOP;
	CLOSE T_CURSOR;
	DBMS_OUTPUT.PUT_LINE('');
	DBMS_OUTPUT.PUT_LINE(');');
	END CREATETYPE;

END COM_BKY_TOOL;

 


分享到:
评论

相关推荐

    自动生成SQL语句

    "自动生成SQL语句"的工具为开发者提供了便利,尤其是在处理复杂的数据操作时,可以节省大量手动编写SQL代码的时间。这样的工具通常通过解析数据库结构、理解用户需求,然后自动生成相应的SQL命令。 1. SQL基础知识...

    SQL SERVER 数据自动生成SQL语句

    SQL Server 数据自动生成SQL语句是一项实用的功能,它极大地简化了数据迁移或备份的过程。这个功能使得用户能够快速地根据数据库中的表结构和已有数据,生成相应的SQL插入语句,以便将这些数据移植到其他数据库系统...

    mybatis根据数据库表自动生成SQL、实体类、mapper文件工具

    "mybatis根据数据库表自动生成SQL、实体类、mapper文件工具"就是这样一个解决方案,它基于Eclipse集成开发环境,特别适用于使用SSM(Spring、SpringMVC、MyBatis)框架的项目。 首先,MyBatis是一个优秀的持久层...

    自动生成SQL语句_C#_sql_

    本文将深入探讨如何在C#中自动生成SQL语句,以提高开发效率并减少手动编写SQL可能导致的错误。 一、Entity Framework与自动SQL生成 1. Entity Framework(EF)是微软提供的一个开源ORM(对象关系映射)框架,它...

    mybatis自动sql生成插件源码

    本项目提供的"mybatis自动sql生成插件源码"则进一步提升了开发效率,通过拦截器(Interceptor)在运行时自动生成SQL语句,适用于具有主键或唯一索引的单表操作。 首先,`AutoMapperInterceptor.java`是这个插件的...

    根据表结构和数据,自动生成SQL

    针对这种情况,"根据表结构和数据,自动生成SQL"的技术应运而生,它能够极大提升效率并降低错误率。 这个技术的核心是通过分析数据库中的表结构和数据,自动生成对应的SQL脚本。这样的脚本通常包括创建表的DDL...

    C#三层架构+自动生成sql语句+抽象工厂

    本项目结合了C#的三层架构、自动生成SQL语句以及抽象工厂设计模式,为初学者提供了一个很好的学习实例。 首先,让我们深入理解一下三层架构。三层架构是一种软件设计模式,将应用程序分为三个主要部分:表现层...

    可以自动生成sql语句的工具

    为了提高开发效率,许多工具应运而生,它们能够自动生成SQL语句,甚至包括相关的基本代码,如增、删、改、查操作。标题中的“可以自动生成sql语句的工具”就是这类软件的代表,它极大地简化了程序员的工作,减少了...

    AI自动生成SQL语句的开源代码 sqlcoder-main.zip

    开源的AI自动生成SQL语句源代码,这款SQLCoder-70B-Alpha在文本到SQL的转换能力上超越了包括GPT-4在内的所有通用模型,它能更准确地理解你的需求,并生成相应的SQL查询。SQLCoder2和SQLCoder-7B模型已经向公众开放,...

    Excel自动生成sql

    标题中的“Excel自动生成SQL”指的是使用Excel结合VBA(Visual Basic for Applications)宏来创建SQL查询语句。VBA是Microsoft Office套件中内置的一种编程语言,它允许用户自定义工作簿、工作表和图表的功能,以...

    自动生成SQL 语句的工具

    "自动生成SQL语句的工具"就是为了帮助开发者减轻这部分负担,提高效率的利器。这类工具通过智能分析和理解数据库结构,能够自动生成复杂的SQL查询,更新和操作语句,使得开发者可以更专注于业务逻辑,而非基础的SQL...

    用于自动生成sql脚本的sql server数据库专用

    用于自动生成sql脚本的sql server数据库专用用于自动生成sql脚本的sql server数据库专用用于自动生成sql脚本的sql server数据库专用

    自动生成SQL语句,及格式

    "自动生成SQL语句"是一个非常实用的技术,尤其对于开发者来说,它可以极大地提高工作效率,减少手动编写SQL时可能出现的错误。下面将详细介绍这个主题,并围绕"自动生成SQL语句"这一功能展开讨论。 首先,自动生成...

    自动生成SQL语句C#代码

    "自动生成SQL语句C#代码"的项目旨在简化这一过程,通过C#编程语言实现自动化生成常见的增、删、改、查(CRUD)SQL语句。这种自动化方法尤其适用于SQL Server 2000,它能够提高开发效率,减少手动编写SQL语句时可能...

    C#泛型、反射实例、自动生成sql语句

    本篇文章将详细探讨C#中的泛型、反射以及如何利用这些特性来实现自动生成SQL语句。 **一、C# 泛型** 泛型是C#的一个核心特性,它允许我们编写类型参数化的代码,即代码可以在多种数据类型上工作,而无需进行显式的...

    Excel自动生成sql创建表语句

    支持sqlserver与oracle自动生成sql创建表语句,一键自动生成,非常强大。

    读取excel自动生成sql文的txt文件

    这个“读取excel自动生成sql文的txt文件”的工具显然是为了解决这一问题而设计的。它允许用户通过Excel表格结构快速生成对应的SQL插入语句,极大地提高了工作效率。 首先,我们需要理解Excel文件的结构。Excel是一...

    sql语句万能生成器,sql语句,sql语句生成

    SQL语句生成器是一种软件工具,它能够帮助开发者自动生成SQL语句,大大减轻了编写和调试的工作负担。这种工具通常包含各种功能,如:根据数据库结构自动生成SELECT、INSERT、UPDATE、DELETE语句,支持JOIN操作,生成...

    web逆向工程(自动生成sql语句)

    本话题将聚焦于如何利用工具和技术自动生成SQL语句,这在Mybatis工程和一般的Web工程中尤其有用。以下是对这个主题的详细阐述: 1. **Web逆向工程基础**:逆向工程通常涉及静态分析(查看源代码、网络流量等)和...

    c#-三层构架-代码生成器,自动生成sql和代码

    "C#-三层构架-代码生成器"是一个专门针对C#编程语言设计的工具,能够自动生成SQL代码和框架代码,极大地提高了开发效率。 1. 表现层:这一层是用户与系统交互的界面,通常包括Web页面、WinForms或其他UI组件。代码...

Global site tag (gtag.js) - Google Analytics