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