原文地址: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的更多相关文章

  1. Oracle SQL 基础学习

    oracel sql 基础学习 CREATE TABLE USERINFO ( ID ,) PRIMARY KEY, USERNAME ), USERPWD ), EMAIL ), REDATE DA ...

  2. Oracle——SQL基础

    一.SQL语句分为以下三种类型: DML: Data Manipulation Language 数据操纵语言DDL: Data Definition Language 数据定义语言DCL: Data ...

  3. SQL基础-----DDL

    1 (My)SQL入门 这里用了(My)SQL这样的标题,目的是介绍标准SQL的同时,也将MySQL在标准SQL上的扩展一同介绍给读者. 2:SQL分类 SQL语句主要可以划分为以下3个类别 .DDL ...

  4. 【转】Oralce基础—Sqlplus工具运用 礼记八目 2017-12-20 20:22:45

    原文地址:https://www.toutiao.com/i6501603661565657614/ 一.数据库连接: sqlplus [user_name[/password][@ host_str ...

  5. 【转】Oracle基础结构认知—oracle物理结构 礼记八目 2017-12-13 20:31:06

    原文地址:https://www.toutiao.com/i6499008214980362765/ oracle数据库启动:oracle服务启动,通过参数文件查找控制文件,启动控制文件,则控制文件调 ...

  6. 【转】Oracle基础结构认知—进程及逻辑结构 礼记八目 2017-12-17 19:33:21

    原文地址:https://www.toutiao.com/i6500477672349499917/ 一. Process Structure进程结构 Oracle有两种类型的进程: 服务器进程和后台 ...

  7. 【转】Oracle基础结构认知——oracle内存结构 礼记八目 2017-12-15 20:31:27

    oracle的数据库实例是一组后台进程和内存结构组成的,而内存结构由系统全局区(system global area)和程序全局区(program global area)组成. #修改SGA和PGA ...

  8. 【转】Oracle基础结构认知—初识oracle 礼记八目 2017-12-12 21:19:30

    Oracle服务器(oracle server)由实例和数据库组成.其中,实例就是所谓的关系型数据库管理系统(Relational Database Management System,RDBMS), ...

  9. 2017.12.23 第二章 统一建模语言UML概述

    第二章 统一建模语言UML概述 (1)为什么要建模 模型是某个事物的抽象,其目的是在构建这个事物之前先来理解它,因为模型忽略了那些非本质的细节,这样有利于更好的理解和表示事物: 在软件系统开发之前首先 ...

随机推荐

  1. orcale 基本查询(1)

    orcale 基本查询 查询当前用户下的所有表:  select * from tab; 查询表结构: desc 表名设置行宽: set linesize 120;设置列宽: 数值类型: col 列名 ...

  2. Spring Boot 定时任务单线程和多线程

    Spring Boot 的定时任务: 第一种:把参数配置到.properties文件中: 代码: package com.accord.task; import java.text.SimpleDat ...

  3. 洛谷 P2412 查单词

    P2412 查单词 题目背景 滚粗了的HansBug在收拾旧英语书,然而他发现了什么奇妙的东西. 题目描述 udp2.T3如果遇到相同的字符串,输出后面的 蒟蒻HansBug在一本英语书里面找到了一个 ...

  4. Linux中tty是什么(tty1~7)

    tty:终端设备的统称. tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘与显示器取代,所 ...

  5. [Angular] Introduce to NGXS

    Went though tow youtube videos about NGXS https://angularfirebase.com/lessons/ngxs-quick-start-angul ...

  6. &lt;LeetCode OJ&gt; 31. Next Permutation

    31. Next Permutation Total Accepted: 54346 Total Submissions: 212155 Difficulty: Medium Implement ne ...

  7. python使用pytest+pytest报告

    需要安装pytest和pytest-html pip3 install -U pytest pip3 install -U pytest-html

  8. Running the app on your device

    So far, you've run the app on the Simulator. That's nice and all but probably notwhy you're learning ...

  9. spring注入对象类型的属性

    一.1.创建service类和Dao类 (1)在service中得到dao对象 2.具体实现过程 (1)在service里边把dao作为类型属性 (2)生成dao类型属性的set方法 public c ...

  10. 国内物联网平台初探(五) ——机智云IoT物联网云服务平台及智能硬件自助开发平台

    平台定位 机智云平台是致力于物联网.智能硬件云服务的开放平台.平台提供了从定义产品.设备端开发调试.应用开发.产测.运营管理等覆盖智能硬件接入到运营管理全生命周期服务的能力. 机智云平台为开发者提供了 ...