基本概念
临高网站建设公司创新互联建站,临高网站设计制作,有大型网站制作公司丰富经验。已为临高1000+提供企业网站建设服务。企业网站搭建\外贸网站建设要多少钱,请找那个售后服务好的临高做网站的公司定做!
存储过程和存储函数相当于一个东西。
存储过程在Oracle里叫procedure。
存储过程没有返回值。
存储函数在Oracle里叫function。
存储函数有返回值。
基本语法
create or replace procedure 名字
--create or replace 意思是创建或者替换
as
--可以在此定义参数
begin
语句;
end;
例:
create or replace procedure sayhello
as
--说明 相当与declare
begin
dbms_output.put_line('Hello World');
end;
基本调用
begin
-- Call the procedure
sayhello;
sayhello;
sayhello;
end;
带参数的存储过程--查询某个员工的年收入
create or replace procedure upmoney(testname in test_procedure.name%type)
as
begin
update test_procedure t set t.money = t.money + 1000
where t.name = testname;
end
upmoney;
特别的地方,参数要指明是输入参数还是输出参数。
存储函数
create or replace function Fupmoney(tname in varchar2) return number
as --定义月薪参数
tmoney test_procedure.money%type;
begin
--得到月薪
select t.money
into tmoney
from test_procedure t
where t.name = tname;
dbms_output.put_line(tmoney*12);
return(tmoney*12);
end;
创建一个多输出参数的存储函数例子
create or replace procedure manyparm(tname in varchar2,
tjob out varchar2,
tmoney out number,
tdept out varchar2)
is
begin
select t.job,t.money,t.dept
into tjob,tmoney,tdept
from test_procedure t
where t.name = tname;
end manyparm;
你这是无返回类型啊。
应该这么写试试。
create or replace function fu_pr02 return varchar2 as ----创建函数fu_pr02
2 number is yearsal number(7,2);---定义自变量yearsal
3 begin
4 select sal*12+nvl(comm,0)*12 into yearsal from emp where ename='WARD';--查询用户名叫wade的年薪并赋值给yearsal
5 return yearsal;
6 end;
create or replace function(p_deptno in varchar2)
return number
as
avgsal number(10,2);
begin
select avg(sal) into avgsal from emp where deptno = p_deptno;
return avgsal;
end;
create or replace function f(d number)
return varchar
is
begin
return substr(d,instr(d,'.')+1);
end f;
select f(12.34) from dual;
create or replace
FUNCTION "函数名"
(
A in number,
B in number,
name in VARCHAR2
)
BEGIN
insert into 表名 values(A+B,name);
END 函数名;
//花括号里边就是需要传的参数,name如果是固定的可以直接写死,就不用传参了
下面是一个创建返回结果集的函数的语法的例子:
你参考着
把
SELECT 'Hello 1' AS a, 'World 1' AS B FROM dual
UNION ALL
SELECT 'Hello 2' AS a, 'World 2' AS B FROM dual;
修改为
select 姓名,性别,班级 FROM student WHERE 性别 = '女'
SQL create or replace package pkg_HelloWorld as
2 -- 定义ref cursor类型
3 type myrctype is ref cursor;
4 --函数申明
5 function getHelloWorld return myrctype;
6 end pkg_HelloWorld;
7 /
程序包已创建。
SQL CREATE OR REPLACE package body pkg_HelloWorld as
2 function getHelloWorld return myrctype
3 IS
4 return_cursor myrctype;
5 BEGIN
6 OPEN return_cursor FOR
7 SELECT 'Hello 1' AS a, 'World 1' AS B FROM dual
8 UNION ALL
9 SELECT 'Hello 2' AS a, 'World 2' AS B FROM dual;
10 return return_cursor;
11 END getHelloWorld;
12 end pkg_HelloWorld;
13 /
程序包体已创建。
SQL SELECT pkg_HelloWorld.getHelloWorld() FROM dual;
PKG_HELLOWORLD.GETHE
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
A B
------- -------
Hello 1 World 1
Hello 2 World 2