知识大全 Oracle10G关于表操作常用语句详解及随想

Posted 数据库

篇首语:努力学习,勤奋工作,让青春更加光彩。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle10G关于表操作常用语句详解及随想相关的知识,希望对你有一定的参考价值。

Oracle10G关于表操作常用语句详解及随想  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  最近利用业余时间一直在看Oracle g开发这方面资料 由于以前企业级项目对数据库操作都是基于微软的SQL 与 版本偏多 所以这段时间也是一个转换过程 特意在网上订购一本Oracle Database G SQL Master SQL and PL/SQL 这本书重新完整的 系统的进行梳理一遍 总体给我感觉是其实我就是在重新梳理结构化查询语言(Structured Query Language/SQL) SQL 虽然做了一遍重复性工作 但体会也是不同的 类似这本书并没有费了我很大精力 但给我感觉它就是一条细线 把我以前遗留的片段全部关联起来 视野上更加趋于开阔 我慢慢才体会到 做程序开发的工作其实可粗可细 我们常常感慨一个技术大牛所作的创造性思维(类似Robert C Martin关于敏捷实践) 其实殊不知他们也是在逐渐积累过程中才有了创造 就想一句话说的没有任何事情是凭空而来 那么对于一个做技术出生的人一个完善的知识体系结构是相当重要的 所以我更愿意倾向于一个科班出生的技术人员 目前情况是社会上关于软件开发培训的快餐打乱了行业内这种格局 格局我们没法控制 无论这种格局乱还是没乱但归咎到底还是一个技术人员在实际工作自我完善自己知识体系这种能力和意识 对于他人的指导这种 外力的鞭子 抽的我们都有惰性 自觉的意识才能真正力量 这种并非一朝一夕的能够成就的 它是一个长时间 同时具有一定量积累才能沉淀出来的 只有不断完善自己知识体系 不断学习 才是一个真正技术人员发展上要走长远子路 这也是我考察一个技术人员非常重要的标准

  这也是很多经历了入门级别痛苦后程序员 最为迷茫一个问题 以上最近这本书给我一点联想 转入正题

  Oracle Database G SQL Master SQL and PL/SQL :书样 随便推荐给各位 内容虽然很简单 但给我感觉细节上讲的很全面 完全可以做为一个日常工作中查询手册也是没有问题的 一方面它详细而通用讲述了SQL标准每个细节 同时也有两章是Oracle公司自己扩展语法详细讲解 直接形成比对 及时将来遇到与SQL标准不同变更 一眼就能看出来

  (A)SQL标准与三层

  又重新翻看这个结构化查询语言(简称SQL)的 来世于前生 后 期间不经让我联想到到以前项目中对于底层数据访问层三层架构思想 他们之间联系 先来看看SQL标准来历:

   年时有E F Cold博士提出关系型数据库这个概率 听起来早就不新鲜了 但是SQL就是在E F Cold博士工作基础自上发展而来 其第一个实现就是有IBM在 世纪 年代中期开发的 当时IBM开展了一个成为System R的研究项目 SQL 就是从这项目中诞生的 到了 年底 一家当时成为Relational Sofare INc 的公司(其实大家应该都知道就是现在Oracle公司)发布了第一个商业版本的SQL 随着发展SQL已经被完全标准化了 而且获得美国国家标准组织(American Standards Institute ANSI)认证 SQL可以用来访问Oracle SQL Server DB 和MySQL 数据库 直至发展到现在

  SQL在发展的实现标准化 也为三层分工实现编码与数据库依赖关系解耦 编程语言不在依赖数据库 主要归功于SQL访问数据库的标准化 目前架设一下主流的数据Oracle SqlServer DB MySQL每个都有自己一套数据库访问方式规则 那是多么可怕一件事 当切换一个数据库 我们就彻底扔掉了一个数据访问层 那么编码应用程序就死死绑定数据库上 而从严格三层定义来说 拿掉任何一层都是可以重用 显示层 业务逻辑层 与数据访问层是没有任何实际依赖的 层于层之间实现时一种独立关系 如果没有SQL语言标准化 也就没有实际意义上三层分工实现 现在项目中如果实现底层数据库切换可以做一个简单工厂模式 只需在修改简单配置 代价极小 如果没有SQL 这一切就无从谈起了

  (B)附Oracle G中关于表操作

  附Oracle G下编码: 内有详细说明 其中操作非常简单 不做赘述 对于其他一些关于Oracle G特有属性将在后续 后有详细说明

  代码

   ——————— 创建数据库表成功—————————–

   ——–ChaRu数据操作详细SQL记录–

   ——–Author:chenkai Date: 年 月 日 : : –

   –oracle中显示日期格式为:DD MON YY dd是代表日 mon是月份前三个字母大写 yy 年份最后两位实际上存储年是 位 显示的为 位

  

   select * from customers

  

   insert into customers(customer_id first_name last_name phone)

   values( chenkai ge ′);

  

   insert into customers(customer_id first_name last_name phone)

   values( marik 陈凯 ′);

  

   update customers set first_name= chenkaiunion where customer_id=

  

   delete from customers where customer_id=

  

   –如果误删除了数据库记录 可以回滚数据

   rollback;

  

   insert into customers(customer_id first_name last_name phone)

   values( 再次ChaRu数据 fuck Again ′)

  

   –ChaRu数据进行单引号和双引号

   insert into customers(customer_id first_name last_name)

   values( 测试单引号 Bei Jing 单引成功了 )

  

  

   insert into customers(customer_id first_name last_name)

   values( 测试双引号 The Great Wall LED )

  

   select * from customers

  

   –从一个表向另一个表复制行 (快速的植入数据注意修改了主键为 ) 能用select union 测试不成功 可以使用 i新增的merge语句来快速转移

   insert into customers(customer_id first_name last_name)

   select first_name last_name from customers where customer_id=

  

   –使用merger来合并行数据 Oracle i版本引入了Merge关键之来合并数据

   –可以用来将一个表的行合并到另一个表中(如果在转换中需要处理等等 在合并数据)

   create table product_change

   (

   product_id integer constraint change_pk primary key

   product_typeid integer constraint product_type_fkid references product_type(product_id)

   name varchar ( ) not null

   description varchar( )

   price number( )

   );

  

   –需求是这样:对于Product 和product_change两个表中product_id相同的行 将Product中各列里值修改成Product_change对应的值 如果product_id存在

   –并匹配 进行更新修改 如果不存在则在Product表ChaRu记录数据 即可 使用merge来操作

   merge into products pro

   using product_change pc on(

   pro product_id=pc product_id

   )

   –当匹配时修改

   when matched then

   update set

   pro product_typeid=pc product_typeid

   pro product_name=pc name

   pro product_content=pc description

   pro product_price=pc price

   –当不匹配是 ChaRu数据

   when not matched then

   insert(pro productid pro product_typeid pro product_name pro product_content pro product_price)

   values

   (

   pc product_id

   pc product_typeid

   pc name

   pc description

   pc price

   );

   –操作完成

   –merger into 子句指明了合并操作的目标表(要合并到的表) 命名成一个别名 pro 下面都用这个来替代

   –using on子句指定了一个表连接 上面指定的Product表中Product——id和Product——change表中Product_id建立连接

   –when matched then 当一行数据满足了Using…on条件时执行操作 同理而言下面操作

  

   –使用update语句修改行

   –定义一个变量

   variable average_product_prices number

   update products set price=prices* returning avg(price) into:average_product_prices;

  

  

   –使用默认值 测试成功

   create table userdefaultdemo

   (

   demo_id integer constraint demo_pk primary key

   datestatus varchar( ) default no placed it s take not null

   last_modifieddate date default sysdate not null

   );

  

   drop table userdefaultdemo

  

   insert into userdefaultdemo(demo_id)

   values( )

  

   –在更新或ChaRu数据使用Default关键字来设置修改列的值

   update userdefaultdemo

   set datestatus=default where demo_id=

  

   select * from userdefaultdemo

  

   –Oracle g中创建指定用户并连接数据到数据库

   –默认在chendb数据库中创建一个用户

   create user testuser identified by testpass;

   –testuser为创建用户用户名

   –testpass为创建用户登录密码

  

   –对用户授权限

   –登录数据库 connect权限 创建类似一些诸如表结构的数据 resource权限 权限由特权用户(例如DBA)使用Grant语句授予的

   grant connect resource to testuser;

   –to 指定为授权的用户

  

   –新用户连接数据库chendb

   connect testuser/testpass–有语法错误

  

   –新用户创建表(完整的简化版本的创建表语法)

   create [global temporary] table table_name

   (

   colum_name type [constraint constraint_def default default_exp]

   )

   [on mit delete | preserve rows]–控制临时表的有效期 delete说明这些行在事务的末尾就要被删除 preserve说明要在会话末尾删除这些行 默认值为Delete

   tablespace tab_space;–设定数据库占用空间大小

   –global temporary 指定说明当前表的行都是临时的 称之为临时表 临时表对当前所有会话都是可见的 但是这些行只是特定于某个会话

   –在Oracle官方上真正完整语法远远比这个要复杂 简化只是常用的设置 以上述语法创建表

   create table order_status

   (

   id integer constraint order_status_pk primary key

   status varchar( )

   last_modified date default sysdate

   );

   –下面创建一个临时表

   create global temporary table test_orderstatus

   (

   id integer constraint order_statustest_pk primary key

   status varchar( )

   last_modifieddate date default sysdate

   )

   on mit preserve rows;–只针对临时表设置当会话结束就删除临时表行数据(Oracle会话如何定义?)

  

   –向临时表ChaRu数据

   insert into test_orderstatus(id status)

   values( chenkaiunion 测试临时表数据 )

  

   select * from test_orderstatus

  

   –当我们断开当前测试用户Testuser 关于数据库chendb连接时 会话就消失 那么关于这个临时表自动被删除

   disconnect –断开

   connect testuser/testpass–再次连接查看临时表是否存在

   select * from test_orderstatus

  

  

   –获得关于表自身一些信息

   –查询上面刚刚创建两个表

   select table_name tablespace_name temporary from user_tables

   where table_name in ( order_status test_orderstatus )

   –上述查询时一个系统字典表user_tables[其中列 table_name 表名 tablespace_name 存储该表的表空间(数据库用来存储诸如表子类对象的地方)名 ]

   –[temporary 说明该表是否是临时表 如果是则Y 不是则为N]

   select * from user_tables

  

   –获取表中列的信息

   –从user_tab_colums中获取

   select table_name column_name data_type data_length data_precision data_scale from user_tab_columns where table_name= CHENTEST –[表名为全大写]

   –对User_tab_colums系统字典表中 Data_precision 【如果为数字列指定了精度 该列就是查询出精度】 data scale 【数字列小数部分的位数】

  

   –修改表信息

   –alert table 主要用于 添加/删除/修改列

   –添加/删除 约束

   –启用 禁用约束

   –查看对表或列建立的约束信息

  

   –添加列

   alter table test_orderstatus add operator_name varchar( );–报错【试图访问已经交由事务处理的临时表】 临时表不能别修改

   alter table order_status add operator_name varchar( );

   select * from order_status–成功

  

   –修改列【列长度/ 但前提是该列的长度是可以修改的例如 char/Varchar】

   –【修改数字列的精度】

   –【修改列数据类型】

   –【修改列的默认值】

   alter table order_status modify status varchar( );–[长度由 增加成 ] –成功

  

   alter table order_status modify status varchar( );–【长度由 缩小成 注意当前表没有任何数据】 –成功

  

   –ChaRu数据

   insert into order_status(id status) values( chenkai );

   select * from order_status

  

   –再次缩小列status长度

   alter table order_status modify status varchar( );–成功了 怪哉!

   –【只有在表中没有任何行货所有列都为空值是才可以减少列的长度】 但成功了

  

   alter table order_status add newnumber number( );–添加新列

  

   –【修改新添加数字列的精度】

   alter table order_status modify newnumber number( );–成功

   –同上【只有在表中没有任何行货所有列都为空值是才可以减少数字列的精度】

  

   –【修改列数据类型】

   alter table order_status modify newnumber char( );–【由number类型修改char】

   –【如果表中还没有任何行或列都为空值 就可以将列修改为任何一中数据类型【包括更短的数据类型】否则只能修改一种兼容的类型类似Varchar 修改成Varchar 】

   –【但前提是不能缩短列的长度 才能转换 类似不能将date修改成number类型】

  

   alter table order_status add newdefault varchar( ) default chenkaiunion 默认数据 ;–【如果第一次修改 新列中没有值全部添加了默认值】

  

   insert into order_status(id status) values( 测试 )

  

   –【修改列默认值】

   alter table order_status modify newdefault default ;–【修改后只对新添加的列 起了新的默认值作用】

  

   select * from order_status

  

   –【删除列】

   alter table order_status drop column operator_name ;–成功

  

   –【添加约束】

   –【表示出Oracle中所有约束控制如下:】

   –check 【指定一列或一组列必须满足的约束】

   –primary key /foreign key /unique/readonly /not null

   –check option 指定对视图执行的DML操作必须满足子查询的条件 后有详解

  A qizhong从Oracle i版本开始独立引入了一个Merge语句 用来快速简单将一个表的合并到另外一个表中 实现的是跨表间数据库合并操作 值得注意 Merge into子句指明了合并操作的目标表 Using…… on子句其实实现的是一个表连接 上面例子能看出 而When Matched then 当匹配Using… on子句条件时操作 同理When not Matched then 实在不匹配是操作

  B:Oracle G 数据库基本同SQL 其中有个Check Option指定对视图执行的DML操作必须满足子查询条件 详细请查看官方的Oracle SQl手册不在赘述

cha138/Article/program/Oracle/201311/18088

相关参考

知识大全 oracle表分区详解

  此文从以下几个方面来整理关于分区表的概念及操作:  表空间及分区表的概念  表分区的具体作用  表分区的优缺点  表分区的几种类型及操作方法  对表分区的维护性操作  ()表空间及分区表的概念  

知识大全 关于Oracle10g跨平台传输表空间

关于Oracle10g跨平台传输表空间  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  准备工作:

知识大全 30个Oracle语句优化规则详解

30个Oracle语句优化规则详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  选用适合的Or

知识大全 Oracle语句优化30个规则详解

Oracle语句优化30个规则详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  选用适合的Or

知识大全 Oracle10g中的hints调整机制详解

Oracle10g中的hints调整机制详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  以下

知识大全 详解Oracle10g中MERGE功能的增强

详解Oracle10g中MERGE功能的增强  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Or

知识大全 Oracle表、索引修改表空间语句

Oracle表、索引修改表空间语句  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  表做空间迁移时

知识大全 Oracle10g临时表空间组

Oracle10g临时表空间组  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracleg引进

知识大全 ORACLE多表关联UPDATE语句

ORACLE多表关联UPDATE语句  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  为了方便起见

知识大全 Oracle中创建和管理表详解

Oracle中创建和管理表详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!以下是对Oracle中