【转】ORACLE SQL基础—DDL语言 礼记八目 2017-12-23 21:26:21
原文地址:https://www.toutiao.com/i6502733303550837261/
SQL语言分为:DDL数据定义语言,DML数据操纵语言,DCL是数据库控制语言,TC事务控制语言
*DDL数据定义语言(Data Definition Language):是SQL语言集中负责数据结构定义与数据库对象定义的语言,由CREATE、ALTER与DROP,RENAME,TRUNCATE几个语法所组成。
*DML数据操纵语言(Data Manipulation Language),用户通过它可以实现对数据库的基本操作,用来查询、添加、修改和删除数据库中数据的语句,由SELECT,INSERT,UPDATE,DELETE四个语法组成。
*DCL数据库控制语言(Data Control Language):用来设置或更改数据库用户或角色权限的语句,包括(GRANT,REVOKE等)语句。
*TC事物控制语言(Transaction Control):用于对数据的修改永久性的存储在表中或是取消这些修改操作,包括(COMMIT,ROLLBACK,SAVEPOINT)语句。
***DDL语言***
用于数据库对象的建立,修改,删除;举凡数据库、数据表、数据库索引、预存程序、用户函数、触发程序或是用户自定型别等对象,都可以使用 CREATE,ALTER,DROP 指令来处理,而为了各式数据库对象的不同,指令也有很多的参数。
----重命名表名称
REANME OLD_NAME TO NEW_NAME;
----创建表及添加主键约束
方法1:
CREATE TABLE INFOR (SID VARCHAR2(20),
PID VARCHAR2(10),
MONEY NUMBER(12,2)) ;
ALTER TABLE INFOR
ADD CONSTRAINT PK_INFO PRIMARY KEY (SID);
方法2:
CREATE TABLE INFORS (SID VARCHAR2(20) NOT NULL CONSTRAINT PK_INFORS PRIMARY KEY,
PID VARCHAR2(10),
MONEY NUMBER(12,2)) ;
----根据现有表创建所需的新表
CREATETABLE INFORS AS (SELECT B.COMPCODE AS 单位编码,
B.COMPNAME AS 单位名称,
A.PERSID AS 人员编码,
A.PERID AS 身份证号,
A.PERNAME AS 人员姓名,
(CASE A.PERSEX
WHEN'1'THEN'男'
WHEN'2'THEN'女'
ELSE'未说明'
END) AS 人员性别
FROM PERINFOR A,COMPINFOR B
WHERE A.COMPCODE = B.COMPCODE
AND B.COMPZREA = '150XXX');
----修改表追加表字段
ALTER TABLE INFOR ADD CHANGE_MONEY NUMBER(12,2) ;
----修改表中某个表字段的名称
ALTER TABLE INFOR RENAME COLUMN MONEY TO MONEYS;
----修改表中某个表字段的数据类型或数据长度
ALTER TABLE INFOR MODIFY MONEYS VARCHAR2(12);
----删除表
DROP TABLE INFORS;
----删除表中的某个字段
ALTER TABLE INFOR DROP COLUMN CHANGE_MONEY ;
----创建用户和密码
create user test identified by password;
----创建用户并指定表空间
select username,default_tablespace from dba_users;
create userUSERNAMEidentified by PASSWORD
default tablespaceDATA
temporaray tablespaceTEMP;
create user nmsi_cf identified by nmsi_cf_57g default tablespace data_nmsi ;
create user drm_nm identified by drm_nm default tablespace data_nmsi_drm ;
create user nm_report identified by nm_report default tablespace data_nmsi_drm ;
DROPUSER CFDXPT CASCADE;
----修改用户的表空间
alter user nmsi_cf default tablespace data_nmsi;
alter user drm_nm default tablespace data_nmsi_drm;
alter user nm_report default tablespace data_nmsi_drm;
----删除用户
drop user test;
----修改用户密码
alter user test identified by password1;
----修改用户的锁定模式
alter user test account unlock;
----创建角色和密码
CREATE ROLE CHINA IDENTIFIED BY PASSWORD;
----删除角色
DROP ROLE CHINA;
----修改角色密码
ALTERROLE CHINA IDENTIFIEDBY PASSWD ;
----创建索引
///普通索引///
CREATE INDEX INDEX_NAME ON TABLE_NAME(COLUMN_NAME) ;
///唯一索引///
CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(COLUMN_NAME) ;
///指定索引的归属表空间///
CREATE INDEX INDEX_NAME ON TABLE_NAME(COLUMN_NAME) TABLESPACE TAB_SPACE ;
--外键和主键关联的
select a.owner AS 主键拥有者,
a.table_name AS 主键表,
b.column_name AS 主键列,
c.owner AS 外键拥有者,
c.table_name AS 外键表,
d.column_name AS 外键列
from user_constraints a
left join user_cons_columns b
on a.constraint_name = b.constraint_name
left join user_constraints C
on c.constraint_name = a.constraint_name
left join user_cons_columns d
on c.constraint_name = d.constraint_name
and a.constraint_type = 'P'
and a.table_name = '表名' --需要查看主外键关系的表
order by a.table_name ;
--删除外键级联
ALTER TABLE US_ROLE_CONNECTION DROP constraint FK_RO_U_ID ;
----修改索引
///重命名索引///
ALTER INDEX OLD_INDEX_NAME RENAME TO NEW_INDEX_NAME;
----删除索引
DROP INDEX INDEX_NAME;
----删除主键
1 确定该主键是否有外键,如果有的话执行下面,没有的话执行第2语句
alter table tablename drop constraint column cascade;
2 定义主键无效
alter table tablename disable primary_column;
3 删除索引
drop index index_name;
4或是直接执行删除主键
ALTERTABLE TABLENAME DROPPRIMARYKEY;
----创建视图
///创建普通视图///
CREATEVIEW ONE_VIEW AS
SELECTCOUNT(AAC001) AS 人数
FROM AC01_00 ;
///创建检测是否满足WHERE条件的视图,只有满足WHERE条件才能对视图使用DML语句///
CREATEORREPLACEVIEW ONE_VIEW AS
SELECTCOUNT(AAC001) AS 人数
FROM AC01_00
WHERE AAB001 IN (SELECT AAB001 FROM AB01_00 WHERE AAB301 = '150499')
WITHCHECKOPTIONCONSTRAINT ONE_VIEW_DML ;
///创建只读视图,不能对视图进行DML语言///
CREATEORREPLACEVIEW ONE_VIEW AS
SELECTCOUNT(AAC001) AS 人数
FROM AC01_00
WHERE AAB001 IN (SELECT AAB001 FROM AB01_00 WHERE AAB301 = '150499')
WITHREADONLYCONSTRAINT ONE_VIEW_DML ;
----修改视图
ALTERVIEW ONE_VIEW
DROPCONSTRAINT ONE_VIEW_DML ;
----删除视图
DROPVIEW ONE_VIEW ;
----函数的简单应用,判断字符类型的时间格式
CREATE OR REPLACE FUNCTION <函数名>
[<参数列表>]
[RETURN<函数数据类型>]IS|AS
[<局部变量声明>]
BEGIN
<过程体>
RETURN<函数值>
END[<函数名>];
CREATE [OR REPLACE] FUNCTION function_name
{(parameter_name [IN|OUT|IN OUT] type [, ...])}
RETURN type
[IS | AS]
BEGIN
function_body
END function_name;
///创建函数///
--创建函数,函数名(CHECK_DATE),指定传给函数的参数名(P_DATE)及数据类型;指定参数返回的数据类型。
CREATEORREPLACEFUNCTION CHECK_DATE(P_DATE VARCHAR2) RETURNNUMBERIS
--定义传递参数的变量和数据类型
V_DATE DATE;
--开始函数体
BEGIN
--变量赋值及指定校验的数据格式,校验的列为空时返回FAULT
V_DATE := TO_DATE(NVL(P_DATE, 'FAULT'), 'YYYY-MM-DD HH24:MI:SS');
--比对匹配时返回1
RETURN1;
--异常
EXCEPTION
--如果为其他情况那么返回0
WHENOTHERSTHEN
RETURN0;
--结束函数
END CHECK_DATE;
///检测函数///
SELECT CHECK_DATE(JOIN_TIME)
FROM INFORS;
OR
SELECT *
FROM HSQINFOR
WHERE CHECK_DATE(AAC006) = '1' ;
///删除函数///
DROPFUNCTION CHECK_DATE ;
----创建序列
CREATE SEQUENCE <序列名>
MINVALUE <数值> --定义最小值
NOMAXVALUE --不设置最大值
START WITH <数值>--定义序列值从几开始
INCREMENT BY <数值>--定义序列间隔数值
NOCYCLE --不设置循环
CACHE <数值>;--定义告诉缓存大小
CREATESEQUENCE sequence_name
[MAXVALUE max_num | NOMAXVALUE ]
[MINVALUE min_num | NOMINVALUE ]
[STARTWITH start_num]
[INCREMENTBY increment_num]
[CYCLE | NOCYCLE]
[CACHE cache_num | NOCACHE]
[ORDER | NOORDER] ;
create sequence SEQ_01
increment by 1 --每次+1
start with 37 --从37开始+
nomaxvalue --不设置最大值
nocycle --一直累加不循环
cache 20;
----修改序列
Alter Sequence SEQ_01 increment by 1 ;
----删除序列
DROP SEQUENCE SEQ_01;
----利用序列和触发器,向表里导入数据或插值
***重置序列
1、select seq_name.nextval from dual; //假设得到结果5656
2、 altersequence seq_name incrementby -5655; //注意是-(n-1)
3、 select seq_name.nextval from dual;//再查一遍,走一下,重置为1了
4、 altersequence seq_name incrementby1;//还原
***可以写个存储过程,以下是完整的存储过程,然后调用传参即可:
createorreplaceprocedure seq_reset(v_seqname varchar2) as n number(10);
tsql varchar2(100);
begin
executeimmediate'select '||v_seqname||'.nextval from dual'into n;
n:=-(n-1);
tsql:='alter sequence '||v_seqname||' increment by '|| n;
executeimmediate tsql;
executeimmediate'select '||v_seqname||'.nextval from dual'into n;
tsql:='alter sequence '||v_seqname||' increment by 1';
executeimmediate tsql;
end seq_reset;
方法1:
///创建表///
CREATETABLE TABNAME (VID INTEGERNOTNULLCONSTRAINT PK_TABNAME PRIMARYKEY,
NAMES VARCHAR2(20),
PER_ID VARCHAR2(18)) ;
///创建序列///
CREATESEQUENCE SEQVID–-序列名
incrementby1–-每次+1
STARTWITH1--从1开始
nomaxvalue ; --不循环
///创建触发器///
CREATE [ORREPLACE] TRIGGER<触发器名>
[BEFORE|AFTER]<触发事件>ON<表名>
FOREACHROW
BEGIN
<PL/SQL程序体>
END<触发器名> ;
CREATE [ORREPLACE] TRIGGER trigger_name
[BEFORE|AFTER]trigger_event
ON table_name
[FOREACHROW]
BEGIN
trigger_body
END trigger_name;
CREATEORREPLACETRIGGER TRVID–-创建或替换触发器,触发器名称TRVID
BEFOREINSERTON TABNAME --在对TABNAME表进行插入操作时
FOREACHROW --声明为行级触发器
BEGIN --触发器开始
SELECT SEQVID.NEXTVAL INTO :NEW.VID FROM DUAL; --运行体
END TRVID; --触发器结束
///插值测试///
INSERTINTO TABNAME
(NAMES, PER_ID)
SELECTNAMES, PER_ID
FROMINFORS
WHEREPER_ID = '150XXXXXXXXXXXXXXX';
///校验///
SELECT * FROM TABNAME ;
///禁用和启用触发器///
ALTER TRIGGER TRVID DISABLE;
ALTER TRIGGER TRVID ENABLE;
ALTER TABLE TABNAME DISABLE ALL TRIGGER;
ALTER TABLE TABNAME ENABLE ALL TRIGGER;
///删除触发器、删除序列///
DROP TRIGGER TRVID ;
DROP SEQUENCE SEQVID ;
DROP TABLE TABNAME ;
方法2:
////序列///
CREATE SEQUENCE SEQname –-序列名
INCREMENT BY 1–-每次+1
START WITH 1–从1开始
MAXVALUE 99999999 –最大值;
////触发器///
create trigger TRname before insert
on RYXX_22
for each row
declare
integrity_error exception;
errno integer;
errmsg char(200);
dummy integer;
found boolean;
begin
-- Column lcId uses sequence Sequence_LotCateID
select SEQname.NEXTVAL INTO :new.xh from dual;
-- Errors handling
exception
when integrity_error then
raise_application_error(errno, errmsg);
end;
----创建过程
CREATETABLE INFORS (PER_ID VARCHAR2(10) NOTNULL,
PRO_ID VARCHAR2(4) NOTNULL,
PRO_NAME VARCHAR2(100) NOTNULL,
PRO_MONEY NUMBER(12,2) DEFAULT'0');
INSERTINTO INFORS VALUES ('1','1001','人参果','200');
INSERTINTO INFORS VALUES ('2','2001','蟠桃','180');
INSERTINTO INFORS(PER_ID,PRO_ID,PRO_NAME) VALUES ('3','3001','灵芝');
SELECT *
FROM INFORS ;
CREATE [ORREPLACE] PROCEDURE<过程名>
[<参数列表>]
[IS | AS]
[<局部变量声明>]
BEGIN
<过程体>
END[<过程名>];
CREATE [ORREPLACE] PROCEDURE procedure_name
[(parameter_name [IN | OUT | INOUT] type [,...])]
[IS | AS]
BEGIN
procedure_body
END procedure_anme ;
----创建或置换过程UPDATE_PRODUCT_INFORS,设置2个参数,一个为产品ID,一个为产品价格调整倍数
CREATEORREPLACEPROCEDURE UPDATE_PRODUCT_INFORS(P_PRO_ID IN INFORS.PRO_ID%TYPE,
P_PRO_MONEY INNUMBER) AS
----声明变量
V_INFORS_COUNT INTEGER;
----过程开始
BEGIN
----统计指定产品ID的数量
SELECTCOUNT(*)
INTO V_INFORS_COUNT
FROM INFORS
WHERE PRO_ID = P_PRO_ID;
-----如果产品存在,那么执行UPDATE语句修改产品的价格,然后提交
IF V_INFORS_COUNT = 1THEN
UPDATE INFORS
SET PRO_MONEY = PRO_MONEY * P_PRO_MONEY
WHERE PRO_ID = P_PRO_ID;
COMMIT;
ENDIF;
----如果出现异常,则执行回滚
EXCEPTION
WHENOTHERSTHEN
ROLLBACK;
----结束过程
END UPDATE_PRODUCT_INFORS;
--在command window里校验过程中的错误--
CREATEORREPLACEPROCEDURE UPDATE_PRODUCT_INFORS(P_PRO_ID IN INFORS.PRO_ID%TYPE,
P_PRO_MONEY INNUMBER) AS
V_INFORS_COUNT INTEGER;
BEGIN
SELECTCOUNT(*)
INTO V_INFORS_COUNT
FROM INFORS
WHERE PRO_ID = P_PRO_ID;
IF V_INFORS_COUNT = 1THEN
UPDATE INFORS
SET PRO_MONEY = PRO_MONEY * P_PRO_MONEY
WHERE PRO_ID = P_PRO_ID;
COMMIT;
ENDIF;
EXCEPTION
WHENOTHERSTHEN
ROLLBACK;
END UPDATE_PRODUCT_INFORS;
/
----显示过程错误
SHOWERRORS ;
--调用过程--
SELECT * FROM INFORS WHERE PRO_ID = '1001';
CALL UPDATE_PRODUCT_INFORS(1001,2) ;
SELECT * FROM INFORS WHERE PRO_ID = '1001';
---删除过程--
DROPPROCEDURE UPDATE_PRODUCT_INFORS ;
【转】ORACLE SQL基础—DDL语言 礼记八目 2017-12-23 21:26:21的更多相关文章
- Oracle SQL 基础学习
oracel sql 基础学习 CREATE TABLE USERINFO ( ID ,) PRIMARY KEY, USERNAME ), USERPWD ), EMAIL ), REDATE DA ...
- Oracle——SQL基础
一.SQL语句分为以下三种类型: DML: Data Manipulation Language 数据操纵语言DDL: Data Definition Language 数据定义语言DCL: Data ...
- SQL基础-----DDL
1 (My)SQL入门 这里用了(My)SQL这样的标题,目的是介绍标准SQL的同时,也将MySQL在标准SQL上的扩展一同介绍给读者. 2:SQL分类 SQL语句主要可以划分为以下3个类别 .DDL ...
- 【转】Oralce基础—Sqlplus工具运用 礼记八目 2017-12-20 20:22:45
原文地址:https://www.toutiao.com/i6501603661565657614/ 一.数据库连接: sqlplus [user_name[/password][@ host_str ...
- 【转】Oracle基础结构认知—oracle物理结构 礼记八目 2017-12-13 20:31:06
原文地址:https://www.toutiao.com/i6499008214980362765/ oracle数据库启动:oracle服务启动,通过参数文件查找控制文件,启动控制文件,则控制文件调 ...
- 【转】Oracle基础结构认知—进程及逻辑结构 礼记八目 2017-12-17 19:33:21
原文地址:https://www.toutiao.com/i6500477672349499917/ 一. Process Structure进程结构 Oracle有两种类型的进程: 服务器进程和后台 ...
- 【转】Oracle基础结构认知——oracle内存结构 礼记八目 2017-12-15 20:31:27
oracle的数据库实例是一组后台进程和内存结构组成的,而内存结构由系统全局区(system global area)和程序全局区(program global area)组成. #修改SGA和PGA ...
- 【转】Oracle基础结构认知—初识oracle 礼记八目 2017-12-12 21:19:30
Oracle服务器(oracle server)由实例和数据库组成.其中,实例就是所谓的关系型数据库管理系统(Relational Database Management System,RDBMS), ...
- 2017.12.23 第二章 统一建模语言UML概述
第二章 统一建模语言UML概述 (1)为什么要建模 模型是某个事物的抽象,其目的是在构建这个事物之前先来理解它,因为模型忽略了那些非本质的细节,这样有利于更好的理解和表示事物: 在软件系统开发之前首先 ...
随机推荐
- safari浏览器click事件要点击两次才有响应出现闪烁
闪烁问题 由于在iOS Safari上click事件存在300ms响应延时,所以为touch事件添加样式,会和click事件默认样式叠加而产生闪烁问题. 因为ios safari浏览器中对触摸事件的响 ...
- 强大的jQuery图片查看器插件Viewer.js
简介 Viewer.js 是一款强大的图片查看器 Viewer.js 有以下特点: 支持移动设备触摸事件 支持响应式 支持放大/缩小 支持旋转(类似微博的图片旋转) 支持水平/垂直翻转 支持图片移动 ...
- 20190218-学习python使用shelve遇到raise error, "db type could not be determined"
照书上敲代码,运行了提示raise error, "db type could not be determined",现场如下: ubuntu-vm:~/code/massageb ...
- vscode简单使用介绍及个人常用扩展插件
vscode全称Visual Studio Code 是微软开发一款IDE,官方地址 vscode 作为一款前端编辑器功能很强大,灵活,可以根据个人喜好选择扩展插件,而且还支持多种开发语言, 关于v ...
- 0918如何利用jmeter为数据库插入测试数据
第一 制定测试计划,关于JMETER会通过驱动取操作数据库,因而请在底部路径填写正确. 下载该资源http://download.csdn.net/download/fnngj/3451945 第二步 ...
- 【ACM】hdu_1234_开门人和关门人_201307300845
开门人和关门人Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- cogs 10. 信号无错传输
10. 信号无错传输 ★★☆ 输入文件:dlj.in 输出文件:dlj.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 为提高传递信息的保密性和可靠性,两个军事 ...
- Odoo(OpenERP)开发实践:数据模型学习
作者:苏州-微尘 Odoo中,在Python类里定义的模型及字段信息,可在系统中直接查看.为用户开启技术特性权限后,就可以通过菜单 [设置->技术->数据结构->模型] 进入列表视图 ...
- Converter实现Date类型转换
1.springmvc-config.xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans ...
- 优雅的App全然退出方案(没有不论什么内存泄漏隐患)
在Android开发过程中,特别是界面比較多的情况下,用寻常的退出方式往往是不能全然退出这个应用,网络上也好多各种退出方案.当中一种应该是被广大开发人员採纳使用,也很的清晰方便.就是在Applicat ...