精华内容
下载资源
问答
  • 数据定义功能

    千次阅读 2019-12-31 19:43:53
    sql的数据定义功能通过数据定义语言实现,它用来定义数据的逻辑结构,包括定义基表,视图,索引,基本的DDL包括三类,即定义,修改,删除,分别对应create、alter、drop三条语句 ...

    sql的数据定义功能通过数据定义语言实现,它用来定义数据的逻辑结构,包括定义基表,视图,索引,基本的DDL包括三类,即定义,修改,删除,分别对应create、alter、drop三条语句

    展开全文
  • hive是基于Hadoop的一...Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive是十分适合数据仓库的统计分析和Windows注册表文件。

    Hive技术之DDL数据定义

    1. 数据库DDL

    1.1 创建数据库

    #创建一个数据库,数据库在 HDFS 上的默认存储路径是/user/hive/warehouse/*.db。
    create database hive;
    #创建的hive数据库下的表都在/user/hive/warehouse/hive.db/目录下
    
    #避免要创建的数据库已经存在错误,增加 if not exists 判断。(标准写法)
    create database if not exists hive_mm;
    
    #创建一个数据库,指定数据库在 HDFS 上存放的位置(默认数据库的位置就是通过这个方法创建的)
    create database hive_dd location '/hive_dd.db';
    

    1.2 查询数据库

    #显示数据库
    show databases;
    #过滤显示查询的数据库
    show databases like 'hive*';
    
    #查看数据库详情
    desc database hive;
    
    #显示数据库详细信息,extended
    desc database extended hive;
    
    #切换当前数据库
    use hive_mm;
    

    1.3 修改数据库

    用户可以使用 alter database命令为某个数据库的dbproperties 设置键-值对属性值,来描述这个数据库的属性信息。☆数据库的其他元数据信息都是不可更改的,包括数据库名和数据库所在的目录位置。

    alter  database  hive  set dbproperties('createtime'='20200720');
    
    #在 hive 中查看修改结果
    desc database extended hive;
    

    1.4 删除数据库

    #删除空数据库
    drop database hive_dd;
    
    #如果删除的数据库不存在,最好采用 if exists 判断数据库是否存在
    drop database if exists hive_mm;
    
    #如果数据库不为空,可以采用 cascade 命令,强制删除
    drop database hive_dd cascade;
    

    2. 表的DDL

    2.1 创建表

    建表语句:

    create [external] table [if not exists] table_name
    [(col_name data_type [comment col_comment], ...)]
    [partition by (col_name data_type [comment col_comment], ...)]
    [clustered by (col_name, col_name, ...)
    [sorted by (col_name [asc | desc], ...)] into num_buckets buckets]
    [row format row_format]
    [stored as file_format]
    [location hdfs_path]
    

    字段解释说明:

    1. create table创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用if not exists 选项来忽略这个异常。
    2. external关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(location),Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。
    3. comment:为表和列添加注释。
    4. partition by : 创建分区表
    5. clustered by : 创建分桶表
    6. sorted by : 不常用
    7. row format
      1. delimited [fields terminated by "\t"]
      2. [collection items terminated by char]
      3. [map keys terminated by char]
      4. [lines terminated by char]
      5. 用户在建表的时候可以自定义 SerDe 或者使用自带的 SerDe。如果没有指定 ROW FORMAT 或者 ROW FORMAT DELIMITED,将会使用自带的 SerDe。在建表的时候,用户还需要为表指定列,用户在指定表的列的同时也会指定自定义的 SerDe,Hive 通过 SerDe确定表的具体的列的数据。SerDe 是 Serialize/Deserilize 的简称,目的是用于序列化和反序列化。
    8. stored as 指定存储文件类型
    • 常用的存储文件类型:sequencefile(二进制序列文件)、textfile(文本)、rcfile(列式存储格式文件)如果文件数据是纯文本,可以使用 stored as textfile。如果数据需要压缩,使用 stored as equencefile。
    1. location :指定表在 HDFS 上的存储位置。
    2. like 允许用户复制现有的表结构,但是不复制数据。

    2.2 管理表和外部表

    管理表(内部表)

    默认创建的表都是所谓的管理表,有时也被称为内部表。因为这种表,Hive 会(或多或少地)控制着数据的生命周期。Hive 默认情况下会将这些表的数据存储在由配置项hive.metastore.warehouse.dir(如/user/hive/warehouse)所定义的目录的子目录下。 当我们删除一个管理表时,Hive 也会删除这个表中数据。管理表不适合和其他工具共享数据。

    #普通创建表
    create table if not exists student(id int,name string)
    row format delimited fields terminated by '\t'
    stored as textfile
    location '/user/hive/warehouse/student';
    
    #根据查询结果创建表(查询的结果会添加到新创建的表中)
    create table if not exists student_mm as select id, name from student;
    
    #根据已经存在的表结构创建表
    create table if not exists student_dd like student;
    
    #查询表的类型
    desc formatted student;
    
    外部表

    因为表是外部表,所以 Hive 并非认为其完全拥有这份数据。删除该表并不会删除掉这份数据,不过描述表的元数据信息会被删除掉。

    管理表和外部表的使用场景:

    • 每天将收集到的网站日志定期流入 HDFS 文本文件。在外部表(原始日志表)的基础上做大量的统计分析,用到的中间表、结果表使用内部表存储,数据通过select + insert进入内部表。
    案例实操

    创建部门表,并向表中导入数据

    原始数据dept.txt

    10	ACCOUNTING	1700
    20	RESEARCH	1800
    30	SALES	1900
    40	OPERATIONS	1700
    

    建表语句

    create external table if not exists dept(deptno int,dname string,loc int)
    row format delimited fields terminated by '\t';
    

    查看创建的表 show tables;

    向外部表中导入数据

    load data local inpath '/opt/module/data/dept.txt' into table dept;
    

    查询结果

    select * from dept;
    

    查看表格式化数据

    desc formatted dept;
    
    管理表与外部表的互相转换

    注意:('EXTERNAL'='TRUE')和('EXTERNAL'='FALSE')为固定写法,区分大小写!

    #查询表的类型
    desc formatted student;
    Table Type: MANAGED_TABLE
    
    #修改内部表 student为外部表
    alter table student set tblproperties('EXTERNAL'='TRUE');
    
    #查询表的类型
     desc formatted student;
     Table Type: EXTERNAL_TABLE
     
     #修改外部表 student 为内部表
     alter table student set tblproperties('EXTERNAL'='FALSE');
     #查询表的类型
     desc formatted student;
     Table Type: MANAGED_TABLE
     
    

    2.3 分区表

    分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。Hive 中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过 WHERE 子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多。

    分区表基本操作
    #创建分区表语法
    create table dept_partition(deptno int, dname string, loc string) partitioned by (month string)
    row format delimited fields terminated by '\t';
    
    #加载数据到分区表中
    load data local inpath '/opt/module/data/dept.txt' into table hive.dept_partition
    partition(month='20200719');
    load data local inpath '/opt/module/data/dept.txt' into table hive.dept_partition
    partition(month='20200720');
    

    在这里插入图片描述

    #查询分区表中数据
    #单分区查询
    select * from dept_partition where month='20200719';
    
    #多分区联合查询
    select * from dept_partition where month='20200719' 
    union
    select * from dept_partition where month='20200720'; 
    
    增加分区

    同时创建多个分区之间必须是空格。

    #创建单个分区
    alter table dept_partition add partition(month='20200721') ;
    #同时创建多个分区
    alter table dept_partition add partition(month='20200722') partition(month='20200723');
    

    在这里插入图片描述

    删除分区
    #删除单个分区
    alter table dept_partition drop partition(month='20200721');
    
    #同时删除多个分区
    alter table dept_partition drop partition(month='20200722'),partition(month='20200723');
    
    #查看分区表有多少分区
    show partitions dept_partition;
    
    #查看分区表结构
    desc formatted dept_partition;
    
    分区表注意事项
    #创建二级分区表
    create table dept_partition_two(deptno int, dname string, loc string)
    partitioned by (month string, day string)
    row format delimited fields terminated by '\t';
    
    #正常的加载数据
    ##加载数据到二级分区表中
    load data local inpath '/opt/module/data/dept.txt' into table hive.dept_partition_two partition(month='202007', day='19');
    
    ##查询分区数据
    select * from dept_partition_two  where month='202007' and day='19';
    

    把数据直接上传到分区目录上,让分区表和数据产生关联的三种方式:

    #方式一:上传数据后修复
    #上传数据
    dfs -mkdir -p /user/hive/warehouse/hive.db/dept_partition_two/month=202007/day=20;
    dfs -put /opt/module/data/dept.txt /user/hive/warehouse/hive.db/dept_partition_two/month=202007/day=20;
    #查询数据(查询不到刚上传的数据)
    select * from dept_partition_two  where month='202007' and day='20';
    #执行修复命令
    msck repair table dept_partition_two;
    #再次查询数据就查到了
    
    #方式二:上传数据后添加分区
    ##上传数据
    dfs -mkdir -p /user/hive/warehouse/hive.db/dept_partition_two/month=202007/day=27;
    dfs -put /opt/module/data/dept.txt /user/hive/warehouse/hive.db/dept_partition_two/month=202007/day=27;
    ##执行添加分区
    alter table dept_partition_two add partition(month='202007',daY='27');
    ##查询数据
    select * from dept_partition_two  where month='202007' and day='27';
    
    #方式三:创建文件夹后 load 数据到分区
    ##创建目录
    dfs -mkdir -p /user/hive/warehouse/hive.db/dept_partition_two/month=202007/day=28;
    ##上传数据
    load data local inpath '/opt/module/data/dept.txt' into table dept_partition_two partition(month='202007',day='28');
    ##查询数据
    select * from dept_partition_two  where month='202007' and day='28';
    

    在这里插入图片描述

    2.4 修改表

    #重命名表
    alter table student rename to student_aimm;
    #增加、修改和删除表分区,见上面的内容
    
    增加/ 修改/替换信息
    #更新列
    alter table table_name change [column] col_old_name col_new_name column_type [comment col_comment] [first|after column_name]
    
    #增加和替换列
    alter table table_name add|replace columns (col_name data_type
    [comment col_comment], ...)
    
    $注:add是代表新增一字段,字段位置在所有列后面(partition列前),replace则是表示替换表中所有字段。
    

    实操案例

    #查询表结构
    desc dept_partition;
    #add添加列columns
    alter table dept_partition add columns(deptdesc string);
    #查询表结构
    desc dept_partition;
    #change更新列column
    alter table dept_partition change column deptdesc desc int;
    #查询表结构
    desc dept_partition;
    
    #replace替换列columns
    alter table dept_partition  replace columns(deptno string, dname string, loc string);
    #查询表结构
    desc dept_partition;
    

    2.5 删除表

     drop table dept_partition;
    

    展开全文
  • 不提供修改表结构功能,如果想要实现,只能自行书写ddl语句. 不提供将查询结果直接转换成实体类的功能. 代码简述: 包说明: annotation:注解包 |--Colum:列注解定义 |--Table:表注解定义 |--SqliteDataType:列数据...
  • MySQL 8.0开始支持原子数据定义语言(DDL)语句。此功能称为原子DDL。原子DDL语句将与DDL操作关联的数据字典更新,存储引擎操作和二进制日志写入组合到单个原子事务中。即使服务器在操作期间暂停,也会提交事务,并...
  • MySQL 8.0开始支持原子数据定义语言(DDL)语句。此功能称为原子DDL。原子DDL语句将与DDL操作关联的数据字典更新,存储引擎操作和二进制日志写入组合到单个原子事务中。即使服务器在操作期间暂停,也会提交事务,并...

       MySQL 8.0开始支持原子数据定义语言(DDL)语句。此功能称为原子DDL。原子DDL语句将与DDL操作关联的数据字典更新,存储引擎操作和二进制日志写入组合到单个原子事务中。即使服务器在操作期间暂停,也会提交事务,并将适用的更改保留到数据字典,存储引擎和二进制日志,或者回滚事务。

     

       通过在MySQL 8.0中引入MySQL数据字典,可以实现Atomic DDL。在早期的MySQL版本中,元数据存储在元数据文件,非事务性表和存储引擎特定的字典中,这需要中间提交。MySQL数据字典提供的集中式事务元数据存储消除了这一障碍,使得将DDL语句操作重组为原子事务成为可能。

     

    官方文档:

    https://dev.mysql.com/doc/refman/8.0/en/atomic-ddl.html

     

     

    1、支持的DDL语句

     原子DDL功能支持表和非表DDL语句。与表相关的DDL操作需要存储引擎支持,而非表DDL操作则不需要。目前,只有InnoDB存储引擎支持原子DDL。

     

    ①:受支持的表DDL语句包括 CREATE,ALTER和 DROP对数据库,表,表和索引,以及语句 TRUNCATE TABLE声明。

    ②:支持的非表DDL语句包括:

       CREATE和DROP 语句,以及(如果适用)ALTER 存储程序,触发器,视图和用户定义函数(UDF)的语句。

       账户管理语句: CREATE,ALTER, DROP,,如果适用, RENAME报表用户和角色,以及GRANT 和REVOKE报表。

     

    1.1、原子DDL功能不支持以下语句:

    ①:涉及除存储引擎之外的存储引擎的与表相关的DDL语句InnoDB。

    ②:INSTALL PLUGIN和 UNINSTALL PLUGIN 陈述。

    ③:INSTALL COMPONENT和 UNINSTALL COMPONENT 陈述。

    ④:CREATE SERVER, ALTER SERVER和 DROP SERVER语句。

     

    2、原子DDL特性:

    ①:元数据更新,二进制日志写入和存储引擎操作(如果适用)将合并为单个事务。

    ②:在DDL操作期间,SQL层没有中间提交。

    ③:在适用的情况下:

        数据字典,程序,事件和UDF高速缓存的状态与DDL操作的状态一致,这意味着更新高速缓存以反映DDL操作是成功完成还是回滚。

        DDL操作中涉及的存储引擎方法不执行中间提交,并且存储引擎将自身注册为DDL事务的一部分。

        存储引擎支持DDL操作的重做和回滚,这在DDL操作的 Post-DDL阶段执行。

    ④:DDL操作的可见行为是原子的,这会更改某些DDL语句的行为

     

    注意:

      原子或其他DDL语句隐式结束当前会话中处于活动状态的任何事务,就好像您COMMIT在执行语句之前完成了一样。这意味着DDL语句不能在另一个事务中,在事务控制语句中执行 START TRANSACTION ... COMMIT,或者与同一事务中的其他语句结合使用。

     

    3、DDL语句行为的变化

    3.1、DROP TABLE:

     如果所有命名表都使用原子DDL支持的存储引擎,则操作是完全原子的。该语句要么成功删除所有表,要么回滚。

    DROP TABLE如果命名表不存在,并且未进行任何更改(无论存储引擎如何),则会失败并显示错误。如下所示:

     

    mysql> CREATE TABLE t1 (c1 INT);

    mysql> DROP TABLE t1, t2;

    ERROR 1051 (42S02): Unknown table 'test.t2'

    mysql> SHOW TABLES;

    +----------------+

    | Tables_in_test |

    +----------------+

    | t1             |

    +----------------+

    在引入原子DDL之前, DROP TABLE虽然会报错误表不存在,但是存在的表会被执行成功,如下:

    mysql> CREATE TABLE t1 (c1 INT);

    mysql> DROP TABLE t1, t2;

    ERROR 1051 (42S02): Unknown table 'test.t2'

    mysql> SHOW TABLES;

    Empty set (0.00 sec)

     

    注意:

       由于行为的这种变化,DROP TABLE会在 MySQL 5.7主服务器上的部分完成 语句在MySQL 8.0从服务器上复制时失败。要避免此故障情形,请在DROP TABLE语句中使用IF EXISTS语法以防止对不存在的表发生错误

     

    3.2、DROP DATABASE:

       如果所有表都使用原子DDL支持的存储引擎,则为atomic。该语句要么成功删除所有对象,要么回滚。但是,从文件系统中删除数据库目录是最后一次,并且不是原子事务的一部分。如果由于文件系统错误或服务器暂停而导致数据库目录的删除失败, DROP DATABASE则不会回滚事务。

     

    3.3、对于不使用原子DDL支持的存储引擎的表,表删除发生在原子 DROP TABLE或 DROP DATABASE事务之外。这样的表删除被单独写入二进制日志,这在中断DROP TABLE或 DROP DATABASE操作的情况下将存储引擎,数据字典和二进制日志之间的差异限制为最多一个表 。对于删除多个表的操作,不使用原子DDL支持的存储引擎的表将在执行之前删除。

     

    3.4、CREATE TABLE, ALTER TABLE, RENAME TABLE, TRUNCATE TABLE, CREATE TABLESPACE,和 DROP TABLESPACE对使用原子DDL支持的存储引擎表执行的操作要么完全提交或如果服务器的操作时停止回滚。在早期的MySQL版本中,这些操作的中断可能会导致存储引擎,数据字典和二进制日志之间的差异,或留下孤立文件。RENAME TABLE如果所有命名表都使用原子DDL支持的存储引擎,则操作只是原子操作。

     

    3.5、DROP VIEW:

     如果命名视图不存在且未进行任何更改,则会失败。在此示例中演示了行为更改,其中 DROP VIEW语句失败,因为命名视图不存在,如下:

    mysql> CREATE VIEW test.viewA AS SELECT * FROM t;

    mysql> DROP VIEW test.viewA, test.viewB;

    ERROR 1051 (42S02): Unknown table 'test.viewB'

    mysql> SHOW FULL TABLES IN test WHERE TABLE_TYPE LIKE 'VIEW';

    +----------------+------------+

    | Tables_in_test | Table_type |

    +----------------+------------+

    | viewA          | VIEW       |

    +----------------+------------+

    在引入原子DDL之前, 使用DROP VIEW删除视图会报错,但是存在的视图会被成功删除:

    mysql> CREATE VIEW test.viewA AS SELECT * FROM t;

    mysql> DROP VIEW test.viewA, test.viewB;

    ERROR 1051 (42S02): Unknown table 'test.viewB'

    mysql> SHOW FULL TABLES IN test WHERE TABLE_TYPE LIKE 'VIEW';

    Empty set (0.00 sec)

     

    注意:

       由于行为的这种变化,DROP VIEW在MySQL 5.7主服务器上的部分完成 操作在MySQL 8.0从服务器上复制时会失败。要避免此故障情形,请在DROP VIEW语句中使用IF EXISTS语法以防止对不存在的视图发生错误。

     

    3.6、不再允许部分执行帐户管理声明。帐户管理语句对所有命名用户成功或回滚,如果发生错误则无效。在早期的MySQL版本中,为多个用户命名的帐户管理语句可能对某些用户成功,而对其他用户则失败。

    如下:其中第二个CREATE USER 语句返回错误但失败,因为它无法对所有命名用户成功。

    mysql> CREATE USER userA;

    mysql> CREATE USER userA, userB;

    ERROR 1396 (HY000): Operation CREATE USER failed for 'userA'@'%'

    mysql> SELECT User FROM mysql.user WHERE User LIKE 'user%';

    +-------+

    | User  |

    +-------+

    | userA |

    +-------+

    在引入原子DDL之前,第二个 使用CREATE USER语句创建用户会返回一个错误,但是不存在的用户会成功创建,:

    mysql> CREATE USER userA;

    mysql> CREATE USER userA, userB;

    ERROR 1396 (HY000): Operation CREATE USER failed for 'userA'@'%'

    mysql> SELECT User FROM mysql.user WHERE User LIKE 'user%';

    +-------+

    | User  |

    +-------+

    | userA |

    | userB |

    +-------+

     

    注意:

       由于行为的这种变化,MySQL 5.7主服务器上部分会成功执行,会在MySQL 8.0从服务器上复制时失败。要避免此故障情形,请在创建用户的命令中使用IF EXISTS或 IF NOT EXISTS语法,以防止与命名用户相关的错误。

     

    4、存储引擎支持:目前只有innodb存储引擎支持原子DDL

       目前,只有InnoDB存储引擎支持原子DDL。不支持原子DDL的存储引擎免于DDL原子性。涉及豁免存储引擎的DDL操作仍然能够引入操作中断或仅部分完成时可能发生的不一致。

       要支持重做和回滚DDL操作, InnoDB请将DDL日志写入 mysql.innodb_ddl_log表,该表是驻留在mysql.ibd数据字典表空间中的隐藏数据字典表 。

    要mysql.innodb_ddl_log在DDL操作期间查看写入表的DDL日志 ,请启用 innodb_print_ddl_logs 配置选项。

     

    注意:

    mysql.innodb_ddl_log无论innodb_flush_log_at_trx_commit 设置多少,对表的 更改的重做日志 都会立即刷新到磁盘 。立即刷新重做日志可以避免DDL操作修改数据文件的情况,但是mysql.innodb_ddl_log由这些操作产生的对表的更改的重做日志 不会持久保存到磁盘。这种情况可能会在回滚或恢复期间导致错误。

     

    InnoDB存储引擎分阶段执行DDL操作。DDL操作 ALTER TABLE可以在Commit阶段之前多次执行 Prepare和Perform阶段:

     

    准备:创建所需对象并将DDL日志写入 mysql.innodb_ddl_log表中。DDL日志定义了如何前滚和回滚DDL操作。

    执行:执行DDL操作。例如,为CREATE TABLE操作执行创建例程。

    提交:更新数据字典并提交数据字典事务。

    Post-DDL:重播并从mysql.innodb_ddl_log表中删除DDL日志。为了确保可以安全地执行回滚而不引入不一致性,在最后阶段执行文件操作,例如重命名或删除数据文件。这一阶段还从删除的动态元数据 mysql.innodb_dynamic_metadata的数据字典表DROP TABLE,TRUNCATE TABLE和该重建表其他DDL操作。

     

    注意:

      无论事务是提交还是回滚, DDL日志都会在Post-DDL阶段重播并从表中删除 。mysql.innodb_ddl_log如果服务器在DDL操作期间暂停,则DDL日志应仅保留在表中。在这种情况下,DDL日志将在恢复后重播并删除。

     

      在恢复情况下,可以在重新启动服务器时提交或回滚DDL事务。如果在重做日志和二进制日志中存在在DDL操作的提交阶段期间执行的数据字典事务,则 该操作被视为成功并且前滚。否则,在InnoDB重放数据字典重做日志时回滚不完整的数据字典事务 ,并回滚DDL事务。

     

    5、查看DDL日志:

       InnoDB将DDL日志写入 mysql.innodb_ddl_log表以支持重做和回滚DDL操作。该 mysql.innodb_ddl_log表是隐藏在mysql.ibd数据字典表空间中的隐藏数据字典表 。与其他隐藏数据字典表一样,mysql.innodb_ddl_log在非调试版本的MySQL中无法直接访问该 表。

    转载于:https://www.cnblogs.com/aiaitie/p/9329118.html

    展开全文
  • DDL_Quick_Check-源码

    2021-03-27 22:26:57
    实现功能 同学端:清晰查看ddl 用户只能访问查看页,可查看每条数据,并进行展开,折叠操作。 班委端:方便编辑ddl 通过输入密码,可解锁进入编辑页面。重进小程序需要重输密码解锁。(密码定义为'../check/check....
  • //我原来的思路是通过SqlDataSourceS实现功能,这里还有个Datalist.Bind(); ViewState["SelectCommand"] = SqlDataSource1.SelectCommand; } } } ``` 请问大神们,有没有不用sqlDataSource,实现查询的方法...
  • 2、DDL(数据定义语言) 有:create/alter/drop/modify。以下通过实例学习这些语言。       3、DCL(数据控制语言) 有:grant/deny/revoke。     在存储过程中,如果想要实现表的创建、更新、插入...

    1、DML(数据操纵语言) 有:select/update/delete/insert。如何用存储过程实现这些功能呢。

     

     

     

    2、DDL(数据定义语言) 有:create/alter/drop/modify。以下通过实例学习这些语言。

     

     

     

    3、DCL(数据控制语言) 有:grant/deny/revoke。

     

     

    在存储过程中,如果想要实现表的创建、更新、插入等操作,可以使用动态SQL语句。在存储过程中不能使用静态SQL实现表的创建等。还有select xx into v_xx这样就不行了,返回不了值。要使用

    str_access_number number;
    
    str_sql := ’select count(*)  from table_name a where a.id=:id’;
    
    execute immediate str_sql into str_access_number; 

     其中:str_sql是一slectt语句,是varchar字符变量。str_access_number是对应要插入的字段名。

     

    在存储过程中创建表的实现:

    创建存储过程

       

    create or replace procedure create_table
     as
         p_s varchar2(2000);
     begin
         p_s:='CREATE TABLE supplier (
             supplier_id     numeric(10)     not null,
             supplier_name   varchar2(50)    not null,
             contact_name    varchar2(50),
             CONSTRAINT supplier_pk PRIMARY KEY (supplier_id)
          )' ;--创建表的sql语句
        execute immediate p_s;--运行p_s中的语句,创建supplier 表
        exception     
              when others then
                   null;  
     end;
    execute create_table;--执行存储过程,表创建成功

     

    DECLARE
        X NUMBER := 100;
    BEGIN
        FOR i IN 1..10 LOOP
            IF MOD(i, 2) = 0 THEN
              INSERT INTO supplier VALUES(i, x,': is even');
            ELSE
              INSERT INTO supplier VALUES(i, x,': is odd');
            END IF;
            x := x + 100;
        END LOOP;
     END;

    展开全文
  • 4.SQL的特点

    2020-03-19 16:16:22
    数据库系统的只要功能通过数据库支持的数据语言来实现的。 非关系模型(层次模型、网状模型)的数据语言一般都分为: (1)模式数据定义语言(DDL) (2)外模式数据定义语言(外模式DDL或者子模式D...
  • orcale 之 SQL 语言基础

    2017-02-14 22:51:00
    SQL 全称是结构化查询语句(Structure Query Language),是数据库操作...SQL 的数据定义功能通过数据定义语言(Data Definition Langulage, DDL实现。一般可以定义数据库的逻辑结构,包括定义表,视图,索引。基...
  • 数据库系统的主要功能通过数据库支持的数据语言来实现的。 非关系模型(层次模型、网状模型)的数据语言一般都分为: (1)模式数据定义语言(模式DDL) (2)外模式数据定义语言(外模式DDL或子模式DDL) (3)...
  • 5.3.7 实现用户定义数据类型 212 5.3.8 文档化你的数据库 220 5.3.9 处理依赖信息 222 5.4 最佳实践 225 5.5 总结 226 第6章 保护数据的完整性 228 6.1 最佳实践 229 6.2 自动数据保护 231 6.2.1 声明性...
  • 基本概念 数据:描述事物的符号称为数据,是存储在数据库中的基本对象。 ...数据库:数据库是长期存储在计算机上内...1 数据定义功能通过数据定义语言DDL(Data Definition Language)实现数据对象的定义 ...
  • 5.3.7 实现用户定义数据类型 212 5.3.8 文档化你的数据库 220 5.3.9 处理依赖信息 222 5.4 最佳实践 225 5.5 总结 226 第6章 保护数据的完整性 228 6.1 最佳实践 229 6.2 自动数据保护 231 6.2.1 声明性...
  • 数据库系统的主要功能通过数据库支持的数据语言来实现的。 非关系模型(层次模型,网状模型)的数据语言: 模式数据定义语言DDL 外模式数据定义语言 数据存储有关的描述语言DSDL 数据操纵语言DML SQL 集...
  • 数据库系统的主要功能通过数据库支持的数据语言来实现。 菲关系模型(层次模型、网状模型)的数据语言分为: DDL数据定义语言(用来维护存储数据的结构,例如:数据库、表等)。 DML:数据操纵语言(对数据...
  • 数据库管理系统

    2020-11-18 15:50:45
    数据库的登录系统 数据库管理系统(DBMS): ...定义功能:提供数据定义语言(DDL),定义DB的三级结构、两级映象;定义数据的完整性约束、保密限制等 操纵功能:提供数据操作语言(DML),实现对数据的检索和更新
  • mysql知识第一部分

    2020-05-24 19:21:39
    数据库系统的主要功能通过数据库支持的数据语言来实现。 菲关系模型(层次模型、网状模型)的数据语言分为: DDL数据定义语言(用来维护存储数据的结构,例如:数据库、表等)。 DML:数据操纵语言(对数据...
  • 数据库的主要功能通过数据库支持的数据语言实现的 非关系模型:层次、网状模型的语言为: 模式数据定义语言(模式ddl) 外模式数据定义语言(外模式ddl或者子模式ddl) 数据存储有关的描述语言(dsdl) 数
  • SQL可以对两种基本的数据结构进行操作,表与 视图 表是Oracle数据库中存放数据实体的基本逻辑存储单位 视图是在基表上所建的逻辑表,可由某一基表的某些列或某些行的数据...数据定义语言(DDL Data Definition La...
  • 数据库练习1

    2018-11-05 17:16:22
    1.在关系代数中,对一...2.定义数据库模式、数据库结构以及数据特性等功能通过( )来实现的。 答案:数据描述语言DDL 解析:数据定义语言 3.下列涉及空值的操作,不正确的是( ) 答案:WHERE AGE = NULL ...
  • (1)功能一体化:DDL具有对数据库、表、视图及ICs的定义功能;DML具有插入、删除、修改和查询表中数据的功能;而DCL可用于实现数据库安全授权、事务控制及系统维护功能。 (2)语言非过程化:只需要定义“做什么”...
  • 2、DDL(数据定义语言) 有:create/alter/drop/modify/truncate。以下通过实例学习这些语言。3、DCL(数据控制语言) 有:grant/deny/revoke。   写道 truncate:直接删除表中数据 注:若truncate的...
  • 至于数据定义(DDL)和数据控制(DCL)命令的处理,需要通过Oracle提供的特殊的DMBS_SQL包来进行。PL/SQL还可以用来编写过程、函数、包及数据库触发器。过程和函数也称为子程序,在定义时要给出相应的过程名和函数名。...
  • stockmanagement-源码

    2021-03-25 15:17:26
    在Eclipse环境中以Ant build身份运行build.xml,然后将xml liquibase文件中定义的表定义ddl)和库存参考数据(dml)填充到数据库中。 在运行build.xml之前,您需要在mysql数据库中创建数据库模式(在我签入的代码...
  • Oracle Stream-安装配置

    2009-09-01 16:17:21
    Oracle Stream利用高级队列技术,通过解析归档日志,将归档日志解析成DDL及DML语句,从而实现数据库之间的同步。这种技术可以将整个数据库、数据库中的对象复制到另一数据库中,通过使用Stream的技术,对归档日志的...
  • 简单SQL数据定义语言DDL的解释器实现 1、问题理解和分析(简单分析) 针对一个需求比较明确的问题,进行问题定义。明确“做什么(What to do?)”。 2、确定解决问题的方法(技术方案、简单设计) 主要是构思解决...
  • 数据库.txt

    2019-10-19 23:14:32
    大部分DBMS提供数据定义语言DDL(Data Definition Language)和数据操作语言DML(Data Manipulation Language),供用户定义数据库的模式结构与权限约束,实现对数据的追加、删除等操作。 数据库管理系统是数据库...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 136
精华内容 54
关键字:

数据定义功能通过ddl实现