PL-SQl语句笔记

--通过groupby实现
select e.deptno ,count(*) 部门人数 from emp e group by e.deptno
--通过字段作为自查询来实现
select dname ,(select count(*) from emp where emp.deptno=dept.deptno) 部门人数 from dept
--通过from后面作为自查询来实现
select * from emp where rownum<=2--查询前两条记录(只能跟<进行关联)
select * from (select * from emp order by sal desc) where  rownum<=2--查询工资最大的两个人的名字
--分页,希望每次页面显示的时候,都之查询需要的记录
select * from (select rownum as num,emp.* from emp) where num>=4 and num<=7



--PL-sql


--最简单的PL-SQl语句块
declare
emp_no number(3):=26;
ename VARCHAR2(20);
begin
  ename:='test';
  dbms_output.put_line(ename);
  dbms_output.put_line('触发器开始执行'||emp_no);
end;

declare
emo_no number(3):=20;--定义常量
ename varchar2(20);--定义变量
begin
    ename:='您好';--为变量赋值
    dbms_output.put_line(ename);
    dbms_output.put_line('值是'||emo_no);
end;



--如何使用查询语句(通过与into语句结合使用)
declare
deptno dept.deptno % TYPE;--定义常量
dname dept.dname % TYPE;--定义变量
begin
   select deptno,dname into deptno,dname  from dept where deptno=10 ;
    dbms_output.put_line(deptno);
    dbms_output.put_line(dname);
end;




--如何使用查询语句(作为游标的一部分使用使用)
DECLARE
cursor emp_cursor is
   select empno,ename from emp where deptno=10 ;
begin
 
    for emp in emp_cursor loop
    dbms_output.put_line('员工名:'||emp.ename||'    '||'员工号:'||emp.empno);
    end loop;
end;



--循环语句的使用
declare
x NUMBER:=0;
y NUMBER:=0;
BEGIN
for v in 1..10 loop
x:=x+10;
end loop;
y:=y+ x;
dbms_output.put_line(y);
end;
                                   

--异常
--自定义异常
declare
y number(3):=52;
myexception exception;--自定义异常名为myexception
begin
  if y not in (0,1,2,8) then
  raise myexception;--如果y不在(0,1,2,8)之中,就抛出异常
  end if;
EXCEPTION when  myexception then
  dbms_output.put_line('y不在0,1,2,8之中');
end;



--游标:PL-SQL处理多行数据的机制
--显式游标
declare
deptid NUMBER;
dname VARCHAR2(10);
cursor dept_cursor is
   select deptno,dname from dept  ;
begin
open dept_cursor;
fetch dept_cursor into deptid,dname;
WHILE dept_cursor%found loop
fetch dept_cursor into deptid,dname;
  dbms_output.put_line(deptid|| dname);
end loop;
close dept_cursor;
end;


--for光标,不需要打开和关闭游标,不需要定义变量

declare
cursor dept_cursor is
   select deptno,deptname from dept  ;
begin

for r in dept_cursor loop
  dbms_output.put_line(r.deptno||'    '|| r.deptname);
end loop;
end;


--存储过程
--
create or replace procedure add_dept(deptno NUMBER,deptname VARCHAR2,depttype VARCHAR2)
  is
begin
    insert into emp(deptno,deptname,depttype) values(deptno,deptname,depttype);
end;


--实现出入部门id打印部门名称   
create or replace procedure getdeptname(no NUMBER,dname out varchar2) is
begin
select deptname into dname from dept where deptno=no;
  dbms_output.put_line('名字是'||dname);
end;

--实现出入部门id打印部门人数

create or replace procedure getempcount(no NUMBER,dcount out number) is
begin
select count(*) into dcount from emp3 group by deptno having deptno=no;
  dbms_output.put_line('人数为是'||dcount);
end;
--执行存储过程
declare
dcount number(10);
begin
getempcount(2,dcount);
end;

select deptno, count(*)  from emp3 group by deptno having deptno=2;
--删除存储过程
drop procedure procedure_name;


--触发器
--当执行插入语句的时候,执行触发器,对id字段自加1
create table cls(
id number(2),
name varchar2(10));

create sequence seq0

CREATE OR REPLACE TRIGGER CLS_INSERT_LU
BEFORE INSERT ON CLS
FOR EACH ROW
BEGIN
  select seq0.nextval into :new.id from dual;
END;
--测试
insert into cls(name) values ('ka');
insert into cls(name) values ('java');
select * from cls
drop TRIGGER CLS_INSERT_LU

--函数
--
CREATE OR REPLACE
FUNCTION F
( cid IN NUMBER
) RETURN NUMBER AS
c1 NUMBER;
BEGIN
  select count(*) into c1 from emp3 where deptno=cid;
return c1;
 
END F;

--调用函数
select F(1) from dual



--包的使用
create package yy is
function x(cid number) return NUMBER;
procedure removeemp(did number);
end;

--定义包体
create or replace package  body yy is
--实现函数x
FUNCTION x
( cid  NUMBER
) RETURN NUMBER AS
c1 NUMBER;
BEGIN
  select count(*) into c1 from emp3 where deptno=cid;
return c1;
END x;
--实现存储过程removeemp
procedure removeemp(did number) is
begin
  delete from dept where deptno=did;
  end;

end;


--调用包中的函数
select yy.x(1) from dual;


--调用包中的存储过程
begin
yy.removeemp(2);
end;


select * from dept

你可能感兴趣的:(sql,F#)