代码改变世界

(Oracle)PL SQL的相关知识与实例

2011-11-19 21:36  java线程例子  阅读(222)  评论(0编辑  收藏  举报

PLSQL 知识

其实要写的不多,在后面的实例中都有

3种输出格式

<1>dbms_output.put(字符串表达式);       输出字符串,不换行

<2>dbms_output.put_line(字符串表达式);   输出字符串,换行

<3>dbms_output.new_line;                换行

PLSQL 实例

实例1

在emp表中查询empno=7788的雇员姓名和工资

set serveroutput on

declare

  v_ename emp.ename%type;

  v_sal  emp.sal%type;

begin

  select ename,sal into v_ename,v_sal from empwhere empno=7788;

  dbms_output.put_line(v_ename||'****'||v_sal);

end;

实例2

变量的定义和初始化

set serveroutput on

declare

  v_job varchar2(10);

  v_count binary_integer default 0;

  v_total_sal number(10,2) :=0;

  v_date date :=sysdate;

  v_tax constant number(3,2) :=5.25;

begin

  v_job:='MANAGER';

  dbms_output.put_line(v_job);

  dbms_output.put_line(v_count);

  dbms_output.put_line(v_total_sal);

  dbms_output.put_line(v_date);

  dbms_output.put_line(v_tax);

end;

实例3

结合变量的定义和使用

第一步

variableg_char varchar2(100)      --定义结合变量g_char ,并执行

第二步

set serveroutput on

begin

  :g_char:=:g_char||'Hello~';       --调用g_char时g_char前要加':'

dbms_output.put_line(:g_char);

end;

第三步

printg_char                      --程序结束后用print命令显示结合变量g_char的内容

实例4

记录变量的使用

在emp表中查询empno=7788的雇员姓名

set serveroutput on

declare

  emp_record emp%rowtype;

begin

  select * into emp_record from emp whereempno=7788;

  dbms_output.put_line(emp_record.ename);

end;

实例5

TABLE变量的使用

set serveroutput on

declare

  type xingqi_table is table of varchar2(10)index by binary_integer;  --声明xingqi_table类型

  v_xingqi xingqi_table;               --定义变量v_xingqi

begin

  v_xingqi(1):='MONDAY';

  v_xingqi(2):='TUESDAY';

  v_xingqi(3):='WEDNESDAY';

  v_xingqi(4):='THURSDAY';

  v_xingqi(5):='FRIDAY';

  v_xingqi(6):='SATURDAY';

  v_xingqi(7):='SUNDAY';

  dbms_output.put_line(v_xingqi(7));

end;

实例6

if-then-end if 的用法

判断70度的水是否烧开

set serveroutput on

declare

  v_temprature number(5):=70;

begin

  if v_temprature<100 then

    dbms_output.put_line('水还没有烧开!');

  end if;

end;

实例7

if-then-else-end if 的用法

判断100度的水是否烧开

set serveroutput on

declare

  v_temprature number(5):=100;

begin

  if v_temprature<100 then

    dbms_output.put_line('水还没有烧开!');

  else

    dbms_output.put_line('水开了!');

  end if;

end;

实例8

if-then-elsif then-else-end if 的用法

判断薪水为7000的人的收入状况

set serveroutput on

declare

  v_salary number(10);

begin

  v_salary:=7000;

  if v_salary<=1500 then

    dbms_output.put_line('您属于低收入群体!');

  elsif v_salary<10000 then

    dbms_output.put_line('您属于中等收入群体!');

  else

    dbms_output.put_line('您属于高收入群体!');

  end if;

end;

实例9

case的用法

判断80分的成绩等级

set serveroutput on

declare

  v_score number(3);

begin

  v_score:=80;

  case

    when v_score>=90 then

        dbms_output.put_line('恭喜,您得了优秀!');

    when v_score>=80 then

        dbms_output.put_line('恭喜,您得了良好!');

    when v_score>=60 then

        dbms_output.put_line('您得了一般,加油奥!');

    else

        dbms_output.put_line('您不及格,要下工夫啊!');

  end case;

end;

实例10

基本loop的用法

求 1、3、5 ……13、15的平方和

set serveroutput on

declare

  v_total number(10) :=0;

  v_i number(2):=1;

begin

  loop

    exit when v_i>15;

    v_total:=v_total+v_i**2;

    v_i:=v_i+2;

  end loop;

  dbms_output.put_line(v_total);

end;

实例11

for loop 的用法

set serveroutput on

begin

  for i in 1..10

  loop

   dbms_output.put_line(to_char(i)||rpad('*',i,'*'));

  end loop;

end;

实例12

while loop 的用法

求10!的值

set serveroutput on

declare

  v_total number(10):=1;

  v_i    number(2):=1;

begin

  while v_i<=10 loop

    v_total:=v_total*v_i;

    v_i:=v_i+1;

  end loop;

  dbms_output.put_line(v_total);

end;

实例13

双重循环

求 1!+2!+……+10!的值

set serveroutput on

declare

  v_total number(10):=1;

  v_i    number(2):=1;

  v_sum number(10):=0;

begin

  for i in 1..10

  loop

    while v_i<=i loop

      v_total:=v_total*v_i;

      v_i:=v_i+1;

    end loop;

    v_sum:=v_sum+v_total;

  end loop;

  dbms_output.put_line(v_sum);

end;