plsql 基础教程(一)

L/SQL

一、PLSQL 变量

set serveroutput on;

declare v_num number :=0;--变量名一般以v开头

begin

    v_num:=2/v_num; --这句因为除数为0会报错。

    dbms_output.put_line(v_num);  

end;

/

异常处理:

set serveroutput on;

declare v_num number :=0;

begin

    v_num:=2/v_num;

    dbms_output.put_line(v_num);

    exception

    when others then

    dbms_output.put_line('错误');

end;

/

 变量类型

 binary_integer: 整数,主要用来计数而不是用来表示字段类型

 number 数字类型

 char 定长字符串

 varchar2 变长字符串

 date 日期

 long 长字符串,最长2G

 boolean 布尔类型,可以取值为true,false ,和null。

声明变量:

 set serveroutput on;

declare v_num number :=0;

  v_bl boolean :=false;

begin

    dbms_output.put_line('s');

end;

/

注意:declare 放在变量声明的最前面,无论声明多少个变量仅可放一个declare

     boolean 类型的变量是不能通过dbms_output.put_line()打印出来的。

得到表中字段类型

%type

set serveroutput on;

declare v_num number :=0;

  v_blnum v_num%type := v_num;

begin

    dbms_output.put_line(v_blnum);

end;

/

Record 类型:

set serveroutput on;

declare type type_record is record

(

    name1 varchar(20),

    age number

);

v_type_record type_record;

 

begin

    v_type_record.name1:='nihaoname';

    v_type_record.age:=23;

    dbms_output.put_line(v_type_record.name1||' '||v_type_record.age);

end;

/

使用%rowtype声明record 变量(将对应表的所有类型作为该变量的成员)

set serveroutput on;

declare

 v_school school%rowtype;

begin

    v_school.name1:='nama';

    v_school.age:='age';

    dbms_output.put_line(v_school.name1||v_school.age);

end;

二、PL/SQL中的sql

1.       Insert 语句

Insert 语句必须要有返回值且只有一条返回。

Insert 语句中必须有into 将查到的数据放入到对应的变量中。注意into两边的值的个数要相同。

Into 后可以传入一个record类型的变量,用于将查询出来的值放入到该变量中。

set serveroutput on;

declare

v_school  school%rowtype;

begin

    select name1 ,age into v_school from school;

    dbms_output.put_line(v_school.name1);

end;

/

2.       Update 语句

sql%rowcount 得到刚刚执行sql影响的行数。

set serveroutput on;

declare

v_school  school%rowtype;

begin

     update school set name1='tes2t' where name1='s' ;

    dbms_output.put_line(sql%rowcount||'ss');

    commit;

end;

/

3.       执行DDL 语句

在pl/sql 中执行sql语句方法

三、判断语句

set serveroutput on;

declare

v_num number(20) :=1399;

begin

    if (v_num <1200) then

    dbms_output.put_line('low');

    elsif(v_num<1800) then

    dbms_output.put_line('middle');

    else

    dbms_output.put_line('high');

    end if;

end;

/

四、循环

set serveroutput on;

declare

i number(20) :=1;

begin

    loop

    dbms_output.put_line('nihao'||i);

    i:=i+1;

    exit when (i>=5);

    end loop;

end;

/

set serveroutput on;

declare

i number(20) :=1;

begin

    while (i<=5) loop

    dbms_output.put_line('nihao'||i);

    i:=i+1;

    end loop;

end;

/

正序for循环

set serveroutput on;

declare

i number(20) :=1;

begin

   for a in 1..9 loop

    dbms_output.put_line(a);

    end loop;

end;

/

反序for循环

begin

   for a in reverse 1..9 loop

    dbms_output.put_line(a);

    end loop;

end;

/

注意:无论是正序还是反序for循环 循环的数字必须是从小到大排列如1..9

五、 错误处理

set serveroutput on;

declare

i number(20) :=1;

v_name varchar(20) :='';

begin

    select name1 into v_name from school where name1='ss';

    exception

    when no_data_found then

    dbms_output.put_line('没有数据');

    when others then

    begin

        dbms_output.put_line('未知错误');

    end;

end;

/

SQLCODE SQLERRM 关键字代表出错代码和出错信息。

set serveroutput on;

declare

i number(20) :=1;

v_name varchar(20) :='';

begin

    select name1 into v_name from school where name1='ss';

    exception

    when no_data_found then

    dbms_output.put_line('没有数据'||SQLERRM || SQLCODE);

    when others then

    begin

        dbms_output.put_line('未知错误');

    end;

end;

/

 
 
原文地址:https://www.cnblogs.com/sangmu/p/6819193.html