oracle
的存储过程为目标了。oracle sql developer
。 百度百科中的定义是,存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的 PL/SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。
提示下,PL/SQL
可不是PL/SQL Developer
,前者是oracle
的一种结构性语言,后者只不过是一个工具,不要一听说要学PL/SQL
,就很吃惊的说学个工具有什么用?
这样的疑问,因为它们俩不过是名字差不多而已。
总之存储过程是一个SQL提供的一个非常优秀的功能,在工作中我们或多或少都会用到,学会存储过程绝对会让你受益匪浅。
hello word
的存储过程 对于我们来说,学习新的语言,一定要先学会它的hello word
打印语句,哈哈。
create or replace procedure test_procedure
AS
begin
dbms_output.put_line('hello word');
END;
执行之后,sql面板会出现:
PROCEDURE TEST_PROCEDURE 已编译
从上边的例子,我学习到了存储过程的名词是procedure
,创建存储过程的写法类似创建触发器
,打印语法是dbms_output.put_line()
。
另外BEGIN
、END
是成对出现,不区分大小写,as
不能省略。
因为我是用的oracle sql developer
,当编译成功
后,可以在下边位置,刷新后,看到你的第一个存储过程。这个与创建完触发器
、序列
一样,都能在相应的地方看到一样的结果。
既然创建完了存储过程
,那就是运行了,运行有如下的写法:
set serveroutput on; --oracle sql developer的话需要加这一行
begin
test_procedure;
end;
当然也可以这样执行:
set serveroutput on; --oracle sql developer的话需要加这一行
execute test_procedure;
如果你们用的是oracle sql developer
工具的话,不加set serveroutput on;
这一行,sql输出面板
一直会提示匿名块已完成
,加上,选中,直接运行,就可以了。
对于传入参数,就是在存储过程名
后边多加了括号,里边写明参数,如下边的写法一样,传入参数可以写为in
,如果没有加in
,则默认为传入参数。
写法如下:
-- create or replace procedure test_procedure(a int,b String)
-- create or replace procedure test_procedure(a int,b string)
-- create or replace procedure test_procedure(a number,b string)
create or replace procedure test_procedure(a in number,b in varchar)
AS
begin
--输出值的时候要加||
dbms_output.put_line('第一个存储过程a的值:' || a);
dbms_output.put_line('第一个存储过程b的值:' || b);
end;
就像java
里边的方法写法一样,在存储过程名
后边多加了括号,另外,发现以上四种写法都能通过编译,并正常执行。注意括号内,参数类型是写在后边。
执行语句如下:
set serveroutput on; --oracle sql developer的话需要加这一行
execute test_procedure(1,'凌大大');
下边这个是能从存储过程中获取到返回值的例子。b
作为输出参数,并在存储过程中对其赋值33
返回。
create or replace procedure test_procedure(a in number,b out varchar)
AS
begin
b:='33'; --这是赋值语句
dbms_output.put_line('第一个存储过程a的值:' || a); --输出值的时候要加||
end;
在oracle sql developer
中执行如下内容就可以输出33
。
set serveroutput on;
DECLARE
i varchar(10); --这里错误写成了varchar,忘了加长度
begin
test_procedure(1,i);
dbms_output.put_line(i);
end;
在调用传出参数的时候,发现必须要定义变量,即DECLARE i varchar(10)
,定义完变量后再传到存储过程
中,执行完存储过程后,这个i
上就会有执行后的值,接着再输出,即可看到结果。
上边这个把我给坑了,当时不管怎么执行都报错,后来找了个大神看了下,原来我上边i varchar(10)
,错误写成了i varchar
,没有定义长度,看来,存储过程在括号里边定义的时候,不需要加长度,但是在定义变量的时候,必须要有长度。
下一篇我觉得,该去了解下存储过程中有的变量。oracle存储过程—-变量的介绍及使用(PL/SQL)