标签:des blog http io os 使用 ar strong for
看到一个关于Oracle系列文章,基本集中在一些基础知识的汇总。 比较适合新员工培训和知识汇总回顾。记录之前不了解或者不确定的知识
http://my.oschina.net/KingPan/blog?catalog=504011
1、得到序列的下一个值或当前值
select your_sequence.nextval from dual;--获得序列your_sequence的下一个值 select your_sequence.currval from dual;--获得序列your_sequence的当前值
--创建用户给其一个密码(必须给其一个密码) create user king IDENTIFIED by king; --创建的新用户要给其权限 grant connect to king; grant resource to king; --给用户scott解锁 alter user scott account unlock ; --把用户锁住 alter user scott account lock; --给用户scott修改密码 alter user scott IDENTIFIED by tarena123;
1. 定义同义词 --定义一个公有的别名 scott.emp ----> emp create orreplace synonym emp for scott.emp; 2.删除同义词: drop synonym table_name; 3.查看所有同义词: select * from dba_synonyms;
-- 表操作的权限 grant select on emp to jsd1404; -- 表操作收回权限 revoke select on emp from jsd1404; -- 对用户操作的权限: grant connect to king;--给用户授予连接的权限 grant resource to king;--给用户king授予 所有资源的权限 -- 对存储过程的权限: grant create procedure to jsd1404;--授予创建存储过程的权限 grant execute procedure_name to jsd1404;--授予执行某个存储过程的权限 --对表空间操作的权限: grant create tablespace to jsd1404; --授予可以创建tablespace 的权限 grant alter tablespace to jsd1404;--授予可以修改tablespace 的权限
3、decode case..when
-- decode , select id, decode(sex,1,‘男‘,2,‘女‘,‘未知‘) from t1; -- case when select id, case sex when 1 then ‘男‘ when 2 then ‘女‘ else ‘未知‘ end from t1;
4、table的管理
-- 修改表 create table king_test( c1 number(4), c2 number(7,-2) ); --增加列 alter table king_test add c3 number(5); --修改列 alter table king_test modify c3 varchar2(10); --删除列 alter table king_test drop column c3; -- 删表 drop table [表名] ;--删除表,表放在回收站 drop table [表名] purge; --删除表,不放入回收站 drop table [表名] cascade constraints/constraint; 删除级联表,不受级联约束 -- 闪回(回滚) FLASHBACK TABLE [表名] TO BEFORE DROP;
5、ROW_NUMBER()
例如:请用一条sql语句查询出scott.emp表中每个部门工资前三位的数据
SELECT DEPTNO,
MAX(SAL) 第一名,
MAX(DECODE(T, 2, SAL)) 第二名,
MIN(SAL) 第三名
FROM (SELECT SAL, DEPTNO, T
FROM (SELECT EMPNO,
ENAME,
SAL,
ROW_NUMBER() OVER(PARTITION BY DEPTNO ORDER BY SAL DESC) T,
DEPTNO
FROM EMP) E
WHERE E.T <= 3)
GROUP BY DEPTNO;
6、%type、record
-- type
declare
c_ename constant varchar2(50):=‘KING‘;
v_job emp.job%type;
-----------------------------------------------
--备注:通过雇员姓名查找雇员的职称
-----------------------------------------------
begin
select job into v_job from emp where ename=c_ename;
dbms_output.put_line(‘雇员‘||c_ename||‘的职称为:‘||v_job);
end;
-- record(记录类型)
declare
type emp_record is record(
job emp.job%type,--职称
deptno emp.deptno%type --部门编号, 多个用, 隔开
); -- 定义record类型
v_emp_record emp_record; --定义一个record类型的变量
begin
select job,deptno into v_emp_record from emp where empno=7788;
dbms_output.put_line(‘雇员职称:‘||v_emp_record.job||‘雇员部门编号:‘||v_emp_record.deptno);
end;
7、使用BULK COLLECT 和FOR 语句的游标
declare
cursor emp_cursor is select * from emp;
type emp_tab is table of emp%rowtype;
v_emp_tab emp_tab;
begin
open emp_cursor;--打开游标
loop
fetch emp_cursor bulk collect into v_emp_tab limit 5;--使用limit显示一次取得记录数
for i in 1 .. v_emp_tab.count loop
dbms_output.put_line(‘雇员编号:‘||v_emp_tab(i).empno||‘,雇员姓名:‘||v_emp_tab(i).ename);
end loop;
exit when emp_cursor%notfound;
end loop;
end;
7、异常
declare
c_deptno number:=10;--一个不存在的员工编号
v_name emp.ename%type;--员工姓名
begin
select ename into v_name from emp where deptno=c_deptno;
exception
when too_many_rows then
dbms_output.put_line(‘期望返回一条记录,实际返回多条记录‘);
when no_data_found then
dbms_output.put_line(‘不存在雇员编号为:‘||c_empno||‘的雇员‘);
end;
8、函数
-- nvl函数:
create or replace function my_nvl(val object,val2 object)
return object
is
begin
if val is null then
return val2;
else
return val;
end if;
end;
-- 查看函数或存储过程的脚本:
select name,line,text from user_source where name=upper(‘函数或存储过程的名称‘);
9、包PACKAGE
1、包分公有、私有
2、子程序的重载
CREATE OR REPLACE PACKAGE demo_pack1
IS
DeptRec dept%ROWTYPE;
FUNCTION query_dept(dept_no IN NUMBER)
RETURN INTEGER;
FUNCTION query_dept(dept_no IN VARCHAR2)
RETURN INTEGER;
END demo_pack1;
注意1:如果两个子程序的参数只是名称和方式不同时,不能重载他们。
例:PROCEDURE OverlodeMe(P_parameter in number)
PROCEDURE OverlodeMe(P_parameter out number)
注意2:不能只根据两个函数的返回类型进行重载
例:FUNCTION Overlodeme RETURN date
FUNCTION Overlodeme RETURN boolean
10、触发器
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER }
{INSERT | DELETE | UPDATE [OF column [, column …]]}
[OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...]
ON [schema.]table_name | [schema.]view_name
[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]
[FOR EACH ROW ]
[WHEN condition]
PL/SQL_BLOCK | CALL procedure_name;
-- 例如
CREATE OR REPLACE TRIGGER TR_DEL_EMP
BEFORE DELETE --指定触发时机为删除操作前触发
ON SCOTT.EMP
FOR EACH ROW --说明创建的是行级触发器
BEGIN
--将修改前数据插入到日志记录表 emp_his ,以供监督使用。
INSERT INTO EMP_HIS
(DEPTNO, EMPNO, ENAME, JOB, MGR, SAL, COMM, HIREDATE)
VALUES
(:OLD.DEPTNO,
:OLD.EMPNO,
:OLD.ENAME,
:OLD.JOB,
:OLD.MGR,
:OLD.SAL,
:OLD.COMM,
:OLD.HIREDATE);
END;
标签:des blog http io os 使用 ar strong for
原文地址:http://www.cnblogs.com/illday/p/3968620.html