存储过程与函数

来源:互联网 发布:千方百计医药软件 编辑:程序博客网 时间:2024/05/20 10:12

存储过程:没有直接返回值,主要用于执行操作。

① 创建语法
CREATE [OR REPLACE] PROCEDURE procedure_name [(parameter_name [IN | OUT | IN OUT] type [, ...])]{IS | AS}BEGIN < procedure_body >END;/

② is与as有什么区别?
- 在存储过程与函数中,is与as没有任何区别
- 在视图中只能用as,在游标中只能用is

③ 创建存储过程的一些小细节
- 无参存储过程定义时存储过程名后面一定不能加括号!!!报错:Warning: Function created with compilation errors
- 无参存储过程调用时可以加括号也可以不用加,可以通过PL/SQL调用,也可以通过execute关键字调用
- 有参存储过程的参数类型一定不能指定精度!!!否则报错:Warning: Procedure created with compilation errors
- 利用  表名.字段%type   可以取到表中某个字段的具体类型,方便给我们声明的变量时设置它的类型 如 price page_books.price%type;
利用PL/SQL DEVELOPER工具执行存储过程时,如果存储过程中有输出内容想要看到,必须先执行下面的命令
set serveroutput on;
⑤ 例:创建有参存储过程
CREATE PROCEDURE addBook(title in varchar2,price in number,author in varchar2,pt in date)ASBEGINinsert into page_books (title,price,author,publish_date) values(title,price,author,pt);END;/

调用有参存储过程
- 方式一
DECLAREtitle page_books.title%type := 'title18';price page_books.price%type := 50.55;author page_books.author%type := 'author18';pt page_books.publish_date%type := sysdate;BEGINaddBook(title,price,author,pt);END;/
- 方式二
EXECUTE addBook('book19',100,'author19',sysdate);

例:创建无参存储过程
CREATE PROCEDURE sayHelloISBEGINDBMS_OUTPUT.put_line('Hello!');END;/

调用无参存储过程

- 方式一
BEGINsayHello();END;/
- 方式
BEGINsayHello;END;/
- 方式三
EXECUTE sayHello;
-方式四
EXECUTE sayHello();

函数:返回一个值,主要用于计算并返回一个值。

①创建函数的小细节
- 函数必须包含一个return语句
- RETURN 子句指定要在函数返回的数据类型
- 函数定义的时候,无参函数名后面一定不能加括号!!!报错:Warning: Function created with compilation errors
- 函数调用的时候无参函数方法名后面可以不用加括号,有参必须加

② 例:创建有参函数
CREATE FUNCTION mul(x in double precision,y in double precision)RETURN double precisionISresult double precision;BEGINresult := x*y;RETURN result;END;/
调用有参函数
DECLARE a double precision;BEGINa:=mul(2,10);DBMS_OUTPUT.put_line(a);END;/
例:创建无参函数
CREATE FUNCTION totalBooksRETURN number IStotalBooks number;BEGINselect count(id) INTO totalBooks from page_books;RETURN totalBooks;END; /

调用无参函数
DECLAREa number;BEGINa:=totalBooks();DBMS_OUTPUT.put_line(totalBooks);END;/

关于上述用到的page_books表的相关信息如下图