操作方法
连接数据库: conn 用户名/密码 断开数据库连接: disc 修改用户密码: 当前用户改密码: passw-->旧密码-->新密码 显示当前用户名: show user; 运行sql脚本文件可以用 start或@来进行 如: start 文件路径 编辑sql脚本文件用 edit 如: edit 文件路径 spool 可以将查询内容存入文件(需3步) 用法: 1.spool 文件路径 2.查询命令查询内容 3.spool off 删除用户(drop)注意: 如果要删除的用户已经创建了表,删除用户时需要带一个参数 cascade 为新用户赋权限: 1.需要使用system或sys赋权限 2.赋权限的命令: grant connect to 用户名 注意: connect是一个角色,角色分为3类,一般使用connect就好,dba角色不要轻易授权,resource角色可以在任何一个表空间建表 设置用户查询其他用户创建的表权限: 创建表用户、system 或aya执行命令:grant select on 被查表名 to 用户名 注意: 1.设置的权限包括 select、insert、update、all、create index等等 2.但是授权后还不能直接使用 select * from 表名 进行查询,需要指定方案名即 select * from 用户名.表名 收回用户在某用户创建表上的一系列权限: revoke select on 表名 from from 用户名 注意:谁授权的谁进行收回 对多个用户直接的权限可以相互传递 可以使用 with grant option 参数 A,B两个用户,B要继承A的权限步骤如下 1.先使用创建表用户或更高级用户给A用户授权 grant select on 被查表名 to A with grant option 2.使用A账户登录,在A用户上对B进行授权 对用户登录失败次数及设定间隔多久解锁方法(dba权限进行): > create profile 规则名 limit failed_login_attempts 失败次数 password_lock_time 锁定天数 > alter user 限制规则用户名 profile 规则名 对用户解锁: > alter user 用户名 account unlock 终止口令: 让用户定期修改密码: > create profile 文件名 limit password_life_time 密码有效天数 password_grace_time 宽限期天数 > alter user 用户名名 profile 文件名 字符型 char 定长 最大支持2000字符(空间利用不好,但查询速度很快) 例子: char(10) ‘方建康’ 前6个字符放‘方建康’ ,后添加4个空格补全 varchar 变成 最大支持4000字符(空间利用好,但查询速度快) clob 字符型大对象,最大支持4G 数字型 number 范围-10的-38次方到10的38次方,可以表示整数,也可以表示小数 numner(5,2) 表示一个小数有5位的有效数,2位小数 范围 -999.99~999.99 number(5)表示一个5位整数 范围-99999~99999 日期型 date 包含年月日和时分秒 timestamp 这是oracle9i对date数据类型的扩展 图片型(媒体) blob 二进制数据,可以存放图片/声音 最大4G 建表 新建学生表 > create table student( —表名 xh number(4),—学号 xm varchar2(20),—姓名 sex char(2),—姓名 birthday date,—出生日期 sal number(7,2) —奖学 ); 添加一个字段 > alter table student add (classId number(2)); 修改字段的长度 > alter table student modify (xm varchar2(30)); 修改字段的类型或名字 > alter table student modify (xm char(30)); 删除字段 > alter table student drop column sal; 修改表的名字 > rename student to user; 删除表 > drop table student; 添加数据到表 所有字段都插入 > insert into student values (‘A001’,’方建康’,’男’,’01-5月-05’,10); ORACLE中默认的日期格式为 ‘DD-MON-YY’, dd为日(天),mon为月份,yy为2为的年份 ’09-6月-99’,1999年6月9号 如果需要更改默认格式可以适应以下方式: > alter session set els_date_format =‘yyyy-mm-dd’; 插入部分字段 > insert into student (xh,xm,sex) values (‘A002’,’美男子’,’男’); 插入空值 > insert into student (xh,xm,sex, birthday) values (‘A002’,’美男子’,’男’,null); 修改单个字段 > update student set xh =2where xm=‘方建康’; 修改多个字段 > update student set xh =2, sex=‘女' xm=‘方建康’; 删除数据 清空表数据 > delete from student; 写操作日志,可以使用rollback 可以恢复删除数据 或 > truncate table student 操作部写日志,无法找回删除的数据,但是速度非常快 删除表和所有数据 > drop table student 删除一条记录 > delete from student where xm=‘方建康’; 查询数据 查看表结构 > desc 表名; 查询取消重复行 > select distinct 查询字段 from 表名; nvl()函数说明 如果一个字段内容为null,参与运算就会出问题,这时可以使用nvl来判断是否为空,如果为空可以赋特定值 nvl(comm,0)*13 —>解决如果comm字段内容为null时,则给出0参与运算来乘以13操作 设置只读事务 如果用户在进行查询操作时,不想其他用户的操作影响到目前用户的查询,可以先设置只读事务,这样就可以保证 其他用户对数据的操作,影响不到该用户的查询结果了。 在做查询前,需要执行命令 > set transation read only; > 查询命令.... 游标的使用 declare type jk_emp_cursor is ref cursor; --定义游标类型 test_cursor jk_emp_cursor; --定义游标类型 v_ename emp.ename%type; --定义员工姓名变量 v_sal emp.sal%type; --定义员工工资变量 begin open test_cursor for select ename,sal from emp where deptno=&no; --游标和select结合查询 loop --遍历游标 fetch test_cursor into v_ename,v_sal; exit when test_cursor%notfound; --游标为空时退出遍历 dbms_output.put_line('名字:'||v_ename||' 薪水:'||v_sal);--打印内容 end loop; end; 过程及if判断(输入用户名称,判断工资,如果工资少于2000就加上10%) create or replace procedure jk_pro3(jiName varchar2) is v_sal emp.sal%type; --定义 begin select sal into v_sal from emp where ename=jiName; --查询 if v_sal<2000 then --判断 update emp set sal=sal*1.1 where ename=jiName; end if; end; 存储过程名称 参数使用in则表示输入参数 (默认不填写表示in),使用out则表示输出 如下,输入编号,返回名称: create or replace procedure ji_pro5(jkBookId in number,jkBookName out varchar2) is begin select bookName into jkBookName where bookId = jkBookId; end; 返回结果集的存储过程 --1.需要先创建一个包 create or replace package testpackage as --定义一个游标类型的包 testpackage type test_cursor is ref cursor; end testpackage; --2.创建存储过程 create or replace procedure jkpro8(jkNo in number,p_cursor out testpackage.test_cursor) is begin open p_cursor for select * from emp where deptno=jkNo; end; 分页SQL编写代码(返回6-10行记录) select * from (select t1.*,rownum rn from (select * from emp) t1 where rownum<=10) where rn>=6; 分页功能实现 --开发游标包 create or replace package testpackage as --定义一个游标类型的包 testpackage type test_cursor is ref cursor; end testpackage; --编写分页存储过程 create or replace procedure fenye (tableName in varchar2, pageSize in number, pageNow in number, myRows out number, --总记录 myPageCount out number,--总页数 pCursor out testpackage.test_cursor --返回的记录集 ) is --定义sql语句 v_sql varchar2(1000); --定义两个整数(使用公式计算出列出集合的开始和结束行号) v_begin number:=(pageNow-1)*pageSize+1; v_end number:=pageNow*pageSize; begin v_sql:='select * from (select t1.*,rownum rn from (select * from '||tableName||') t1 where rownum<='||v_end||') where rn>='||v_begin||';'; --把游标和sql语句关联 open pCursor for v_sql; --计算myRows和myPageCount v_sql := 'select cout(*) from '||tableName; execute immediate v_sql into myRows;--执行sql语言并把返回值赋值给myRows --计算myPageCount if mod(myRows,pageSize)=0 then myPageCount := myRows/pageSize; else myPageCount := myRows/pageSize+1; end if; close pCursor; --关闭游标 end; 创建视图方法 如: create view myview as select * from scott.emp where sal<1000;