oracle基础知识8_plsql_基本语法

0 说明:

a) 和java一样,是一种语言,不过后者是面向对象的,前者是面向过程的

b) 操作对象是数据库表

c) PL/SQL = Procedure Language/SQL,是oracle在sql语句中增加了过程处理语句 eg: 分支,循环

d) 效率很高,在oracle中操作数据库最快的语言就是plsql,对于实时性要求高的系统,建议将一些逻辑写成PLSQL,并让比如java等语言来直接调用

e) sql server中对sql功能扩展的是Transact-sql,类似于oracle的pl/sql功能

1 hello world:

set serveroutput on;
declare 
 begin
  dbms_output.put_line('hello zm');
 end;
/

说明: 
1默认情况下 oracle的输出开关是关闭的,因此需要开启 , 
2 / 表示退出并执行

执行结果如下:

hello zm
PL/SQL 过程已成功完成。

2 语法介绍:

a)变量和常量:

1 类型: char, varchar2,date,number,boolean,long

2 声明顺序:  name char(40);  married boolean :=true; money number(7,2);    :=表示赋值

3 赋值可以用 :=  也可以用 into

3 定义引用类型变量 pname  emp.ename%type; (定义变量pname,其类型和表emp的字段ename一致)

set serveroutput on

declare
--定义变量
pename emp.ename%type;
psal emp.sal%type;

begin
 -- 执行赋值语句
  select ename,sal into pename,psal from emp where empno = 7839;
  -- 打印变量结果
  dbms_output.put_line(pename ||'的薪水是'||psal);
end;
/


执行结果: KING的薪水是5000
4  定义引用类型变量---列记录,emp_rec emp%rowtype, 案例如下:
declare
  --记录型变量 代表一行记录
  emp_rec emp%rowtype;
begin
  -- 将emp表中empno=7839的所有列数据拷贝结构同时赋值给 emp_rec
  select * into emp_rec from emp where empno=7839;

  dbms_output.put_line(emp_rec.ename||'的编号是'||emp_rec.empno);
end;
/

结果: KING的编号是7839
  

 b)If 语句

格式:

IF 条件  THEN 语句1;
语句2;
END IF;

IF 条件  THEN 语句序列1;
ELSE 语句序列2;  // // 注意 elseif 在 plsql中写成 elsif 
END IF;

IF 条件  THEN 语句;
ELSIF 语句 THEN 语句;
END IF;

案例如下:

--判断用户输入的数字

set serveroutput on

--接收键盘输入
--num: 地址值,在该地址上,存了输入的值
accept num prompt '请输入一个数字';

declare
--定义变量保存输入的数字
--隐式转换 将键盘输入的字符串转变成我们需要的int 
-- &num 表示指针num对应内存的数值
pnum number := #

begin
   if pnum = 0 then dbms_output.put_line('您输入的是0');
    elsif pnum = 1 then dbms_output.put_line('您输入的是1');
    elsif pnum = 2 then dbms_output.put_line('您输入的是2');
    else dbms_output.put_line('其他数字');
  end if;
end;
/

输入4
结果:  其他数字

  c)循环 语句
格式如下:

while  total <= 10000
loop
 total := total + salary;
end loop;


loop
exit[when 条件]
...
end loop;



for i in 1..3
loop
...;
end loop;

案例如下:

--打印1~10

set serveroutput on

declare
  pnum number := 1;
begin
  loop
    --当符合pnum>10时,退出循环, 否则执行循环体内容
    exit when pnum > 10; 
    -- 循环体内容
    dbms_output.put_line(pnum);
    pnum := pnum + 1;
    -- 结束循环
  end loop;
end;
/

猜你喜欢

转载自chengjianxiaoxue.iteye.com/blog/2076657