oracle 5:索引,plsq编程,语法分支

索引:提升查找数据的效率

    用于提升数据查找效率的一个数据库对象

索引的创建对应着表中的列

--手动创建索引,给ename创建。说明:经常使用enmae做条件
create index emp_name
on emp(ename)

创建索引的原则:

(1)经常用于where字句或作为连接条件的列

(2)所含数值范围比较大的列

(3)含有大量空值得列

(4)表比较大,但大部分查询返回的结果集小于总记录的2-4%

不需要创建索引:

(1)表很小

(2)很少在查询中出现的列

(3)查询结果大于表的2-4%

(4)频繁更新的表

plsq 编程:

例如:删除表中的数据,有条件删除。有两种方式

  (1)在java程序中编写delete语句,把删除语句发送到数据库执行

  (2)数据库直接写删除语句——函数deleteEmp

      在java程序中,调用删除函数即可

例:

--plsq函数
declare
v_ename varchar2(10) := '皮皮虾';
v_eno number(5,0);
begin
  v_eno := 7878;
  dbms_output.put_line(v_ename || '的编号是:' || v_eno);
end;

NVL(列,0),当指定的列为空时,用0替代

通过查询的方式赋值

--查询赋值
declare 
emp_id emp.empno%type;
emp_name emp.ename%type;
emp_wage emp.sal%type;
begin
  emp_id := 7788;
  select ename,nvl(sal,0)+nvl(emp.comm,0) into emp_name,emp_wage
  from emp
  where empno=emp_id;
  dbms_output.put_line('姓名是: '||emp_name ||' '||'总薪资是: '||emp_wage);
  end;
输出、
姓名是: SCOTT 总薪资是: 3000

根据提示框插入数据

--提示框插入数据
declare
v_deptno dept1.deptno%type;
v_dname dept1.dname%type;
v_local dept1.loc%type;
begin
  v_deptno := &deno;
  v_dname := '&name';
  v_local := '&loc';
  insert into dept1 values(v_deptno,v_dname,v_local);
  end;

复制一条或多条数据到另一个表

--赋值一条数据到另一个表
declare
emp_no emp.empno%type := &eno;
begin
  insert into emp1 select * from emp
  where emp.empno = emp_no;
end;

---恢复内容结束---

---恢复内容开始---

索引:提升查找数据的效率

    用于提升数据查找效率的一个数据库对象

索引的创建对应着表中的列

--手动创建索引,给ename创建。说明:经常使用enmae做条件
create index emp_name
on emp(ename)

创建索引的原则:

(1)经常用于where字句或作为连接条件的列

(2)所含数值范围比较大的列

(3)含有大量空值得列

(4)表比较大,但大部分查询返回的结果集小于总记录的2-4%

不需要创建索引:

(1)表很小

(2)很少在查询中出现的列

(3)查询结果大于表的2-4%

(4)频繁更新的表

plsq 编程:

例如:删除表中的数据,有条件删除。有两种方式

  (1)在java程序中编写delete语句,把删除语句发送到数据库执行

  (2)数据库直接写删除语句——函数deleteEmp

      在java程序中,调用删除函数即可

例:

--plsq函数
declare
v_ename varchar2(10) := '皮皮虾';
v_eno number(5,0);
begin
  v_eno := 7878;
  dbms_output.put_line(v_ename || '的编号是:' || v_eno);
end;

NVL(列,0),当指定的列为空时,用0替代

通过查询的方式赋值

--查询赋值
declare 
emp_id emp.empno%type;
emp_name emp.ename%type;
emp_wage emp.sal%type;
begin
  emp_id := 7788;
  select ename,nvl(sal,0)+nvl(emp.comm,0) into emp_name,emp_wage
  from emp
  where empno=emp_id;
  dbms_output.put_line('姓名是: '||emp_name ||' '||'总薪资是: '||emp_wage);
  end;
输出、
姓名是: SCOTT 总薪资是: 3000

根据提示框插入数据

--提示框插入数据
declare
v_deptno dept1.deptno%type;
v_dname dept1.dname%type;
v_local dept1.loc%type;
begin
  v_deptno := &deno;
  v_dname := '&name';
  v_local := '&loc';
  insert into dept1 values(v_deptno,v_dname,v_local);
  end;

复制一条或多条数据到另一个表

--赋值一条数据到另一个表
declare
emp_no emp.empno%type := &eno;
begin
  insert into emp1 select * from emp
  where emp.empno = emp_no;
end;

if分支判断

语法1:

            IF   条件  THEN 语句1;

       语句2;

       END IF;

语法2:

            IF  条件  THEN  语句序列1;  

       ELSE   语句序列 2

       END   IF

语法3:

IF   条件  THEN 语句;

ELSIF  语句  THEN  语句;

ELSE  语句;

END  IF;

--输入员工编号,输出此人的薪资,与平均工资的比较结果
declare
emp2_no emp2.empno%type := &eno;
emp2_avgsal emp2.sal%type;
emp2_sal emp2.sal%type;
begin
  --得到平均工资
  select avg(sal) into emp2_avgsal
  from emp2;
  --得到这个人的工资
  select sal into emp2_sal
  from emp2
  where emp2.empno  = emp2_no;
  if emp2_avgsal < emp2_sal then
    dbms_output.put_line('低于平均工资');
  else
    dbms_output.put_line('高于平均工资');
    end if;
  end;

 case then 语法

--输出每个人的名字。薪资,薪资级别   查询语句
select emp.ename,emp.sal,
  case
    when emp.sal < 1500 then ''
    when emp.sal >1500 and emp.sal < 3000  then ''
    when emp.sal > 3000 then ''
  end case  
from emp;
--输入一个人的编号,输出薪资级别
declare
emp_no emp.empno%type := &empno;
emp_sal emp.sal%type;
begin
  --查询这个人的工资
  select sal into emp_sal
  from emp
  where emp.empno = emp_no;
  case
    when emp_sal < 1500 then
      dbms_output.put_line('');
    when emp_sal > 1500 and emp_sal < 3000 then
      dbms_output.put_line('');
    else
      dbms_output.put_line('');
  end case;
end;

Loop 语法

语法1:

--loop循环
declare
 var_sal emp.sal%type;
 begin
   var_sal := 1;
   loop
     if var_sal > 200 then exit;
     end if;
     var_sal := var_sal +5;
     end loop;
     dbms_output.put_line(var_sal);
     end;
       

语法2:

输出1——100的和

declare 
var_num number := 1;
var_sum number := 0;
begin
  while var_num <= 100 loop
    var_sum := var_sum + var_num;
    var_num := var_num+1;
    end loop;
    dbms_output.put_line(var_sum);
end;

语法3:for循环

declare
 var_sum number := 0;
begin
  for i in 1..100 loop
    var_sum := var_sum + i;
    end loop;
    dbms_output.put_line(var_sum);
    end;
原文地址:https://www.cnblogs.com/miaomeng/p/8919587.html