pl/sql块(变量、注释、嵌套块)

dbms_output.put_line想要输出必须设置为on才能在控制台输出:
set serveroutput on;

一。pl/sql语句块:

1.语法:

DECLARE	--可选项
	定义变量、游标、用户异常
BEGIN	--必须的
	--sql语句
	pl/sql语句
EXCEPTION	--可选
	当发生错误时的处理动作
END;	--必须的

2.例子:

DECLARE
	v_ename varchar2(10);
BEGIN
	select ename
	into v_ename 
	from emp
	where empno=7788;
	dbms_output.put_line('员工号为7788的名字是'|| v_ename);
END;

注意:
dbms_output.put_line();需要set serveroutput on支持。

3.变量:

在声明部分声明和创建变量;
在可执行部分为变量赋值,通过参数为pl/sql块传值;
通过输出变量查看结果;

①.变量类型:

pl/sql变量: 标量 、复合变量 、参考变量 、LOB(大对象)
非pl/sal变量: Bind 、 host

②.声明变量

Declare
	v_hiredate DATE;
	v_deptno number(2) not null :=10;
	v_location varchar2(13) :='北京';
	c_comm constant number :=1000;

其中,
constant表示程序运行不能改变他修饰的值。
也可以用default代替(:=)
通常用(v_列名)来声明某一列。
一行声明一个变量。

③.使用%type属性声明变量

v_name emp.ename%type;
v_banlance number(7,2);
v_min_banlance v_banlance%type :=10;

用%type会更灵活,但是牺牲的是性能。

④.给变量赋值:

v_hiredate :='31-DEC-19';
v_deptno :=20;

⑤绑定变量
在declare外面声明的变量。
如果要引用一个绑定变量,必须加一个冒号前缀。

variable g_salary number
declare
	v_sal emp.sal%type;
begin
	select sal
	into v_sal
	from emp
	where empno=7369;
	:g_salary :=v_sal;
end;

4.注释:

单行注释用”–“
多行注释用”/* … */“

5.块的嵌套及作用域

DECLARE 
	v_weight number(3) :=600;
	v_message varchar2(255) :='product 2019';
	v_new_locn varchar2(50) :='CHINA';
BEGIN
	DECLARE
		v_weight number(3) :=1;
		v_message varchar2(255) :='product 2010';
	BEGIN
		v_weight :=v_weight+1;
		v_new_locn :='Western ' || v_new_locn ;
		dbms_output.put_line('v_weight 的值:' || v_weight );
		dbms_output.put_line('v_new_locn  的值:' || v_new_locn  );
	END;
	v_weight :=v_weight+1;
	v_new_locn :='china ' || v_new_locn ;
	dbms_output.put_line('v_weight   的值:' || v_weight  );
	dbms_output.put_line('v_new_locn  的值:' || v_new_locn  );
	dbms_output.put_line('v_message   的值:' || v_message   );

END;

输出为:
v_weight 的值:2
v_new_locn 的值:Western CHINA
v_weight 的值:601
v_new_locn 的值:china Western CHINA
v_message 的值:product 2

二。pl/sql语句块中的SQL

使用select语句可以取出数据行,但只能返回一行数据。如果要返回多条数据,要用游标。
使用DML语句修改数据库的行。
使用commit、rollback或者savepoint语句来控制事务。
使用隐式游标检验DML语句的输出。

1.DML语句:

就是把SQL语句写在begin和end块中。

declare
	v_sal emp.sal%type;
begin
	select sal
	into v_sal
	from emp
	where empno=7369;
end;

2.事务控制

一个事务以commit和rollback开始,用来初始化一个新的事务。
一个事务以commit和rollback结束。

三。练习

1.写一个pl/sql块,从dept表中找出最大的部门号,并保存到SQL plus变量中。打印出变量的值。

var G_max_deptno number
begin
	select max(deptno) 
	into :G_max_deptno
	from dept;
end;
/
print G_max_deptno

2.写一个pl/sql块,修改现在部门的位置。要求:客户输入需要修改的部门号,然后在输入新的部门地址。并显示出来修改后的信息。

declare 
	v_deptno dept.deptno%type;
	v_dept_loc dept.loc%type;
begin
	v_deptno :=&deptno;
	v_dept_loc :='&localtion'; 
	update dept set loc =v_dept_loc  where deptno=v_deptno ;
	select deptno, loc into v_deptno ,v_dept_loc  from dept where deptno=v_deptno ;
	dbms_output.put_line('部门:' || v_deptno ||  '修改后的地址:' || v_dept_loc  );
end;
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值