精华内容
下载资源
问答
  • Hibernate 之 创建数据库对象 Session 其实session相当于hibernate当中连接数据库的一个媒介,它就是一个操作数据库的对象。 session与connection,是多对一的关系。把对象保存在关系数据库中需要调用session的...

    Hibernate 之 创建数据库对象

    Session

    其实session相当于hibernate当中连接数据库的一个媒介,它就是一个操作数据库的对象。

    session与connection,是多对一的关系。把对象保存在关系数据库中需要调用session的各种方法,如:save()、update()、delete()、createQuery()等。

    • 如何获得session对象?

      1. openSession

      2. getCurrenSession(!这种方式需要在配置文件汇总进行配置,否则将会报错

        如果是本地事务(jdbc事务)

        ​ thread

        如果是全局事务(jta事务)

        ​ jta

      两者的区别:

      1. getCurrenSession在事务提交或者回滚之后会自动关闭,而openSession需要手动关闭。如果使用openSession而没有手动关闭,多次之后会导致连接池溢出。
      2. 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();
        }
    }
    展开全文
  •  那么如何通过对象对数据库进行各种对象的ddl与dml操作呢? 数据库对象操作的〈database-object /〉+ SchemaExport 1、hibernate.cfg.xml <?xml version="1.0" encoding="GBK"?> <!-- 指定Hibernate.....

      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();

      }

     

    转载于:https://www.cnblogs.com/tianchaoy/p/3633574.html

    展开全文
  • 数据库的真实数据都是存在于数据表中,数据表是反映现实世界的实体关系。但是,为现实世界的所有关系创建数据表是不现实的。...来学习视图的知识,并掌握如何创建和使用各种视图,同时对各种视图之间的区...

    数据库的真实数据都是存在于数据表中,数据表是反映现实世界的实体关系。但是,为现实世界的所有关系创建数据表是不现实的。数据库中的视图解决了这一问题。视图以物理数据未基础,利用更灵活的策略来实现关系。接下来,我们将从:

    视图介绍、关系视图的创建和使用、内嵌式图的使用、对象视图的使用、物化视图的使用等几个方面,

    来学习视图的知识,并掌握如何创建和使用各种视图,同时对各种视图之间的区别有清晰的了解。


    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

    展开全文
  • 很多新手在开始使用DM数据库时,都遇到过如何获取表结构信息的问题,今日我整理了获取表结构的各种方法,也可以从这些方法中获取其他对象的定义信息,比如表、视图、存储过程、函数、包等DDL创建语句,供大家参考。...

    f725ebe697ed53dc516e7433fbb46ef0.gif

    很多新手在开始使用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');

    结果展示如下,从结果中可查看表及相关主键、外键、唯一性约束等相关定义:

    387b26528a869ac90b6af5c1b67c25b5.png

    ②获取函数/存储过程定义语句

    执行如下命令查询DMHR用户下存储过程P_EXPORTDATA的定义语句:

    select dbms_metadata.get_ddl(OBJECT_TYPE => 'PROCEDURE',NAME=UPPER('P_EXPORTDATA'),SCHNAME='DMHR');

    在DISQL窗口下执行时需注意返回的字符串过长会被截断,需设置long属性值较大。如下是DISQL窗口执行参考结果(也可在管理工具查询窗口执行):

    d02bd9c087cda7158fa2bf58e07fa700.png

    ③获取包定义语句

    执行如下命令查询SYSJOB用户下系统包DBMS_JOB的定义语句:

    select dbms_metadata.get_ddl(OBJECT_TYPE => 'PACKAGE', NAME=>upper('DBMS_JOB'), SCHNAME => 'SYSJOB');

    如下是在管理工具查询窗口的执行结果,点击【另存为】可以保存为文本文件,方便阅读。

    01ec04360ae09b78d236b0086e68a713.png

    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窗口下展示结果如下,可以看到表字段较多时会多行展示,格式不整体,视觉上看起来不方便,不推荐此方法。

    05118bfa760eae2e493ae3427f8048f8.png

    ②查询视图定义语句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下执行,格式不整体,不推荐此方法。

    0f2b2e43ef68cfff8758f04db757c9b0.png

    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';

    执行结果参考如下:

    e09d92daac700faf1d1f2201b25dd191.png

    ②查询视图定义信息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内容是视图定义语句,如果是查询字段信息,可使用上述方法①。

    1e50ec53c64f0e2ad519836c7d47e87b.png

    ③查询对象定义信息USER_SOURCE/ALL_SOURCE/DBA_SOURCE

    DBA_SOURCE包含数据库中包、包体、存储过程、函数、触发器、TYPE对象的源码。其TEXT字段为TEXT类型,存放对象源码。

    使用如下命令可查询系统包DBMS_METADATA的定义信息:

    select* from dba_source t where t.NAME = 'DBMS_METADATA';

    管理工具查询窗口执行结果如下(注意系统包包头可正常查看,但包体源码加密),选择【另存为】可保存至文本文件方便查看:

    c6f755603e5121dffdd5f85bd45794a6.png

    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;

    展示结果参考如下,可以看出此命令使用简单,展示字段信息更直观:

    ad3ecef37247a4162c14b572d5718a44.png

    ②获取函数/存储过程的结构信息

    使用SYSDBA用户执行如下命令,获取系统存储过程sp_tabledef的结构信息。

    desc sp_tabledef;

    展示结果参考如下(展示参数和返回值信息):

    c56d1112e21360b932a062bd51889abe.png

    ③获取包(PACKAGE)的结构信息

    使用SYSDBA用户执行如下命令,获取系统包dbms_logmnr的结构信息。

    desc dbms_logmnr;

    展示结果参考如下(展示方法名,各方法参数和返回值信息):

    d9f4913c33b0efd5d2104dd17862f678.png

    05

    客户端管理工具

    DM客户端管理工具也提供了查看对象定义的功能,其可视化窗口使用起来更易上手,方便快捷。

    ①对象属性中获取对象定义语句

    右击对象名称,选择最下面【属性】,打开对象属性页面,选择DDL页签,可查看对象的DDL定义语句,可点击【保存】,保存至文件更方便阅读。

    aefbd8ec50d969cd42630d74a5dd0e62.png

    ②Create To获取对象定义语句

    右击对象名称,选择【生成SQL脚本】->【Create To】,选择粘贴板或编辑器都行,可查看对象(包含表、视图、过程、函数、包、序列、表空间、同义词等)的定义语句。

    30eb8f2231d00aed23139289025d2fcc.png

    //

    好了,以上是查看表结构和对象定义的各种方法,大家可根据自己的喜好选择。在查询表结构方面,推荐使用desc命令更简单快捷,但缺点是只能在DISQL窗口下使用。在查询存储过程或函数的定义方面,除客户端工具外,推荐使用DBMS_META系统包或DBA_SOURCE数据字典视图,两者分别以CLOB和TEXT类型输出,格式上更整齐,方便输出和查看。

    本次分享到此结束,感谢大家。

    往期精选

    围观

    【干货分享】DM数据库迁移方法(物理迁移)

    热文

    【干货分享】DM数据库使用UTL_FILE读写文件方法

    2201fe41984f4d492e4b950d7076539c.gif

    展开全文
  • 很多新手在开始使用DM数据库时,都遇到过如何获取表结构信息的问题,今日我整理了获取表结构的各种方法,也可以从这些方法中获取其他对象的定义信息,比如表、视图、存储过程、函数、包等DDL创建语句,供大家参考。...
  • 下面我们就来说一说如何高效的创建和编辑各种数据库对象。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用作服务对象-关系型数据库管理系统来安全存储数据,用于其他软件应用程序请求时检索。 该数据库可以处理各种工作负载,从单机应用程序到具有许多并发用户的面向互联网的应用程序。 更多信息,请参见...
  • 不要过度担心明天 努力之后就会发现没什么不可以 相信大多数人都和我一样没听说过ssh开源框架吧,正好短学期学到了,就记录下我的认识吧。...它的mvc模式包括初始化、创建对象、验证、执行、返回数据、...
  • Redis数据库的实现原理

    千次阅读 2018-01-07 21:32:09
    知道了Redis的各种数据结构,对象结构,那么Redis是如何保存数据的,又是如何操作数据的呢,Redis里面的命令是怎么实现的呢?这一系列问题值得我们思考 一.Redis维护多个数据库 Redis内部维护一个db数组,每个db都...
  • 什么是sshstructsweb应用启动时加载初始化actionservlet(控制器)控制器读取struts-config.xml文件中的配置信息,再把信息存放到各种配置对象它的mvc模式包括初始化、创建对象、验证、执行、返回数据、转发请求、返回...
  • 有两部分,请分别下载。...实务13 创建数据库时,出现错误“ora-03113: end-of-file on 实务13 communication channel” 实务14 安装oracle时,报告错误“ora-27102:out of memory” 实务15 在linux(unix)环境...
  • 有两部分,请分别下载。...实务13 创建数据库时,出现错误“ora-03113: end-of-file on 实务13 communication channel” 实务14 安装oracle时,报告错误“ora-27102:out of memory” 实务15 在linux(unix)环境...
  • 数据库画板中可以显示数据库中的所有数据表(即使不是用PowerBuilder创建的表),创建数据表,修改表的定义等数据表是数据库中一个非常重要的对象,是其他对象的基础。没有数据表,关键字、主键、索引等也就...
  • 翻译的过程中,译者感到此言不虚:作者从数据库的基本概念到数据库建模,从如何运用规范化原则到如何做成实际的数据库表,从如何保护数据库完整性到如何提高数据库的性能,从数据库的安全机制到并发事务控制,从...
  • oracle数据库经典题目

    2011-02-17 15:05:20
    11.一个模式只能够被一个数据库对象所拥有,其创建的所有模式对象都保存在自己的模式中。 12.根据约束的作用域,约束可以分为表级约束和列级约束两种。列级约束是字段定义的一部分,只能够应用在一个列上;而表级...
  • oracle数据库----关系视图

    千次阅读 2017-09-06 18:46:15
    数据库的真实数据都是存在于数据表中,数据表是反映现实世界的实体关系。但是,为现实世界的所有关系创建数据表是不现实的。...来学习视图的知识,并掌握如何创建和使用各种视图,同时对各种视图之间的区别有清晰的
  • 书中内容主要集中在大多数企业常见的问题之上,如安装和升级到oracle database 11g数据库软件、创建数据库、导出和导入数据、数据库的备份与恢复、性能调优,等等。  本书还提供了dba完成本职工作必备的基本的uniix...
  • 第10~12章着重介绍了在数据库系统部署并运行后,如何获得数据库运行时的性能状态,如何对正在使用的各种资源进行分析,分析时使用什么工具,以及如何解读这些工具返回的信息。 《oracle数据库性能优化的艺术》重在...
  • 深入浅出MySQL数据库开发、优化与管理维护

    千次下载 热门讨论 2014-01-21 15:48:01
     25.9 mysqlshow(数据库对象查看工具)   25.10 perror(错误代码查看工具)   25.11 replace(文本替换工具)   25.12 小结   第26章 MySQL日志   26.1 错误日志   26.2 二进制日志   ...
  • 可视化数据库模型,以便您可以看到诸如属性,关系,索引,唯一性,注释和其他对象之类的元素如何相互关联,而无需显示实际数据。Navicat Data Modeler支持不同的数据库:直接连接,ODBC,MySQL,MariaDB,Oracle,...
  • 在上一篇周公简单讲述了SMO的一些基本概念,实际... 在本篇中周公还是在上一篇的基础上再做稍微深入一点的介绍,在本篇中主要讲述如何获取数据库常见对象信息,并且如何利用SMO来进行一些日常操作:如创建Login,创建
  • 本例演示的是如何将shape文件转化成personal GeoDatabase文件,其它...  要点 首先,创建新的GeoDataBase数据库,并创建IFeatureDatasetName对象创建定义两个IFeatureClassName接口对象分别引用输入表(shape...
  • azorSQL for Mac已经过40多个数据库的测试,可以通过JDBC或ODBC连接到数据库,支持各种数据库,支持浏览数据库对象和结构,执行SQL查询和语句,搜索数据库对象和数据,编辑数据库表,创建和更改数据库对象等操作。...
  • 对Oracle 数据库技术具有狂热的爱好,深入理解Oracle 的体系结构、内存结构、物理存储(各种块格式)、锁机制、优化机制等。深入了解Oracle的备份恢复机制,熟悉Oracle 的各种备份方法,能够处理各种情况下的数据...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 258
精华内容 103
关键字:

如何创建数据库各种对象