plsql块(变量、注释、嵌套块)

    xiaoxiao2022-07-14  148

    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)