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;
/