PL/SQL(Procedure Language/SQL)是 Oracle 对 sql 语言的过程化扩展,指 在 SQL 命令语言中增加了过程处理语句(如分支、循环等),使 SQL 语言具有 过程处理能力。把 SQL 语言的数据操纵能力与过程语言的数据处理能力结合起 来,使得 PLSQL 面向过程但比过程语言简单、高效、灵活和实用。
也就是说加入了类似简单的筛选功能,
基本语法结构
declare --声明变量
begin --代码逻辑
exception --异常处理
end; --封号在这是必须的
eg:
需求: 声明变量水费单价、水费字数、吨数、金额。 对水费单价、字数、进行赋值 。吨数根据水费字数换算,规则为水费字数除以 1000,并且四舍五入,保留两位小数。计算金额,金额=单价*吨数。 输出单价 、数量和金额。
--变量的用法--
declare
v_price number(10,2); --水费单价 (10,2)精度是10,规定小数点后2位
v_usenum number; --水费字数
v_usenum2 number(10,2); --吨数
v_money number(10,2); --金额
begin
v_price:= 2.45; --赋值语句,(:=赋值符号)水费单价
v_usenum:= 345; --字数
v_usenum2:=round(v_usenum/1000,2);--字数换算为吨数 round四舍五入 精度为小数点后2位
v_money:=v_price * v_usenum; --计算金额
dbms_output.put_line('金额:'||v_money);--输出语句 put_line是存储包 解释文字后要加入管道符号连接
end;
select into 赋值
declare
v_price number(10,2);--单价
v_usenum number;--水费字数
v_num0 number;--上月字数
v_num1 number;--本月字数
v_usenum2 number(10,2);--使用吨数
v_money number(10,2);--水费金额
begin
--对单价进行赋值
v_price:=3.45;
--变量赋值
select usenum,num0,num1 into v_usenum,V_num0,V_num1 from
T_ACCOUNT
where year='2012' and month='01' and owneruuid=1;
v_usenum2:= round(v_usenum/1000,2);
v_money:=v_price*v_usenum2;
DBMS_OUTPUT.put_line('单价:'||v_price||'吨数:'
||v_usenum2||'金额:'||v_money||'上月字数:'||v_num0||'本月
字数'||v_num1);
end;
将字数赋值更改为查询,
但是输出时发生了
这是因为结果必须是一条记录 ,有多条记录和没有记录都会报错
这里就是有一条表没有插入数据
如果定义的表的某条属性害怕定义的类型与原表的属性类型不一样那么就可以使用引用型
格式为 表明.列名%type
v_usenum T_ACCOUNT.USENUM%TYPE;
另一种为记录型,从数据库中提取多个属性时,可以使用记录型来替代。
语法 表名%rowtype
v_account T_ACCOUNT%ROWTYPE;-select * into v_account from T_ACCOUNT -记录型