cmd 下:
sqlplus /nolog//连接--sqlplus 连接数据库
请输入用户名
输入:用户名/密码@IP地址/数据库名称(实例名)。1)执行sql文件(可以把需要执行的sql放一个文件中 @@文件名)
输入 @'文件路径'
conn sys/sntsoft as sysdba
//启动关闭startup open shutdown immediate//创建用户授权create user 用户名 identified by 口令 account lock|unlock grant 角色|权限 to 用户(角色) 角色|权限 :connect resource dba create session table//回收权限revoke 角色|权限 from 用户(角色)//修改密码alter user 用户名 identified by 新密码 //修改锁定状态alter user 用户名 account lock|unlock //创建约束alter table 表名 add constraint 约束名 约束内容 使用sysdba账号 登陆后 可以修改其他账号密码运行 cmd 按如下输入命令sqlplus / as sysdba ---------以sys登陆 超级用户(sysdba)alter user 用户名 account unlock; --------- 解除锁定(必须带“;”号)alter user 用户名 identified by 密码; -------------修改密码 主键 primary key外键 foreign key//创建学生表
create table INFOS( stuid varchar(7) not null, stuname varchar(10) not null, gender varchar(2) not null, age number(2) not null, seat number(2) not null, enrolldate date, stuaddress varchar(50) default '地址不详',--默认值 classno varchar(4) not null ); alter table infos add constraint pk_infos primary key(stuid);--创建主键约束alter table infos add constraint ck_infos_gender check(gender='男'or gender='女');--check 约束 alter table infos add constraint un_stuname unique(stuname);--唯一约束 索引//创建成绩表
create table scores(id number,term varchar(2));alter table scores add constraint fk_scores_infos_stuid foreign key(stuid) references infos(stuid);--外键约束 --拷贝表 create table table_name as select * from Source_table where 1=1;--复制表结构
create table table_name as select * from Source_table where 1 <> 1;drop table infos;--删除表
select distinct * from table;--不显示重复行
like '-%' --模糊查询
_表示任意一个字符%表示零个或多个任意字符---集合操作
select * from infos union all select * from infos2;--并集所有(显示重复行)intersect 两个表共有的记录(去掉重复的行)。minus 补集 返回第一个减第二个表剩余的记录去掉重复的行。子查询
select * from infos e,infos2 t where e.stuid=t.stuid and e.age>20;--内连接 select * from infos e,infos2 t where e.stuid(+)=t.stuid and e.age>20;--外连接
create alter drop 操作数据库对象 (表 用户 同义词 序列 视图 索引)
----view 视图:
CREATE OR REPLACE VIEW 视图名 AS select * from table;
直接用create 创建 如果已存在,则会报错。
同义词
create synonym myemp for emp; 序列create sequence my seqminvalue 1start with 1maxvalue 50increment by 2cycle cache 30;//序列seq 最小值为1 从1开始 最大值为50 每次增长2 循环开始 缓存30个序列号。访问序列的当前值和下一个值:
select myseq.currvalue from dual;select myseq.nextvalue from dual;修改 删除 alter dropcreate unique index index_name on table_name(lie_name);
--创建唯一索引 unique(唯一) 表空间:create tablespace 空间名称datafile 'd:/a.ora' size 10Mextent mangement localuniform size 5M为某一用户指定默认表空间
create user acong identfied by acong default tablespace myspace
select * form biaoming for update
select t.*, t.rowid from OSM_T_MR_BOOKS t --给编辑权限,最后F10上传。--增
insert into osm_t_mr_books (id, organization_code, name, reader_id, route_id, read_cycle_id, type_id, remark, created_time, creator_id, is_valid) values('10061','0004','chao','10060','10082','1','1','111','2016-12-01 16:52:00','10060','1') --删delete from osm_t_mr_books where id=10061 --改 update osm_t_mr_books set name='抄表册' where id=10060 --查select name from osm_t_mr_books where id=10061tnsping 服务名。 查看数据库服务器的配置在哪个地方。
导入
imp system/sntsoft@sntsoft_251 file=lujin fromuser=olduser touser=newuser log=lujing导出
exp system/sntsoft@sntsoft_251 file=lujin owner=s8osmtc
order by id desc 排序、倒序。
--修改日期时 把字符串转为日期型数据
to_date('2015-01-01','yyyy-mm-dd')rwoid 物理地址
rownum 行号<> 表示不等于
跟踪sqlalter system flush shareD_pool; ---清除运行池
select * from v$sql a where a.PARSING_SCHEMA_NAME='S8OSM' ;---取程序运行sqlselect dbms_sqltune.extract_binds(bind_data) ---bind
from v$sql where sql_id = '5k3p5pa1ktstv'; 查询某个字段重复行 select * from test where name in (select name from test group by name having COUNT(*)>1); 查询某个字段在哪些表中有:select table_name from dba_tab_columns where column_name='字段名(大写)'; system用户登录--查看被锁的表
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;--查看那个用户那个进程照成死锁
select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;--查看连接的进程
SELECT sid, serial#, username, osuser FROM v$session;--查询是什么SQL引起了锁表的原因
select l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, s.user#, l.os_user_name, s.machine, s.terminal, a.sql_text, a.action from v$sqlarea a, v$session s, v$locked_object l where l.session_id = s.sid and s.prev_sql_addr = a.address order by sid, s.serial#;--解锁杀掉进程 sid,serial#
alter system kill session'210,11562';--锁表
LOCK TABLE tablename IN EXCLUSIVE MODE;--解锁
rollback/commit
dual:
1、查看当前用户,可以在 SQL Plus中执行下面语句 select user from dual;2、用来调用系统函数
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;--获得当前系统时间
select SYS_CONTEXT('USERENV','TERMINAL') from dual;--获得主机名
select SYS_CONTEXT('USERENV','language') from dual;--获得当前 locale
select dbms_random.random from dual;--获得一个随机数
3、得到序列的下一个值或当前值,用下面语句
select your_sequence.nextval from dual;--获得序列your_sequence的下一个值
select your_sequence.currval from dual;--获得序列your_sequence的当前值
4、可以用做计算器 select 7*9 from dual;
------
---删除重复行
Delete table t where t.rowid!=(select max(t1.rowid) from table1 t1 where t1.name=t.name)---给sql语句取个别名
with 别名 as (sql语句)---not existsexists (sql 返回结果集为真) not exists (sql 不返回结果集为真)
--join
LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。select xmid,sql,sqlid from ptb_fpsql a join ptb_fpxm_sql b on a.id=b.sqlid;--让有某个重复字段,只显示一行数据
例子:重复字段为fplb。
1.select a.* from ptb_fp a,(select max(id) as id,fplb from ptb_fp group by fplb) bwhere a.id=b.id and a.fplb=b.fplb;2.select distinct(fplb) from test1;
使用 {} 可以明确指示大括号中的内容是查询表达式,而不是常量 --修改字段类型ALTER TABLE tableName modify(columnName 类型);
--增加一个字段
ALTER TABLE tablename add columnName 类型;
--删除字段
alter table tablename drop columnname;
--修改字段的名称
ALTER TABLE table_name RENAME COLUMN 原名称 to 新名称;
--修改表的名称
rename t1 to t_1;
----Oracle | 给表和字段添加注释
comment on column 表名.字段名 is '注释内容';
comment on table 表名 is '注释内容'; ---select into select * into newtable from oldtable;sqlserver的语法。create table newtable as select * from oldtabel;oracle语法。--foreign key
create table table_name( columns_name int FOREIGN KEY REFERENCES table(columns_name) )--default 默认值
default '0'
--index 索引
CREATE UNIQUE INDEX index_name
ON table_name (column_name)---functions
SELECT function(列) FROM 表 函数---NVL( string1, replace_with)两个表达式的数据类型一定要相同
如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL ,则返回NULL。
--NVL2(E1, E2, E3)
如果E1为NULL,则函数返回E3,否则返回E2。
NULLIF (expr1, expr2)
如果expr1和 expr2相同就返回空,否则返回expr1COALESCE (expr1, expr2, ..., exprn)返回括号内第一个非空的值。grouping sets 增强版的group by 可以指定多个选项。
--not exists
not exists (sql 不返回结果集为真) 前面要有where|| 连接符。
oracle 存储过程的基本语法
1.基本结构
CREATE OR REPLACE PROCEDURE 存储过程名字( 参数1 IN NUMBER, 参数2 IN NUMBER) IS变量1 INTEGER :=0;变量2 DATE;BEGINEND 存储过程名字
--tnsping 实例名---lsnrctl status 命令查看监听器状态
---v$
ORACLE 系统动态性能视图---查询出oracle所有关键字
select * from v$reserved_words order by keyword asc; ---查看表空间使用情况select b.file_id 文件ID,
b.tablespace_name 表空间, b.file_name 物理文件名, b.bytes 总字节数, (b.bytes-sum(nvl(a.bytes,0))) 已使用, sum(nvl(a.bytes,0)) 剩余, sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分比 from dba_free_space a,dba_data_files b where a.file_id=b.file_id group by b.tablespace_name,b.file_name,b.file_id,b.bytes order by b.tablespace_name ---查看当前用户的权限select * from session_privs;
---group by语句GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。--不是group by 表达式
1、GROUP BY 和 ORDER BY一起使用时,ORDER BY要在GROUP BY的后面。
2、ORDER BY 的字段在GROUP BY 后面必须有
3、在select需要查询的语句中选中的字段,必须出现在group by子句中
4、在有组函数的SELECT中,不是组函数的列,一定要放在GROUP BY子句中。
---组函数Avg平均Sum求和Max最大Min最小Count计数---having 语句
Having是在结果中再次筛选。Having一定得出现在group by 子句得后面。不能独立存在。---子查询
子查询返回多行,用=不可以,得用in。子查询返回多列,所以对比的列也要匹配。---any 表示任意的 小于any小于最大,大于any大于最小
all 表示所有的 小于all小于最小,大于all大于最大---查看当前用户所有的表
select * from tab;
---查找为null的字段
用is null 不能用=null;
---函数
lower小写 upper 大写 initcap 首字母大写 concat连接字符在一起
substr(字符串,m,n),m是从第几个字符开始,如果为负的意思是从后边的第几个开始。N是数多少个,如果不说就是一直到字符串的结尾。
instr(字符串,‘a’)求子串在父串中的位置,0表示没有在父串中找到该子串。
----操作数字的函数ceil 向上取整 abs 取绝对值 mod 取余数 round四舍五入 trunc 全部去掉
FM消除前置的零和空格。 别名的本质使用方法是使非法的合法化。to_char(xxxxx,'fm99999999.00') 保留两位小数。
--caseselect name1 ,id1,id2,
case id1 when 1 then 2*id1 when 2 then 3*id1 -- else 5 end id2 from testtable;---显示回收站的信息
SQL> show recyclebin ---将回收站的表还原FLASHBACK TABLE t2 TO BEFORE DROP;--高级分组
rollup cube
pl/sql块DECLARE
变量声明部分,可以没有Begin逻辑处理执行部分,到end结束,必须有EXCEPTION错误处理部分,可以没有End;:= 为赋值,=为逻辑判断,判断是否相等。
Null的逻辑运算真值表
Ture and null 结果为 nullFlase and null结果为 flase变量的命名规则
在不同的模块中,变量可以重名变量的名称不应该和模块中引用的列的名称相同变量名称应该有一定的可读性变量的作用范围
外部模块变量可以传到内部模块内部模块的变量不会影响外部 数据库中的两种属性类型:%rowtype 一行前缀为表的名称内部域的属性为表中列的数据类型域的名称为列的名称便于存储表的一行declare
myemp infos%rowtype; begin select * into myemp from infos where stuid=3; dbms_output.put_line(myemp.stuname); end;%type 某列的类型
声明一个变量和某列数据类型相同声明一个变量和另外一个变量数据类型一致减小程序的无效的可能性,可以不知道列的数据类型,定义一个与之相同的变量。查询年龄为20的学生 如果他的学号大于0,则把他的年龄设为50,否则设为10.
declare newstu infos.stuid%type;begin select stuid into newstu from infos where age=20; if newstu>0 then update infos set age=50 where age=20;elseupdate infos set age=10 where age=20; end if; commit; end;case语式
例子: declare v_grade char(1):=upper('&p_greade'); begin case v_grade when 'A'then dbms_output.put_line('111'); else dbms_output.put_line('1212'); end case ; end;循环结构:loop死循环end loop例子:
declare counter number(3):=0; sumresult number:=0; begin loop counter:=counter+1; sumresult:=sumresult+counter; if counter>=100 then exit; end if; end loop; dbms_output.put_line('result is:' ||to_char(sumresult)); end;
--查询数据库预先定义的错误
select text from dba_source where name='STANDARD'AND ROWNUM<100 AND TEXT LIKE '%EXCEPTION_INIT%'; 块 ---函数 ----存储过程 -------包体 ---查看表空间select tablespace_name,file_name,ceil(bytes/1024/1024) mb
from dba_data_files order by 1;----decode 函数
decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
该函数的含义如下:IF 条件=值1 THEN
RETURN(翻译值1)ELSIF 条件=值2 THEN RETURN(翻译值2) ......ELSIF 条件=值n THEN RETURN(翻译值n)ELSE RETURN(缺省值)END IF--sign 函数
当x>0,sign(x)=1;
当x=0,sign(x)=0;当x<0, sign(x)=-1;---merge into 只能用insert或者update
有一个表A和表B,如果满足条件,则更新表A中c的值。
merge into Ausing Bon (A.a=B.a and A.b=B.b)when matched thenupdate set A.c=B.c--回车换行符
返回 Stringchr(65)=A asscll码chr(10)是换行符,chr(13)是回车,---is和as
在存储过程(PROCEDURE)和函数(FUNCTION)中没有区别,在视图(VIEW)中只能用AS不能用IS,在游标(CURSOR)中只能用IS不能用AS。---undo信息
1.一致性 回滚事务 实例恢复
--- truncate 和deletedelete 可以删除整个表的数据也可以删除表中某一条或N条满足条件的数据,而truncate只能删除整个表的数据,一般我们把delete 操作收作删除表,而truncate操作叫作截断表.truncate操作与delete操作对比
truncate 效率高
---查询出存储过程的定义语句
select text from user_source WHERE NAME='TEST_COUNT'; (大小写敏感)----查询存储过程test_paramINOUT的参数
DESCRIBE test_paramINOUT; 在命令行中执行---查看当前连的服务
show parameter service;---删除某个用户的所有数据
drop user username cascade;
select username from dba_users; ---rank within gourpfor in loop ---隐身游标
---语句DML 操做 selectDDL 定义 createDCL 控制 commitSELECT tablespace_name 表空间, sum(blocks * 8192 / 1000000) 剩余空间M
FROM dba_free_space GROUP BY tablespace_name;----查表空间剩余量 Select Tablespace_Name,Sum(bytes)/1024/1024 From Dba_Segments Group By Tablespace_Name alter database tempfile 'F:\SHEYANG\PTBTEMP.ORA' resize 1G;--扩展临时表空间大小select file_name , tablespace_name from dba_data_files; ---查看表空间路径 select 'alter index '||index_name||' rebuild;' from user_indexes X where x.table_name IN ('PTB_FYMX')---查找所有索引 重建索引select tablespace_name,file_name,bytes/1024/1024 file_size,autoextensible from dba_temp_files;---查询临时表空间文件路径