ORACLE基本定义、操作语句

ORACLE基本定义、操作语句

一、          

1.创建表

CREATE TABLE TAB_NAME

(

COL_01  VARCHAR2(10) NOT NULL,

COL_02  NUMBER(8,2),

COL_03  DATE

);

2.添加主键约束

ALTER TABLE TAB_NAME ADD CONSTRAINT PK_COL_01 PRIMARY KEY(COL_01);

3.添加唯一性约束

ALTER TABLE TAB_NAME ADD CONSTRAINT UK_COL_02 UNIQUE(COL_02);

4.添加外键约束

ALTER TABLE TAB_NAME ADD CONSTRAINT FK_COL0_03 FOREIGN KEY(COL_03) REFERENCES TAB_2(COL_03);

5.添加check约束

ALTER TABLE TAB_NAME ADD CONSTRAINT CHK_COL_03 CHECK(COL_01 <> ‘ABC’);

6.创建索引

――创建唯一索引

CREATE UNIQUE INDEX IDX_NAME ON TAB_NAME(COL_01);

――创建非唯一索引

CREATE INDEX IDX_NAME ON TAB_NAME(COL_01);

7.给表添加一个新列

ALTER TABLE  TAB_NAME  ADD  COL_04  VARCHAR2(10);

8.修改列的数据类型

ALTER TABLE  TAB_NAME  MODIFY  COL_04  NUMBER(8);

9.删除一列

ALTER TABLE TAB_NAME DROP COLUMN COL_04;

10.更改表的名称

ALTER TABLE  TAB_NAME  RENAME  TO  TAB_NEW_NAME;

11.更改表的列名

ALTER TABLE TAB_NAME RENAME COLUMN COL_04 TO COL_05;

12.给表和列添加注释说明

--add comments to the table

COMMENT ON TABLE TAB_NAME IS ‘示例表’;

--add comments to the column

COMMENT ON COLUMN TAB_NAME.COL_01 IS ‘列名’;

13.删除表

DROP TABLE TAB_NAME;

14.MERGE

merge into tj_test1 tt1

using tj_test tt
on (tt1.id=tt.id)
when matched then
update set
tt1.name=tt.name,
tt1.age=tt.age
when not matched then
insert values(
tt.id,
tt.name,
tt.age)

alter   table
  Tab_Name   modify(字段   varchar(20),
  字段   varchar(50));

二、          
视图

1.  创建视图

CREATE OR REPLACE VIEW  VW_NAME 
AS

SELECT
A.COL_01,

A.COL_02,

A.COL_03,

B.COL_04

FROM
 TAB_ONE A,TAB_TWO B

WHERE  A.COL_01 = B.COL_01;

三、          
序列

1.  创建序列

CREATE SEQUENCE SQ_NAME

INCREMENT BY
10  --序列增量

START WITH
20    --开始值

MAXVALUE
1000    --最大值

MINVALUE
20    --最小值

NOCACHE  /*如果要指定cache给序列,应该写成CACHE
N

其中N为要指定的数值*/

NOCYCLE;   /*如果序列到了最大值还要继续取值,

就写成 CYCLE*/

2.  修改序列

ALTER SEQUENCE SQ_NAME

INCREMENT BY 10  --序列增量

START WITH
20    --开始值

MAXVALUE
1000    --最大值

MINVALUE
20    --最小值

CACHE  5

CYCLE;

注:如果想要按不同的值从新开始一个序列,该序列必须删掉重建

四、          
同义词

1.  创建同义词

CREATE SYNONYM SY_NAME FOR TAB_NAME;

五、          
函数

创建函数

CREATE OR REPLACE FUNCTION
FN_NAME([参数1],[参数2],[…..])

RETURN return_type

AS

--定义变量

BEGIN

--函数内容

Return
[返回值];

END;

六、          
存储过程

创建过程

CREATE OR REPLACE PROCEDURE
SP_NAME([参数1],[参数2],[…..])

AS

--定义变量

BEGIN

--过程内容

END;

七、          
触发器

创建过程

CREATE OR REPLACE TRIGGER TR_NAME

AFTER[BEFORE ]
[INSERT/UPDATE/DROP] ON TAB_NAME

REFERENCING OLD AS old NEW AS
new

FOR EACH ROW

DECLARE

--定义变量

BEGIN

--触发器内容

END;

八、          
包和包体

创建包

CREATE
OR REPLACE PACKAGE
PK_NAME

AS

--包内容

END PK_NAME;

创建保体

CREATE
OR REPLACE PACKAGE
BODY
PK_NAME

AS

--包体的内容

END PK_NAME;

九、          
用户

1.创建一个用户

CREATE USER USR_NAME

IDENTIFIED BY PASSWORD

DEFAULT
TABLESPACE TAB_SPACE_NAME

TEMPORARY
TABLESPACE TMP_TABSPACE_NAME

PROFILE DEFAULT;

2.给该用户授权

GRANT 权限类型 TO USR_NAME;

3.撤销用户权限

REVOKE权限类型 FROM USR_NAME;

4.修改用户密码

ALTER
USER USR_NAME IDENTIFIED BY NEW_PSD;

5.设定用户缺省的角色

ALTER USER USR_NAME DEFAULT ROLE ROLE_NAME;

设定缺省角色后,用户登陆后就只有该缺省的角色权限了。

这时可以使用下列命令来让其它角色权限生效(激活角色):

SET ROLE ROLE_NAME IDENTIFIED BY 
PWD;

6.给用户授予表空间使用权限

alter
user user_name quota unlimited on
tablespace_name;

十、          
角色

1.创建一个角色

CREATE ROLE ROLE_NAME IDENTIFIED BY PWD;

2.给角色授权

GRANT 权限类型 TO ROLE_NAME  [WITH 
ADMIN  OPTION];

3.撤销角色权限

REVOKE 权限类型 FROM ROLE_NAME;

4.取消角色的密码

ALTER ROLE  ROLE_NAME  NOT  IDENTIFIED;

5.设置当前用户要生效的角色

(注:角色的生效是一个什么概念呢?假设用户a有b1,b2,b3三个角色,那么如果b1未生效,则b1所包含的权限对于a来讲是不拥有的,只有角色生效了,角色内的权限才作用于用户,最大可生效角色数由参数MAX_ENABLED_ROLES设定;在用户登录后,oracle将所有直接赋给用户的权限和用户默认角色中的权限赋给用户。)
sql>set role role1;//使role1生效
sql>set role role,role2;//使role1,role2生效
sql>set role role1 identified by password1;//使用带有口令的role1生效
sql>set role all;//使用该用户的所有角色生效
sql>set role none;//设置所有角色失效
sql>set role all except role1;//除role1外的该用户的所有其它角色生效。
sql>select * from SESSION_ROLES;//查看当前用户的生效的角色。

6.修改指定用户,设置其默认角色
sql>alter user user1 default role role1;
sql>alter user user1 default role all except role1;

十一、表空间

1.创建表空间

drop
tablespace tabspace_name INCLUDING CONTENTS;

CREATE
TABLESPACE tabspace_name DATAFILE ‘/home/oracle/oradata/lgdb/ tabspace_name.dbf‘
SIZE 100M REUSE

AUTOEXTEND ON MAXSIZE UNLIMITED

DEFAULT STORAGE(INITIAL 320K

NEXT 320K

MINEXTENTS 1

MAXEXTENTS UNLIMITED

PCTINCREASE 0);

临时表空间:

CREATE temporary TABLESPACE "TEMP03"

tempfile
‘/home/oracletg/odspxdb/oradata/odspx/temp03.dbf‘

SIZE 4000M reuse

2.增加数据文件的大小

ALTER DATABASE
DATAFILE  ‘/home/oracle/oradata/lgdb/ tabspace_name.dbf‘
RESIZE 500M;

3.给表空间添加数据文件

ALTER TABLESPACE
tabspace_name ADD DATAFILE ‘/home/oracle/oradata/lgdb/ tabspace_name2.dbf‘ SIZE
100M ONLINE;

SQLPLUS中常用的set参数


参数名


说明


appinfo


arraysize


一次可以取的行的数目。1-5000,即系统查询出多少行后将结果返回给用户


autocommit


用于在操作中是自动提交:ON/IMMEDIATE
或是部分提交 N 或是不自动提交 OFF

N 表示允许在用户发出COMMIT后,可以提交的执行命令数量(将n条DML语句所做的改进结果进行提交,等n+1、n+2…..条语句产生的结果将不提交)


autoprint


自动打印变量的值。

如在sqlplus中定义了一个变量,在这些过程时引用了该变量,执行完过程后终端自动打印该变量的值。


autorecovery


在做备份恢复的时候有用


autotrace


设置自动跟踪DML语句生成执行计划的参数:ON 打开自动跟踪,OFF关闭,TRACEONLY 只生成执行计划而不返回执行结果


blockterminator


Enter the BLOCKTERMINATOR to stop SQL
command entry without running the SQL command


btitle


页脚标题


cmdsep


用于将多个sqlplus命令连接在一行的连接符号 如:SQL>set cmddep +

SQL> TTITLE LEFT ‘SALARIES‘ + COLUMN
SALARY FORMAT $99,999


colsep


用于设置查询结果中各列之间的间隔符号

如:SQL>set
colsep ‘|’

执行一个查询语句后,显示的结果中各列以’|’字符隔开


compatibility


指定oracle sql的语法分析器的版本

SET COM[PATIBILITY]{V7|V8|NATIVE}


concat


用于想要在define的变量之后连接其他的字符串时使用

如:SQL>define
str=’a’

SQL>select ‘&str’ from dual;

执行结果如下:

----

.a

SQL>set concat ,

SQL>select ‘&str,AA’ from dual;

执行结果如下:

‘AA

----

aaa


copycommit


设置copy命令执行后,多少行数据开始commit


COPYTYPECHECK


Sets the suppression of the comparison of
datatypes while inserting or appending to tables with the COPY command. This
is to facilitate copying to DB2, which requires that a CHAR be copied to a DB2
DATE.


define


定义变量时使用的命令


describe


用于显示表和视图的结构,同义词,或指定函数和过程的详述


echo


命令文件执行时,是否在终端上显示命令本身:ON/OFF 如:SQL>start d:\a.sql

Echo 为on则在终端上显示a.sql中的命令


editfile


设定edit默认情况下使用的文件名,文件名的长度和操作系统允许值相同


embedded


Controls where on a page each report
begins. OFF forces each report to start at the top of a new page. ON allows a
report to begin anywhere on a page


escape


设置换码符号

ESC[APE] {\|c|ON|OFF}
如为ON则换码符号默认设置为’\’


flagger


判断命令是否符合ANSI/ISO SQL92标准,和alter
session set
flagger=full命令相同


flush


设定向用户显示设备输出数据的开关。设为OFF则缓存在操作系统的buffer中,设定为ON则操作系统无法缓存。一般在非对话形式或者使用command file,不需要确认输出结果时设定为关闭。设定为OFF也可以减少I/O发生,提高性能。


heading


控制列名信息的显示:ON/OFF


headsep


设置让列换行显示的标识符

如:SQL>set
headsep ‘\’

SQL>col system_id heading ‘system\id’

SQL>select system_id from src2stdwar;

显示结果如下:

System

Id

----------

6

7


instance


设置系统默认的实例

如:SQL>disconnect

SQL> SET INSTANCE LGDB

LGDB为数据库一个实例

要设置回系统默认的实例

SQL>set instance local


linesize


设置行的最大显示位数


lno


显示当前的行数


loboffset


设置clob 数据类型的显示长度,超过将换行显示或截取


logsource


指定本地的log
file给恢复使用,默认的值是oracle初始化文件init.ora中LOG_ARCHIVE_DEST的值,set logsource后面不带参数,将设置回默认的值


long


长类型显示的字节数,默认的是80个字符

值必须小于Maxdata的值

SQL>show Maxdata


longchunksize


设置增量的字节数


markup


设置HTML输出到文本 如:

SET MARKUP HTML ON SPOOL ON HEAD "<TITLE>SQL*Plus Report</title> -
STYLE TYPE=‘TEXT/CSS‘><!--BODY {background: ffffc6} --></STYLE>"
SET ECHO OFF
SPOOL employee.htm">
SELECT FIRST_NAME, LAST_NAME, SALARY
FROM EMP_DETAILS_VIEW
WHERE SALARY>12000;
SPOOL OFF
SET MARKUP HTML OFF
SET ECHO ON

newpage


设置每页的开头空白行


null


设置结果为null时显示的值

如:set null ‘no data’

当查询结果中有空值时就显示no data


numformat


Sets the default format for displaying numbers


numwidth


Sets the default width for displaying numbers


pagesize


设置每页显示的行数


PAUSE


暂停 ON/OFF/TEXT 为ON时当报表超过一页时,每显示一屏就暂停显示,等待用户打回车键,再接着显示;OFF:页于页不停顿,TEXT:页于页停顿,并向用户提示信息


pno


页数


recsep


RECSEP tells SQL*Plus where to make the record separation. For example, if you set RECSEP to WRAPPED, SQL*Plus prints a record separator only after wrapped lines. If you set RECSEP to EACH, SQL*Plus prints a record separator following every row. If you set RECSEP to OFF, SQL*Plus does not print a record separator.


recsepchar


Defines the character to display or print to separate records


release


repfooter


repheader


serveroutput


使终端上显示dbms_output包中put_line()过程的执行结果


shiftinout


showmode


spool


将执行结果输出到文件:

Spool d:\a.sql

Select * from tab_name ;

Spool off –停止输出

Spool out

SPOOL OUT关闭该文件并在系统缺省的打印机上输出 


sqlblanklines


允许有空白行在DML语句中ON/OFF


sqlcase


sqlcode


sqlcontinue


sqlnumber


sqlpluscompatibility


sqlprefix


sqlprompt


sqlterminator


suffix


tab


termout


用于设置在屏幕上显示或不显示所输出的信息


time


timing


是否显示DML语句的执行时间:ON/OFF


trimout


trimspool


ttitle


页头标题


underline


USER


显示当前的用户名


verify


wrap


控制换行:ON 换行显示,OFF超过长度不换行而截取掉多余的长度


feedback


查询结束时给出结果、记录数的信息ON/OFF

如:执行select * from tab_name后

在后面显示:已选择2行。

常用的数据字典及SQL

Oracle中的数据字典有静态和动态之分。静态数据字典主要是在用户访问数据字典时不会发生改变的,但动态数据字典是依赖数据库运行的性能的,反映数据库运行的一些内在信息,所以在访问这类数据字典时往往不是一成不变的。以下分别就这两类数据字典来论述。

1. 静态数据字典

这类数据字典主要是由表和视图组成,应该注意的是,数据字典中的表是不能直接被访问的,但是可以访问数据字典中的视图。静态数据字典中的视图分为三类,它们分别由三个前缀够成:user_*、 all_*、 dba_*。

user_*

该视图存储了关于当前用户所拥有的对象的信息。(即所有在该用户模式下的对象)

all_*

该试图存储了当前用户能够访问的对象的信息。(与user_*相比,all_* 并不需要拥有该对象,只需要具有访问该对象的权限即可)

dba_*

该视图存储了数据库中所有对象的信息。(前提是当前用户具有访问这些数据库的权限,一般来说必须具有管理员权限)

从上面的描述可以看出,三者之间存储的数据肯定会有重叠,其实它们除了访问范围的不同以外(因为权限不一样,所以访问对象的范围不一样),其他均具有一致性。具体来说,由于数据字典视图是由SYS(系统用户)所拥有的,所以在却省情况下,只有SYS和拥有DBA系统权限的用户可以看到所有的视图。没有DBA权限的用户只能看到user_*和all_*视。如果没有被授予相关的SELECT权限的话,他们是不能看到 dba_*视图的。

由于三者具有相似性,下面以user_为例介绍几个常用的静态视图:

user_users视图

主要描述当前用户的信息,主要包括当前用户名、帐户id、帐户状态、表空间名、创建时间等。例如执行下列命令即可返回这些信息。
select * from user_users

user_tables视图

主要描述当前用户拥有的所有表的信息,主要包括表名、表空间名、簇名等。通过此视图可以清楚了解当前用户可以操作的表有哪些。执行命令为:select * from user_tables

user_objects视图

主要描述当前用户拥有的所有对象的信息,对象包括表、视图、存储过程、触发器、包、索引、序列等。

user_tab_privs视图

该视图主要是存储当前用户下对所有表的权限信息。

2.  动态数据字典

Oracle包含了一些潜在的由系统管理员如SYS维护的表和视图,由于当数据库运行的时候它们会不断进行更新,所以称它们为动态数据字典(或者是动态性能视图)。这些视图提供了关于内存和磁盘的运行情况,所以我们只能对其进行只读访问而不能修改它们。

Oracle中这些动态性能视图都是以v$开头的视图。

v$access

该视图显示数据库中锁定的数据库对象以及访问这些对象的会话对象(session对象)。

v$session

该视图列出当前会话的详细信息。

v$active_instance

该视图主要描述当前数据库下的活动的实例的信息。

v$context

该视图列出当前会话的属性信息。比如命名空间、属性值等。

查看哪些表被锁和锁的模式

select  
p.spid,c.object_name,b.session_id,b.oracle_username,b.os_user_name,b.locked_mode

from  
v$process   p,v$session   a,  
v$locked_object   b,all_objects   c

where  
p.addr=a.paddr   and   a.process=b.process   and  
c.object_id=b.object_id

SELECT 
S.SID SESSION_ID, S.USERNAME,

DECODE(LMODE, 0, ‘None‘, 1, ‘Null‘, 2,
‘Row-S (SS)‘, 3, ‘Row-X (SX)‘,  4,
‘Share‘, 5, ‘S/Row-X (SSX)‘,  6,
‘Exclusive‘, TO_CHAR(LMODE)) MODE_HELD,

DECODE(REQUEST, 0, ‘None‘, 1, ‘Null‘, 2,
‘Row-S (SS)‘, 3, ‘Row-X (SX)‘, 4, ‘Share‘, 5, ‘S/Row-X (SSX)‘, 6, ‘Exclusive‘,
TO_CHAR(REQUEST)) MODE_REQUESTED,

O.OWNER||‘.‘||O.OBJECT_NAME||‘
(‘||O.OBJECT_TYPE||‘)‘, S.TYPE LOCK_TYPE, L.ID1 LOCK_ID1, L.ID2 LOCK_ID2

FROM V$LOCK L, SYS.DBA_OBJECTS O, V$SESSION
S

WHERE L.SID = S.SID AND  L.ID1 = O.OBJECT_ID

select
b.owner,b.object_name,l.session_id,l.locked_mode

from v$locked_object l, dba_objects b

where b.object_id=l.object_id

ORACLE锁有一下几种模式:

0:none

1:null 空

2:Row-S 行共用(RS):共用表锁,sub share

3:Row-X 行独占(RX):用于行的修改,sub exclusive

4:Share 共用锁(S):阻止其他DML操作,share

5:S/Row-X 共用行独占(SRX):阻止其他事务操作,share/sub
exclusive

6:exclusive 独占(X):独立访问使用,exclusive

如果锁长期没有释放,我们可以杀掉该锁所在的进程

alter system kill session ‘sid,serial#‘;

3. 
查询TEMP空间的使用

临时表空间曾经最大使用情况:

select d.tablespace_name,space "sum_space(m)",blocks
sum_blocks,used_space "used_space(m)", round(nvl(used_space, 0) /
space * 100, 2) "used_rate(%)",nvl(free_space, 0)
"free_space(m)" from (select tablespace_name,round(sum(bytes) / (1024
* 1024), 2) space,sum(blocks) blocks from dba_temp_files group by
tablespace_name) d,(select tablespace_name,round(sum(bytes_used) / (1024 *
1024), 2) used_space, round(sum(bytes_free) / (1024 * 1024), 2) free_space from
v$temp_space_header group by tablespace_name) f where d.tablespace_name =
f.tablespace_name(+)

当前的临时表空间使用情况:

select
sum(blocks*8192)/1024/1024 from v$sort_usage

 

时间: 2024-11-08 08:30:38

ORACLE基本定义、操作语句的相关文章

Oracle 数据库常用操作语句大全

Oracle 数据库常用操作语句大全 一.Oracle数据库操作 1.根据删除的时间查询出被删除的数据 select * from szdj_work_plan AS OF TIMESTAMP TO_TIMESTAMP('2018-1-19 16:51:37', 'yyyy-mm-dd hh24:mi:ss') where subject='测试一下删除0119' 1.表中唯一的最大的值 select hibernate_sequence.nextval from dual 1.创建数据库 cr

oracle数据库操作语句

常用到的oracle数据库操作语句,以下仅供参考: 一. 查询 1.查询某个数据库表大于某个日期的所有数据条数    select count(*) from ALARM_LOG t where t.ALARM_START_TIME> to_date('2017-01-10 08:00:00','yyyy-mm-dd hh24:mi:ss');   查询某个数据库表大于某个日期的所有历史数据  select * from ALARM_LOG t where t.ALARM_START_TIME>

Oracle 存储过程定义和优点及与函数区别

定义: 存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中.用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程. 存储过程是由流控制和SQL 语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可.在ORACLE 中,若干个有联系的过程可以组合在一起构成程序包. 优 点: 1.(预编译)存储过程只在创造

Oracle维护常用SQL语句

数据库人员手边系列:Oracle维护常用SQL语句 1.查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size from dba_tablespaces t, dba_data_files d where t.tablespace_name = d.tablespace_name group by t.tablespace_name; 2.查看表空间物理文件的名称及大小 select tables

Oracle 基本SQL SELECT语句

SELECT  *  |    {   [ DISTINCT  ]    column   |    expression   [   alias   ]  ,   ...    } FROM  table; ?SELECT  标识 选择哪些列. ?FROM    标识从哪个表中选择. column后面加上空格,同时跟上别名(alias),或者 as 别名,到下一行的内容时,要用逗号隔开, 默认的别名是小写的,如果想要让它是大写的,使用 "别名" 如果别名有多个单词的时候,用双引号别名

Oracle 常用的修改语句

一.表Table 测试表:MY_TEST_TABLE -- Create table create table MY_TEST_TABLE ( A VARCHAR2(30), B NUMBER(10) default 1, C DATE ) tablespace BOSSWG_CFG pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited ); -- Add commen

Microsoft SQL - 操作语句

操作语句(Operation Statement) 操作数据库 创建数据库 关键字:create database 用于创建各种数据库对象(数据库.表.触发器.存储过程等) 格式如:create <对象类型> <对象名称> create database 数据库名称 on primary ( name='主文件名' , size=初始化大小 按kb.mb.gb.tb设置 , maxsize=最大容量 unlimited(无限)/ 按kb.mb.gb.tb设置 , filegrowt

oracle数据库误操作把表删除了,怎样恢复

一:表的恢复 对误删的表,只要没有使用PURGE永久删除选项,那么从flash back区恢复回来希望是挺大的.一般步骤有: 1.从flash back里查询被删除的表 select * from recyclebin 2.执行表的恢复 flashback table tb to before drop,这里的tb代表你要恢复的表的名称. 二:表数据恢复 对误删的表记录,只要没有truncate语句,就可以根据事务的提交时间进行选择恢复,一般步骤有: 1.先从flashback_transact

Oracle大数据SQL语句优化

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描, 如: select id from t where num is null    可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则