JAVA执行sqlserver的匿名块_一、匿名块和命名块◆PL/SQL块分为良好总:命名块和匿名块。◆匿名块:以declare或begin开始,每次执行匿名块都要通过客户端工具将其发送给Ora...

一、匿名块和命名块

◆PL/SQL块分为良好总:命名块和匿名块。

◆匿名块:以declare或begin开始,每次执行匿名块都要通过客户端工具将其发送给Oracle,经过语法分析、编译然后执行。

◆命名块:具有名称的PL/SQL块,这些命名块被存储在Oracle中,编译一次,以后只可调用就可多次执行。如:存储过程、存储函数、包、触发器等、

存储过程:无返回值;

存储函数:有返回值;

包:可容纳多个过程或函数的一个容器(较好管理这些过程和函数,类似于java中的包);

触发器:在合适的实际被自动执行。(无需调用,在满足要求的情况下,自动执行;触发器也被称为隐式执行的命名块!)

◆匿名块和命名块的区别:

匿名块:能够动态地创建和执行过程代码的PL/SQL结构,每次执行匿名块时就会自动的将该块数据通过文本的形式发送给Oracle,然后执行,反馈给用户,每次执行都需发送和编译!

命名块:持久化的方式将代码作为数据库属性储存在系统目录中,在Oracle中编译一次,下次若使用可直接调用执行,无需再次编译,非常高效。

二、存储过程:

存储过程是具有名称、完整特定功能和无返回值的PL/SQL块,只需发送调用命令即可执行该过程,能够实现代码的重用,不能在SQL语句当中调用!

◆创建存储过程:

格式:create[or replace] procedure proc_name

[(para1[int|out|in out]type,...)]

{is|AS}

prdc_body

proc_name表示存储过程名;

para1表示参数名;type是参数para1的数据类型;

proc_body表示过程体.过程体是遵循PL/SQL块的结构,但不能使用declare关键字,end后面可带有过程名。

注意:参数列表是可选的

◆调用存储过程:(存储过程创建的时候会自动的保存在Oracle中,在执行储存过程的时候,PL/SQL块只需调用即可!)

(1)如果在PL/SQL块中调用,直接使用proc_name(...);

(2)如果使用sql plus环境中,需要使用 EXEC proc_name(...)的形式;

(3)如果存储过程无参数,这调用时可带有圆括号也可不带!

【示例】创建一个无参数的存储过程(显示所有员工的信息)

create or replace procedure pr_show_employee

is

--进入块的声明部分(无需编写declare关键字)

--定义游标

cursor v_emp_cursor is select * from employees;

--定义游标类型的记录型行变量

v_emp_record v_emp_cursor%rowtype;

begin

for v_emp_record in v_emp_cursor loop

dbms_output.put_line(v_emp_record.employee_id||','||v_emp_record.first_name||','||

v_emp_record.last_name||','||v_emp_record.salary);

end loop;

end pr_show_employee ;

--调用存储过程(在一个匿名块中执行)

begin

pr_show_employee();

end;

【示例】存储过程的参数接受产品类别编号,输出该类所有产品的信息

create or replace procedure pr_show_product(

product_type products.product_type_id%type)

as

--定义游标

cursor v_prd_cursor is select * from products p where product_type = p.product_type_id;

--定义游标的行类型变量

v_prd_record v_prd_cursor%rowtype;

begin

for v_prd_record in v_prd_cursor loop

dbms_output.put_line(v_prd_record.product_id||','||v_prd_record||','||product_type_id||','||v_prd_record.description||','

||v_prd_record.

name||','||v_prd_record.price);

end loop;

end pr_show_product;

--调用存储过程(执行)

declare

--定义编号变量的类型

v_prd_type_id products.product_type_id%type := 1;

begin

pr_show_product(v_prd_type_id);

end;

◆参数的传递模式:

参数传递有三种模式:in、out、in out

in:过程调用时,实参的值会传递给形参。形参被看作是常量,在过程内部不能被修改。

out:过程调用时,实参的值被忽略,形参为null值,在过程内部形参变量可以读写。过程结束时,形参的值赋值给实参!

in out:过程调用时,实参的值传递给形参,在过程内部形参变量可读可写,过程结束时,形参的值赋值给实参。

注意:如果在定义存储过程时,没有指明参数传递模式,则默认为 in 模式

【示例】创建一个有参数传递默认的存储过程

create or replace procedure pr_test(p_1 in out varchar2)

is

begin

dbms_output.put_line('p_1='||p_1);

p_1 := 'abc';

dbms_output.put_line('p_1='||p_1);

end pr_test;

--调用存储过程

declare

v_1 varchar2(5) := 'wwww';

begin

pr_test(v_1);

dbms_output.put_line('v_1='||v_1);

end;

注意:(1)在创建存储过程时,形参类型不能指定具体的长度,字符类型就为 varchar2,数字类型就是number;默认和实参类型的长度等同

(2)使用 in 模式,形参接受实参的值,默认形参为常量,在存储过程当中不能被修改,否则出错!

(3)使用 out 模式,实参的值被忽略,但必须是变量,用来接收存储过程执行完形参的值;而形参是可读可写的。

(4)使用 in out 模式,实参的值传递给形参,也必须是变量,形参可读可写,最后执行完存储过程形参的值传递给实参!

(5)参数传递,实参的值和长度或精度约束会传递给形参,因此,形参不能有长度或精度的约束。在过程中给形参赋值时,要注意它的长度或精度的限制!

感谢 阅读,希望能帮助到大家,谢谢大家对本站的支持!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值