Hibernate 与数据库的关系是ORM关系,对象映射数据库。
那么如何通过对象对数据库进行各种对象的ddl与dml操作呢?
数据库对象操作的〈database-object /〉+ SchemaExport
1、hibernate.cfg.xml
<?xml version="1.0" encoding="GBK"?>
<!-- 指定Hibernate配置文件的DTD信息 -->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!-- hibernate- configuration是连接配置文件的根元素 -->
<hibernate-configuration>
<session-factory>
……
<!-- 根据需要自动创建数据库:如果创建表,这里必须为create -->
<property name="hbm2ddl.auto">create</property>
<!-- 显示Hibernate持久化操作所生成的SQL -->
<property name="show_sql">true</property>
<!-- 将SQL脚本进行格式化后再输出 -->
<property name="hibernate.format_sql">true</property>
<!-- 罗列所有的映射文件 -->
<mapping resource="……/lovejk.hbm.xml"/>
</session-factory>
lt;/hibernate-configuration>
2、lovejk.hbm.xml
<?xml version="1.0" encoding="gb2312"?>
<!-- 指定Hiberante3映射文件的DTD信息 -->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- hibernate-mapping是映射文件的根元素 -->
<hibernate-mapping>
<!-- 使用data-object元素定义数据库对象 -->
<database-object>
<!-- 定义创建数据库对象的语句 -->
<create>create table testjk(name varchar(256));</create>
<!-- 让drop元素为空,不删除任何对象 -->
<drop></drop>
<!-- 指定仅对MySQL数据库有效 -->
<dialect-scope name="org.hibernate.dialect.MySQLDialect"/>
<dialect-scope name="org.hibernate.dialect.MySQLInnoDBDialect"/>
</database-object>
</hibernate-mapping>
3、执行 www.jx-jf.com
public static void main(String[] args) throws Exception
{
//实例化Configuration,这行代码默认加载hibernate.cfg.xml文件
Configuration conf = new Configuration()。configure();
//以Configuration创建SessionFactory
SessionFactory sf = conf.buildSessionFactory();
// //创建SchemaExport对象 www.yzyedu.com
SchemaExport se = new SchemaExport(conf);
// //设置输出格式良好的SQL脚本
se.setFormat(true);
// //设置保存SQL脚本的文件名
se.setOutputFile("d:\\1.sql");
// //输出SQL脚本,并执行SQL脚本
se.create(true, true);
sf.close();
}
-
【JAVA】Hibernate 之 创建数据库对象
2018-05-06 23:12:49Hibernate 之 创建数据库对象 Session 其实session相当于hibernate当中连接数据库的一个媒介,它就是一个操作数据库的对象。 session与connection,是多对一的关系。把对象保存在关系数据库中需要调用session的...Hibernate 之 创建数据库对象
Session
其实session相当于hibernate当中连接数据库的一个媒介,它就是一个操作数据库的对象。
session与connection,是多对一的关系。把对象保存在关系数据库中需要调用session的各种方法,如:save()、update()、delete()、createQuery()等。
如何获得session对象?
openSession
getCurrenSession(!这种方式需要在配置文件汇总进行配置,否则将会报错)
如果是本地事务(jdbc事务)
thread
如果是全局事务(jta事务)
jta
两者的区别:
- getCurrenSession在事务提交或者回滚之后会自动关闭,而openSession需要手动关闭。如果使用openSession而没有手动关闭,多次之后会导致连接池溢出。
- openSession每次创建新的session对象,而getCurrentSession使用现有的session对象。
transaction
- hibernate对数据的操作都是封装在事务当中,并且默认是非自动提交的方式。所以用session保存对象时,如果不开启事务,并且手工提交事务,对象并不会真正保存在数据库中。 !!一定要记得开启事务
单一主键
- assigned 由java应用程序负责生成(手工赋值);
- native 由底层数据库自动生成标志符,如果是MySQL就是increment,如果是Oracle就是sequence,等等。
组件属性
- 实体类中的某个属性属于用户自定义的类的对象。
- 个人理解:在原来的表结构基础上增加了用户自定义的字段。
<component name="address" class="Address"> <property name="postcode" column="POSTCODE"></property> <property name="phone" column="PHONE"></property> <property name="address" column="ADDRESS"></property> </component>
单表CRUB操作实例
- save 保存对象
- update 修改对象
- delete 删除对象
- get/load (查询单个记录)
应该将所有操作完成以后再提交事务。
public class SchoolCourseTest { private SessionFactory seesionFactory; private Session session; private Transaction transaction; public static void main(String[] args) { SessionFactory seesionFactory; Session session; Transaction transaction; Configuration cfg; ServiceRegistry serviceRegistry; Timestamp time = new Timestamp(System.currentTimeMillis()); SchoolCourse sc = new SchoolCourse(5,"算法分析",2,1,time,"cxz","none"); // sc.setId(4); // sc.setCourseName("JAVA"); // sc.setSchoolTerm(1); // sc.setStatus(2); // sc.setCreatedDate(time); // sc.setCreater("cxz"); // sc.setMemo("none"); //获得配置对象 cfg = new Configuration().configure(); //获得服务注册独享 serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry(); //获得seesionFactory对象 seesionFactory = cfg.buildSessionFactory(serviceRegistry); //获得session对象 session = seesionFactory.openSession(); transaction = session.beginTransaction(); //save 保存对象 // session.save(sc); //get / load(查询单个对象) sc = (SchoolCourse)session.get(SchoolCourse.class,1); System.out.print(sc); sc = (SchoolCourse)session.load(SchoolCourse.class,2); System.out.print(sc); //update 更新对象 sc = (SchoolCourse)session.get(SchoolCourse.class,3); sc.setMemo("update"); System.out.print("memo:"+sc.getMemo()); session.update(sc); //delete 删除对象 sc = (SchoolCourse)session.get(SchoolCourse.class,7); session.delete(sc); //提交事务 transaction.commit(); //关闭会话对象 session.close(); } }
-
Hibernate数据库对象的创建与导出
2019-09-27 23:11:13那么如何通过对象对数据库进行各种对象的ddl与dml操作呢? 数据库对象操作的〈database-object /〉+ SchemaExport 1、hibernate.cfg.xml <?xml version="1.0" encoding="GBK"?> <!-- 指定Hibernate.....转载于:https://www.cnblogs.com/tianchaoy/p/3633574.html
-
【数据库】oracle数据库对象---->视图
2016-04-08 17:42:00数据库的真实数据都是存在于数据表中,数据表是反映现实世界的实体关系。但是,为现实世界的所有关系创建数据表是不现实的。...来学习视图的知识,并掌握如何创建和使用各种视图,同时对各种视图之间的区...数据库的真实数据都是存在于数据表中,数据表是反映现实世界的实体关系。但是,为现实世界的所有关系创建数据表是不现实的。数据库中的视图解决了这一问题。视图以物理数据未基础,利用更灵活的策略来实现关系。接下来,我们将从:
视图介绍、关系视图的创建和使用、内嵌式图的使用、对象视图的使用、物化视图的使用等几个方面,
来学习视图的知识,并掌握如何创建和使用各种视图,同时对各种视图之间的区别有清晰的了解。
1、视图简介:
1.1 什么是视图
视图是由已经存在的数据,通过一定的运算规则,来获得新的数据集合。这使得用户可以更加灵活的自定义数据集合,视图同时为数据安全性提供了一种控制策略。
(1) 视图的产生
之前一篇博文中讲到了数据表的创建规则,由于遵循第三范式,表在设计时,应当避免数据冗余,而另一方面,使用各种组合数据更加常用,设计规则却禁止为组合数据创建新的数据表。
比如:表employees存储了员工的基本信息,其中包括了员工ID、员工姓名、职位、年龄、地址。表salary存储了员工工资信息,其中包括了工资ID、员工ID、月份、工资、货币种类。
现在需要为财务人员准备一个新的数据集合,该数据集合存储了员工ID、员工姓名、员工年龄、月份及当月工资。很明显,创建新表employee_salary,以满足财务人员的需求是不可取的,此时,创建视图来解决该问题是最佳途径。
下图演示了针对表employees每行数据,根据employee_id列值相等的条件,在表salary中筛选记录,并最终组成新的数据集合。这种关系运算的存储在视图vw_employees终。对于用户来说,只需要定义运算规则,而运算贵的载体-----视图,并不存储真实的数据。
(2)视图的本质
从关系代数理论上来说,数据表可以看做关系。这种关系往往代表了现实世界的真实实体。而关系可以通过各种运算(交、差、并、投影)来获得新的关系。
在查询员工工资状况的实例中,可以通过表之间的关系运算获得财务人员所需的结果集合。该结果集具有临时性,一旦使用完毕,即可丢弃。这些结果数据,并不形成真正的数据表,也不会持久化到数据库中。视图也不存储查询的结果,但是存储了查询的定义。也就是说,对于关系运算的运算步骤进行存储。因此,视图的本质就是关系运算的定义。
1.2 为啥使用视图咧
视图是绝大部分数据库开发中都会使用的概念。使用视图大致有两个方面的原因。
(1)封装查询
数据库虽然可以存储海量数据,但是在数据表设计上却不可能为每种关系创建数据表。例如:对于学生表,存储了学生信息,学生的属性包括学号、姓名、年龄、地址等信息;而学生成绩表只存储了学生学号、科目、成绩等信息,现需要获得学生姓名及成绩信息,那么久需要创建一个关系,该关系需要包含学生姓名、科目、成绩。但为该关系创建一个新的数据表,并利用实际信息进行填充,以备查询使用,是不合适的。因为这种做法很明显的造成了数据库中数据的大量冗余。
视图则是解决该问题的最佳策略,因为视图可以存储查询定义(或者关系运算),那么,一旦使用视图存储了查询定义,就如同存储了一个新的关系。用户可以直接对视图中所存储的关系进行各种操作,就如同面对的是真实的数据表。
(2)灵活的控制安全性
一个数据表可能含有很多列,但是这些列的信息,对于不同角色的用户,可访问的权限有可能不同。例如:在员工表中,可能存在着员工工号、姓名、年龄、职位、地址、社会关系等信息。对于普通用户,有可能需要访问员工表,来查看某个工号的员工的姓名、职位等信息,而不允许查看家庭地址、社会关系等信息;对于高级用户,则需要关注所有信息,那么,久涉及到数据表的安全性。
利用视图可以灵活的实现这一策略,例如:可以首先创建名为vw_employees的视图,该视图的查询定义为,选择员工表中员工工号、姓名、职位等3列,这相当于在员工关系中,进行投影运算,即选择员工工号、姓名、职位等3个属性,形成新的关系。
同样的,对于高级用户,可以创建名为vw_employees_hr的视图,该视图选择员工表中所有列。
然后,对于两种角色分别分配两个视图的查询权限,与实际的数据表employees隔离开来,从而控制数据访问的安全性。
2、创建和使用关系视图
oracle中的视图,按照创建和使用方式的不同,可以分为四类:关系视图、内嵌视图、对象视图和物化视图。
关系视图是4种视图中最简单,同时也最常用的视图。关系视图可以看做对简单或复杂查询的定义。他的输出可以看做一个虚拟的表。
2.1 创建关系视图
oracle视图是作为数据库对象存在的。因此,创建之后也可以通过工具或数据字典来查看视图的相关信息,接下来,要讲解的是:关系视图的创建和如何查看视图的属性信息。
(1)创建关系视图
创建关系视图应该使用create view命令,其语法形式如下所示:
create view 视图名称 as 查询语句|关系运算
其中,create view是创建关系视图的命令,其后紧跟视图名称;as 后面连接的是视图的查询定义(或者说关系运算)。
例子:在数据库中存在着名为employees的数据表,如需创建针对普通用户的视图vw_employees。该视图仅可以访问表中的员工ID、员工姓名,以及员工职位,那么可以利用如下的SQL语句。
create view vw_employees as select employee_id, employee_name, employee_position from employees;
其中,create view 向数据库发送创建视图命令,as 关键字连接创建命令与视图定义;select employee_id、employee_name和employee_position from t_employees用于获取表t_employees中的employee_id、employee_name和employee_position 3 列。
(2)查看视图定义
视图一旦创建,其定义即可存在于数据库中,可以通过PL/SQL Developer的veiws 窗口查看视图VW_EMPLOYEES在数据库中的信息。
如果是有数据字典,也可以在输入SQL语句进行查询,比如:
select view_name, text from user_views where view_name= 'VW_EMPLOYEES';
view text
vw_employee select employee_id, employee_name, employee_position from employees
其中,view_name列为视图名称,text列为视图定义。
2.2 使用关系视图
视图一旦创建,用户可以像查询数据表一样查询视图中的数据,但是,对于插入和更新操作来说,情况则有些不同。
(1)查询视图
例子:在创建了视图VW_EMPLOYEES之后,即可利用查询语句来获得视图中所包含的数据,如下:
SQL>select * from vw_employeess;
(2)更新视图数据
用户可以利用update语句更新视图中的数据,而视图本身并不存储数据,其数据来源于基础数据表,因此,更新视图数据,实际是更新基础表中的数据。
例子:在员工视图vw_employees中,现在需要将员工“刘俊”职位调整为“高级工程师”,那么可以直接更新视图,响应的SQL语句:
SQL>update vw_employees set employee_position = '高级工程师' where employee_name='刘俊';
其中,update为更新命令;vw_employees为update 命令的操作对象;set employee_position = '高级工程师',employee_name='刘俊',是指定更新条件。
但是,此时更新的实际是将表employees中的数据进行了修改。
综合视图操作及查询结果可知,对视图的更新操作,实际为更新基础表中的数据,由于视图仅存储查询定义,因此,一旦基础表中的数据被修改,则修改后的结果可以立即反映到视图中。
2.3 向视图插入数据
同样,可以利用insert语句,向视图中插入数据。
例子:在视图vw_employees中,插入新员工“张三”的相关信息,其SQL语句如下所示。
SQL>insert into vw_employees values (6 , '张三', '测试工程师')
由于,该视图只能查到该3项内容,所以,在向视图vw_employees中插入数据时,无法为列employee_age和列employee_address指定数据,因此,在基础表employees中,对应记录的employee_age列和employee_address列的值为空。
2.4 总结利用关系视图修改数据。
利用关系视图,除了插入数据和更新数据之外,还可以删除其中的数据。表面上看起来,可以通过视图对基础表进行任何修改,但事实并非如此,与之相反,大多数时候,并不能直接利用视图修改基础表数据。
例子:oracle内置视图user_update_columns定义了用户视图中各列的可更新情况,可以通过如下SQL语句进行查看。
SQL>select table_name, column_name, updatable, insertable, deletable
from user_updatable_columns
where table_name = 'VW_EMPLOYEES'
其中,TABLE_NAME列为表名(在此,为视图名,这里也印证了oracle往往将视图当做普通数据表处理);COLUMN_NAME列为视图中的列名;UPDATBALE、INSERTABLE和DELETABLE分别代表列的可更新、可插入以及可删除的情况。
对于更新操作,只要该列可更新,那么饥渴利用视图进行更新;而对于插入和删除操作,则必须所有列均可执行插入和删除操作,才能利用视图进行操作。
2.3 修改/删除视图
在创建了关系视图vw_employees之后,可以对其进行修改和删除操作。
(1)修改视图
修改视图的过程即为重新定义视图的过程。可以通过首先删除视图,然后再次创建实现。另外,oracle也提供了一个专门的命令----create or replace view 来重新定义视图。其语法形式如下所示:
create or replace view 视图名称 as 查询语句 | 关系运算
例子:假设现在需要为视图vw_employees添加新列employee_age,那么可以利用如下SQL语句。
create or repalce view vw_employees as
select employee_id, employee_name, employee_position, employee_age from employees
其中,create or replace view vw_employees用于创建或者替换视图vw_employees的定义;as 之后的查询语句为视图的新定义,在新定义中增加了列employee_age。
【注意】create or replace view命令的作用,当同名视图不存在时,将执行创建命令;否则将执行替换命令。
(2)删除视图
删除视图的动作实际为删除数据库中的对象操作,因此该操作为DML操作,如同删除数据表对象,删除视图也应该使用drop命令,其语法形式如下所示。
drop view view_name
其中,drop view向数据库发送删除视图命令;view_name则指定了要删除的视图名称。
例子:如需删除视图vw_employees,则可以利用如下SQL语句。
drop view vw_employees;
2.4 只读视图
上面讲述了修改视图数据,有时,并不希望用户通过视图修改数据,则可以创建只读视图,创建只读视图应该使用read only选项,其基本语法形式如下所示。
create or replace view 视图名称 as查询语句
with read only
其中,with read only 选项表示该视图将被创建为只读视图。
2.5 联接视图
对于视图定义来说,其数据可以来源于一个数据表,也可以来源多个数据表或者其他视图的联接。事实上,联接视图在实际开发中更加常用,本节将讲述联接视图的使用。
例子:可以利用create or replace view定义一个联接视图,只是视图定义更加复杂而已,在表employees与表salary中分别定义了员工与工资信息,则可以利用create or replace view创建视图。
create or replace view vw_employee_salary as
select e.employee_id, e.employee_name, s.month, s.salary
from employees e, salary s
where e.employee_id = s.employee_id
其中as关键字之后使用了表employees与表salary的联接获得新的数据集合。联接条件为表employees中的employee_id与表salary中的employee_id相等。在视图创建成功之后,即可查询表中的数据。
2.6 强制创建视图
归根结底,视图数据的来源是基础数据表。有时,视图的基础表尚未创建,但是仍然希望创建基于不存在的数据表的视图。
例子:开发者预期有名为customer的数据表,该表至少包含以下列。
现需要创建一个名为vw_customer的视图,该视图仅包含以下列customer_id、customer_code、customer_name、customer_level和contact_telephone。但是,视图创建者无权创建实际的数据表。但是又不能等待表的预期创建者的工作,此时,可以使用force选项来强制创建视图。利用force选项,强制创建视图的语法如下所示。
create or replace force view 视图名称 as 查询语句 | 关系运算
在PL/SQL Developer中强制创建视图vw_customer。
SQL>create or replace force view vw_customer as
select customer_id, customer_code, customer_name, contact_telephone
from customer;
转载于:https://www.cnblogs.com/iamliuxin/p/5617799.html
-
wpf datagrid 获取点击列名_干货分享|DM数据库获取表结构和对象定义方法
2020-12-10 04:21:55很多新手在开始使用DM数据库时,都遇到过如何获取表结构信息的问题,今日我整理了获取表结构的各种方法,也可以从这些方法中获取其他对象的定义信息,比如表、视图、存储过程、函数、包等DDL创建语句,供大家参考。...很多新手在开始使用DM数据库时,都遇到过如何获取表结构信息的问题,今日我整理了获取表结构的各种方法,也可以从这些方法中获取其他对象的定义信息,比如表、视图、存储过程、函数、包等DDL创建语句,供大家参考。
本章介绍DM数据库获取表结构方法。
本章的测试环境:
①操作系统:Windows 10 (64位)
②数据库版本:DM8
相关关键字:DM数据库对象定义语句 表结构
DM数据库获取对象定义信息
下面从系统包、系统过程、数据字典、DISQL窗口和客户端管理工具等方面介绍获取表结构、视图和其他对象定义的方法。
01
使用DBMS_META系统包
DBMS_META系统包兼容Oracle功能,其GET_DDL函数用于获取数据库对表、视图、索引、全文索引、存储过程、函数、包、序列、同义词、约束、触发器等定义的DDL语句。
语法如下:
FUNCTIONG GET_DDL(OBJECT_TYPE IN VARCHAR(30),NAME IN VARCHAR(128),SCHNAME IN VARCHAR(128) DEFAULT NULL)RETURN CLOB
参数详解
OBJECT_TYPE对象类型。包括表、视图、物化视图、索引、全文索引、存储过程、函数、包、目录等,具体可参考《DM8系统包使用手册》。OBJECT_TYPE只能为大写。
NAME 对象名称,区分大小写。
SCHEMA 模式,默认是当前用户模式。
①获取表定义语句
select dbms_metadata.get_ddl(OBJECT_TYPE => 'TABLE',NAME=>upper('EMPLOYEE'),SCHNAME => 'DMHR');
结果展示如下,从结果中可查看表及相关主键、外键、唯一性约束等相关定义:
②获取函数/存储过程定义语句
执行如下命令查询DMHR用户下存储过程P_EXPORTDATA的定义语句:
select dbms_metadata.get_ddl(OBJECT_TYPE => 'PROCEDURE',NAME=UPPER('P_EXPORTDATA'),SCHNAME='DMHR');
在DISQL窗口下执行时需注意返回的字符串过长会被截断,需设置long属性值较大。如下是DISQL窗口执行参考结果(也可在管理工具查询窗口执行):
③获取包定义语句
执行如下命令查询SYSJOB用户下系统包DBMS_JOB的定义语句:
select dbms_metadata.get_ddl(OBJECT_TYPE => 'PACKAGE', NAME=>upper('DBMS_JOB'), SCHNAME => 'SYSJOB');
如下是在管理工具查询窗口的执行结果,点击【另存为】可以保存为文本文件,方便阅读。
02
使用SP_TABLEDEF、
SP_VIEWDEF系统过程
DM数据库提供SP_TABLEDEF、SP_VIEWDEF系统过程,以结果集的形式返回表和视图的DDL创建语句。
①查询表定义SP_TABLEDEF
SP_TABLEDEF以结果集的形式返回表的定义。语法如下:
void SP_TABLEDEF (schname varchar(128),tablename varchar(128))
参数说明
schname:模式名
tablename:表名
如使用DMHR用户查询其当前用户下EMPLOYEE表结构,执行命令如下:
call sp_tabledef(user, 'EMPLOYEE');
DI SQL窗口下展示结果如下,可以看到表字段较多时会多行展示,格式不整体,视觉上看起来不方便,不推荐此方法。
②查询视图定义语句SP_VIEWDEF
SP_VIEWDEF以结果集的形式返回视图的定义,语法如下:
void SP_VIEWDEF (schname varchar(128),viewname varchar(128))
参数说明
schname:模式名
viewname:视图名
如查询SYS用户下ALL_ALL_TABLES视图定义,执行如下命令:
call sp_viewdef('SYS','ALL_ALL_TABLES');
在管理工具查询窗口执行结果展示如下,可以看出,视图定义过长时(字符串超过32767),记录会拆分多行展示,查看数据选择【另存为】可以保存为文本格式,但每行数据要单独保存,视图定义较长时不方便。也可在DISQL下执行,格式不整体,不推荐此方法。
03
使用数据字典
DM数据库提供兼容大部分Oracle功能的系统数据字典,包含DBA_TABLES、DBA_TAB_COLUMNS、DBA_VIEWS、DBA_SOURCE等数据字典,方便用户查询表结构、视图、对象定义等相关信息。
①查询表/视图字段信息
USER_TAB_COLUMNS/ALL_TAB_COLUMNS/DBA_TAB_COLUMNS
DBA_TAB_COLUMNS显示数据库中所有表、视图或聚簇的列。表字段定义略。
ALL_TAB_COLUMNS显示当前用户能够访问的表、视图或聚簇的列。表结构同DBA_TAB_COLUMNS。
USER_TAB_COLUMNS显示当前用户所拥有的表、视图或聚簇的列。
如使用DMHR用户查询其当前用户下EMPLOYEE表结构,查询SQL如参考如下:
select t.column_name, t.data_type, t.data_length, t.nullablefrom user_tab_columns twhere table_name='EMPLOYEE';
执行结果参考如下:
②查询视图定义信息USER_VIEWS/ALL_VIEWS/DBA_VIEWS
DBA_VIEWS显示数据库中所有的视图。其TEXT字段为TEXT类型,保存视图的DDL定义语句。
ALL_VIEWS显示当前用户能够访问的所有视图,结构同DBA_VIEWS。
USER_VIEWS显示当前用户所拥有的所有视图,结构同DBA_VIEWS,没有OWNER列。
如查询USER_VIEWS视图的定义信息,sql语句如下:
select t.owner, t.view_name, t.text_length, t.textfrom dba_views twhere t.view_name = upper('user_views');
语句结果展示如下(也可在管理工具查询窗口执行),注意这里TEXT内容是视图定义语句,如果是查询字段信息,可使用上述方法①。
③查询对象定义信息USER_SOURCE/ALL_SOURCE/DBA_SOURCE
DBA_SOURCE包含数据库中包、包体、存储过程、函数、触发器、TYPE对象的源码。其TEXT字段为TEXT类型,存放对象源码。
使用如下命令可查询系统包DBMS_METADATA的定义信息:
select* from dba_source t where t.NAME = 'DBMS_METADATA';
管理工具查询窗口执行结果如下(注意系统包包头可正常查看,但包体源码加密),选择【另存为】可保存至文本文件方便查看:
04
使用DESC命令(DISQL工具)
DESCRIBE命令是DISQL工具中的命令,用于获取对象结构信息,可获取表或视图、存储过程、函数、包、记录、类的结构信息,只能在DISQL窗口下使用。语法如下:
DESC[RIBE] <table>|<view>|<proc>|<fun>|<pkg>|<record>|<class>;
各对象获取的内容略有不同。
表或视图获取的内容包括:列名,列数据类型,列是否可以取空值。
函数、过程、类获取的内容包括两类:
1)存储函数/过程名,类型(函数或过程),函数返回值类型;
2)参数名,参数数据类型、参数输入输出属性、参数缺省值。
包获取的内容分为两类:
1)包内存储函数/过程名,类型(函数或过程),函数返回值类型;
2)包内参数名,参数数据类型、参数输入输出属性、参数缺省值。
记录获取的内容为:参数名,参数数据类型,参数是否可以取空值。
①获取表/视图字段信息
使用DISQL工具登录DM数据库,执行如下命令获取DMHR用户下EMPLOYEE表结果信息:
desc dmhr.employee;
展示结果参考如下,可以看出此命令使用简单,展示字段信息更直观:
②获取函数/存储过程的结构信息
使用SYSDBA用户执行如下命令,获取系统存储过程sp_tabledef的结构信息。
desc sp_tabledef;
展示结果参考如下(展示参数和返回值信息):
③获取包(PACKAGE)的结构信息
使用SYSDBA用户执行如下命令,获取系统包dbms_logmnr的结构信息。
desc dbms_logmnr;
展示结果参考如下(展示方法名,各方法参数和返回值信息):
05
客户端管理工具
DM客户端管理工具也提供了查看对象定义的功能,其可视化窗口使用起来更易上手,方便快捷。
①对象属性中获取对象定义语句
右击对象名称,选择最下面【属性】,打开对象属性页面,选择DDL页签,可查看对象的DDL定义语句,可点击【保存】,保存至文件更方便阅读。
②Create To获取对象定义语句
右击对象名称,选择【生成SQL脚本】->【Create To】,选择粘贴板或编辑器都行,可查看对象(包含表、视图、过程、函数、包、序列、表空间、同义词等)的定义语句。
//
好了,以上是查看表结构和对象定义的各种方法,大家可根据自己的喜好选择。在查询表结构方面,推荐使用desc命令更简单快捷,但缺点是只能在DISQL窗口下使用。在查询存储过程或函数的定义方面,除客户端工具外,推荐使用DBMS_META系统包或DBA_SOURCE数据字典视图,两者分别以CLOB和TEXT类型输出,格式上更整齐,方便输出和查看。
本次分享到此结束,感谢大家。
往期精选
围观
【干货分享】DM数据库迁移方法(物理迁移)
热文
【干货分享】DM数据库使用UTL_FILE读写文件方法
-
获取searchhit里面的属性_source_干货分享|DM数据库获取表结构和对象定义方法
2021-01-25 18:01:27很多新手在开始使用DM数据库时,都遇到过如何获取表结构信息的问题,今日我整理了获取表结构的各种方法,也可以从这些方法中获取其他对象的定义信息,比如表、视图、存储过程、函数、包等DDL创建语句,供大家参考。... -
如何利用Object Browser图形化工具提高Oracle开发工作效率(二)对象创建管理篇
2013-06-28 15:48:30下面我们就来说一说如何高效的创建和编辑各种数据库对象。Object Browser都能通过图形化界面创建哪些数据库对象呢?我们来看一看菜单就一幕了然了: 表(Table),索引(Index),视图(View),JAVA代 -
数据库知识点
2020-08-10 00:58:29注意:数据库是通过DBMS创建和操纵的容器,而具体它究竟是什么,形式如何,各种数据库都不一样。 数据库对象:数据库对象就是数据库的组成部分。有表,索引,视图,触发器,函数,存储过程,序列等等。表 -
Maven-java-数据库操作
2018-06-04 13:17:14上一篇文章介绍了如何创建Maven的项目,以及数据库的连接。这一篇文章记录一下,在Java通过面向对象实现数据库中各种表的查询。 -
关于SQL数据库
2017-02-08 15:46:35将PostgreSQL用作服务对象-关系型数据库管理系统来安全存储数据,用于其他软件应用程序请求时检索。 该数据库可以处理各种工作负载,从单机应用程序到具有许多并发用户的面向互联网的应用程序。 更多信息,请参见... -
如何实现jsp+mysql数据库----ssh开源框架搭建
2019-09-27 00:41:27不要过度担心明天 努力之后就会发现没什么不可以 相信大多数人都和我一样没听说过ssh开源框架吧,正好短学期学到了,就记录下我的认识吧。...它的mvc模式包括初始化、创建对象、验证、执行、返回数据、... -
Redis数据库的实现原理
2018-01-07 21:32:09知道了Redis的各种数据结构,对象结构,那么Redis是如何保存数据的,又是如何操作数据的呢,Redis里面的命令是怎么实现的呢?这一系列问题值得我们思考 一.Redis维护多个数据库 Redis内部维护一个db数组,每个db都... -
s2sh框架搭建mysql_如何实现jsp+mysql数据库----ssh开源框架搭建
2021-01-30 07:56:19什么是sshstructsweb应用启动时加载初始化actionservlet(控制器)控制器读取struts-config.xml文件中的配置信息,再把信息存放到各种配置对象它的mvc模式包括初始化、创建对象、验证、执行、返回数据、转发请求、返回... -
Oracle数据库精讲与疑难解析part2
2013-07-29 11:26:32有两部分,请分别下载。...实务13 创建数据库时,出现错误“ora-03113: end-of-file on 实务13 communication channel” 实务14 安装oracle时,报告错误“ora-27102:out of memory” 实务15 在linux(unix)环境... -
Oracle数据库精讲与疑难解析part1
2013-07-29 11:24:41有两部分,请分别下载。...实务13 创建数据库时,出现错误“ora-03113: end-of-file on 实务13 communication channel” 实务14 安装oracle时,报告错误“ora-27102:out of memory” 实务15 在linux(unix)环境... -
数据库学习基础之名词解释
2011-06-11 22:27:21在数据库画板中可以显示数据库中的所有数据表(即使不是用PowerBuilder创建的表),创建数据表,修改表的定义等数据表是数据库中一个非常重要的对象,是其他对象的基础。没有数据表,关键字、主键、索引等也就... -
SQL Server 2008数据库设计与实现(关系数据库实现的通关宝典)--随书源代码
2013-02-06 12:04:00翻译的过程中,译者感到此言不虚:作者从数据库的基本概念到数据库建模,从如何运用规范化原则到如何做成实际的数据库表,从如何保护数据库完整性到如何提高数据库的性能,从数据库的安全机制到并发事务控制,从... -
oracle数据库经典题目
2011-02-17 15:05:2011.一个模式只能够被一个数据库对象所拥有,其创建的所有模式对象都保存在自己的模式中。 12.根据约束的作用域,约束可以分为表级约束和列级约束两种。列级约束是字段定义的一部分,只能够应用在一个列上;而表级... -
oracle数据库----关系视图
2017-09-06 18:46:15数据库的真实数据都是存在于数据表中,数据表是反映现实世界的实体关系。但是,为现实世界的所有关系创建数据表是不现实的。...来学习视图的知识,并掌握如何创建和使用各种视图,同时对各种视图之间的区别有清晰的 -
Oracle Database 11g数据库管理艺术--详细书签版
2012-09-30 01:09:45书中内容主要集中在大多数企业常见的问题之上,如安装和升级到oracle database 11g数据库软件、创建数据库、导出和导入数据、数据库的备份与恢复、性能调优,等等。 本书还提供了dba完成本职工作必备的基本的uniix... -
Oracle数据库性能优化的艺术 (文平) 高清PDF扫描版
2015-02-06 13:58:35第10~12章着重介绍了在数据库系统部署并运行后,如何获得数据库运行时的性能状态,如何对正在使用的各种资源进行分析,分析时使用什么工具,以及如何解读这些工具返回的信息。 《oracle数据库性能优化的艺术》重在... -
深入浅出MySQL数据库开发、优化与管理维护
2014-01-21 15:48:0125.9 mysqlshow(数据库对象查看工具) 25.10 perror(错误代码查看工具) 25.11 replace(文本替换工具) 25.12 小结 第26章 MySQL日志 26.1 错误日志 26.2 二进制日志 ... -
【最新版】modeler030_en.dmg navicat-data-modeler: 3.0.8【亲测可用】最好的数据库设计工具
2020-04-22 00:49:15可视化数据库模型,以便您可以看到诸如属性,关系,索引,唯一性,注释和其他对象之类的元素如何相互关联,而无需显示实际数据。Navicat Data Modeler支持不同的数据库:直接连接,ODBC,MySQL,MariaDB,Oracle,... -
SQL Server编程系列(2):SMO常用对象的有关操作
2012-05-23 02:18:45在上一篇周公简单讲述了SMO的一些基本概念,实际... 在本篇中周公还是在上一篇的基础上再做稍微深入一点的介绍,在本篇中主要讲述如何获取数据库常见对象信息,并且如何利用SMO来进行一些日常操作:如创建Login,创建数 -
如何将shape文件转化成GeoDataBase(各种文件格式的转换)
2012-04-06 20:05:00本例演示的是如何将shape文件转化成personal GeoDatabase文件,其它... 要点 首先,创建新的GeoDataBase数据库,并创建IFeatureDatasetName对象。创建定义两个IFeatureClassName接口对象分别引用输入表(shape... -
RazorSQL Mac如何链接数据?
2019-10-02 15:54:21azorSQL for Mac已经过40多个数据库的测试,可以通过JDBC或ODBC连接到数据库,支持各种数据库,支持浏览数据库对象和结构,执行SQL查询和语句,搜索数据库对象和数据,编辑数据库表,创建和更改数据库对象等操作。... -
Oracle DBA手记3:数据库性能优化与内部原理解析--详细书签版
2013-02-06 14:59:27对Oracle 数据库技术具有狂热的爱好,深入理解Oracle 的体系结构、内存结构、物理存储(各种块格式)、锁机制、优化机制等。深入了解Oracle的备份恢复机制,熟悉Oracle 的各种备份方法,能够处理各种情况下的数据...
-
龙芯生态应用开发基础:C语言精要
-
sql、xlsx格式的食谱大全.rar
-
重构实践-源码
-
C++ - 分文件-贪吃蛇
-
自动不挂载ntfs分区且开启NTFS读写.rtf
-
(笔记)java面向对象
-
项目管理工具与方法
-
NFS 实现高可用(DRBD + heartbeat)
-
Excel视频教学-百度网盘.txt
-
神奇的口袋(动态规划入门)
-
2019浙江大学考研复试上机题
-
使用vue搭建微信H5公众号项目
-
2021-03-02
-
基于java的俄罗斯方块的设计与实现
-
基于SSM的仿小米商城源码
-
手机客户端UI测试分析
-
智能停车场云平台(附vue+SpringBoot前后端项目源码)
-
Amoeba 实现 MySQL 高可用、负载均衡和读写分离
-
mpeg2_chs-fuc.pdf
-
Ubuntu20.04安装influxdb_iox