问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

oracle中的过程和函数有什么区别?

发布网友 发布时间:2022-04-07 21:20

我来回答

4个回答

懂视网 时间:2022-04-08 01:41

过程函数编程

实践目的

  (1) 掌握存储过程、存储函数高级数据库对象的基本作用。

  (2) 掌握存储过程、存储函数的建立、修改、查看、删除操作。

实践要求

  (1) 记录执行命令和操作过程中遇到的问题及解决方法,注意从原理上解释原因。

  (2) 记录利用企业管理器管理存储过程、存储函数、触发器的方法。

  (3) 记录利用SQL*Plus和PLSQL DEVELOPER管理存储过程、存储函数的命令。

实践内容

  下列任务中涉及的数据表是SCOTT用户给出的表。

  1.创建存储过程

(1) 获取某部门雇员的姓名和工资。  

(2) 获取某部门的工资总和及部门名称。

  (3)输出某个部门员工的姓名及工资档次,5000以上高,3000-5000中等,2000-3000较低,2000以下低。

  2.创建存储函数

(1) 获取某雇员的工资:  

(2) 获取某部门的工资总和。

(3) 输出某个员工的姓名及工资档次,5000以上高,3000-5000中等,2000-3000较低,2000以下低。

(4)计算指定部门的工资总和,并统计其中的职工数量。

实验步骤:

下列任务中涉及的数据表是SCOTT用户给出的表。

  1.创建存储过程

(1) 获取某部门雇员的姓名和工资。 

SQL> conn scott/tiger

已连接。

SQL> set serveroutput on;

SQL> create or replace procedure emp_table(e_deptno emp.deptno%type)

  2  as

  3       cursor e_cursor is

  4       select ename,sal from emp where deptno=e_deptno;

  5  begin

  6       for e_record in e_cursor loop

  7          dbms_output.put_line(e_record.ename||‘ ‘||e_record.sal);

  8       end loop;

  9  end;

 10  /

 

过程已创建。

 

SQL> exec emp_table(20);

SMITH 800

JONES 2975

SCOTT 3000

ADAMS 1100

FORD 3000

 

SQL> exec emp_table(10);

CLARK 2450

KING 5000

MILLER 1300

 

PL/SQL 过程已成功完成。

PL/SQL 过程已成功完成。

 

SQL> exec emp_table(30);

ALLEN 1600

WARD 1250

MARTIN 1250

BLAKE 2850

TURNER 1500

JAMES 950

 

PL/SQL 过程已成功完成。

 

SQL>

 

 

 

(2) 获取某部门的工资总和及部门名称。

 

 

SQL> create or replace procedure emp_1(e_deptno emp.deptno%type)

  2  as

  3       cursor emp_cur is

  4     select deptno,sum(sal) as e_sal from emp where deptno=e_deptno group by    deptno;

  5  begin

  6       for emp_record1 in emp_cur loop

  7       dbms_output.put_line(emp_record1.deptno||‘ ‘||emp_record1.e_sal);

  8       end loop;

  9  end;

 10  /

 

过程已创建。

 

SQL> exec emp_1(10);

10 8750

 

PL/SQL 过程已成功完成。

 

SQL> exec emp_1(20);

20 10875

 

PL/SQL 过程已成功完成。

 

SQL> exec emp_1(30);

30 9400

 

PL/SQL 过程已成功完成。

 

SQL> 

 

 

(3)输出某个部门员工的姓名及工资档次,5000以上高,3000-5000中等,2000-3000较低,2000以下低。

SQL> create or replace procedure empno_name_level

  2  (dnum in emp.empno%type,name out emp.ename%type,level out varchar2)

  3  as

  4  salary emp.sal%type;

  5  begin

  6     select sal,ename into salary,name from emp where dnum=empno;

  7     case

  8     when salary >5000 then level:=‘高‘;

  9     when salary between 3000 and 5000 then level:=‘中等‘;

 10     when salary between 2000 and 3000 then level:=‘较低‘;

 11     else  level:=‘低‘;

 12     end case;

 13  end;

 14  /

 

过程已创建。

 

SQL> declare

  2  level varchar2(15);

  3  name emp.ename%type;

  4  begin

  5  empno_name_level(‘7788‘,name,level);

  6  dbms_output.put_line(‘name:‘||name||‘ ‘||‘level:‘||level);

  7   end;

  8  /

name:SCOTT level:中等

 

PL/SQL 过程已成功完成。

 

 

 

  2.创建存储函数

(1) 获取某雇员的工资:  

 

SQL> create or replace function empno_sal(eno in emp.empno%type)

  2  return emp.sal%type

  3  as

  4  salary emp.sal%type;

  5  begin

  6     select sal into salary from emp where eno=empno;

  7     return salary;

  8  end;

  9  /

 

函数已创建。

 

SQL> begin

  2     dbms_output.put_line(‘salary:‘||emp_sal(‘7499‘));

  3  end;

  4  /

salary:1600

 

PL/SQL 过程已成功完成。

 

SQL>  begin

  2      dbms_output.put_line(‘salary:‘||emp_sal(‘7788‘));

  3  end;

  4  /

salary:3000

 

PL/SQL 过程已成功完成。

 

SQL>  begin

  2      dbms_output.put_line(‘salary:‘||emp_sal(‘7900‘));

  3  end;

  4  /

salary:950

 

PL/SQL 过程已成功完成。

   

 

(2) 获取某部门的工资总和。

 

SQL> create or replace function salary_num(dno in emp.deptno%type)

  2  return emp.sal%type

  3  is

  4  total emp.sal%type;

  5  begin

  6     select sum(sal) into total from emp where         dno=deptno;

  7     return total;

  8  end;

  9  /

 

函数已创建。

 

SQL> begin

  2    dbms_output.put_line(‘total_salary:‘||total_salary(‘20‘));

  3  end;

  4  /

total_salary:10875

 

PL/SQL 过程已成功完成。

 

SQL> begin

  2    dbms_output.put_line(‘total_salary:‘||total_salary(‘10‘));

  3  end;

  4  /

total_salary:8750

 

PL/SQL 过程已成功完成。

 

SQL> begin

  2    dbms_output.put_line(‘total_salary:‘||total_salary(‘30‘));

  3  end;

  4  /

total_salary:9400

 

PL/SQL 过程已成功完成。

   

 

(3) 输出某个员工的姓名及工资档次,5000以上高,3000-5000中等,2000-3000较低,2000以下低。

 

SQL> create or replace function empno_name_level1(dnum in emp.empno%type,name out emp.ename%type)

  2  return varchar2

  3  as

  4  salary emp.sal%type;

  5  level varchar2(15);

  6  begin

  7     select sal,ename into salary,name from emp where                dnum=empno;

  8     case

  9     when salary >5000 then level:=‘高‘;

 10     when salary between 3000 and 5000 then level:=‘中等‘;

 11     when salary between 2000 and 3000 then level:=‘较低‘;

 12     else  level:=‘低‘;

 13     end case;

 14     return level;

 15  end;

 16  /

 

函数已创建。

 

SQL> declare

  2     name emp.ename%type;

  3     level varchar2(15);

  4  begin

  5     level:=empno_name_level1(‘7499‘,name);

  6     dbms_output.put_line(‘name:‘||name||‘ ‘||‘level:‘||level);

  7  end;

  8  /

name:ALLEN level:低

 

PL/SQL 过程已成功完成。

 

SQL> declare

  2     name emp.ename%type;

  3     level varchar2(15);

  4  begin

  5     level:=empno_name_level1(‘7788‘,name);

  6      dbms_output.put_line(‘name:‘||name||‘ ‘||‘level:‘||level);

  7   end;

  8   /

name:SCOTT level:中等

 

PL/SQL 过程已成功完成。

 

SQL>  declare

  2      name emp.ename%type;

  3      level varchar2(15);

  4   begin

  5      level:=empno_name_level1(‘7566‘,name);

  6      dbms_output.put_line(‘name:‘||name||‘ ‘||‘level:‘||level);

  7   end;

  8  /

name:JONES level:较低

 

PL/SQL 过程已成功完成。

 

 

(4)计算指定部门的工资总和,并统计其中的职工数量。

SQL> create or replace function salnum_empnonum(dnum in emp.deptno%type,total out emp.sal%type)

  2  return number

  3  as

  4  e_count number;

  5  begin

  6     select sum(sal),count(empno)

  7           into total,e_count from emp                        where deptno=dnum;

  8     return e_count;

  9  end;

 10  /

 

函数已创建。

 

SQL> declare

  2  total emp.sal%type;

  3  begin

  4  dbms_output.put_line(‘enum:‘||salnum_empnonum(‘10‘,total)||‘‘||‘total:‘||total);

  5  end;

  6  /

enum:3total:8750

 

PL/SQL 过程已成功完成。

 

 

 

实验小结:

1. PL/SQL中的存储子程序包括存储过程和(存储)函数两种。存储子程序是以独立对象的形式存储在数据库服务器中,因此是一种全局结构,与之对应的是局部子程序,即嵌套在PL/SQL块中的局部过程和函数,其存储位置取决于其所在的父块的位置。

2. 存储过程可以简单的理解为一段可以执行某个活动/动作的子程序,可以作为一个系统对象被存储在数据库中,可以重复调用。

3. 通常,存储过程不需要返回值,如果需要返回一个值可以通过函数调用实现。但是,如果希望返回多个值,可以使用OUT或IN OUT模式参数来实现。

4. 在编译过程中可能会产生错误,可以使用SHOW ERRORS来查看错误信息。当前只有一个对象,要显示错误可以用SHOW ERRORS,当有多个对象时,可以精确的指明要查看那个对象,例如此处可写:SHOW ERRORS PROCEDURE myproc,同样的要查看函数、包、触发器的错误,用SHOW ERRORS FUNCTION/PACKAGE/TRIGER 名称。

5. 存储子程序是被命名的PL/SQL块,以编译的形式存储在数据库服务器中,可以在应用程序中进行调用,是PL/SQL程序模块化的一种体现。

 

 

 

oracle-过程函数编程

标签:

热心网友 时间:2022-04-07 22:49

1、函数必须有返回值,而过程可没有返回值
2、函数可以单独执行,而过程必须通过execute执行
3、函数可以嵌入到sql中执行,而过程不行

热心网友 时间:2022-04-08 00:07

最大的区别:过程没有返回值,函数有!

热心网友 时间:2022-04-08 01:42

1.过程可以有0~N个返回参数,通过OUT or IN OUT参数返回;函数有且仅有1个返回值,通过return语句返回。
2.调用过程时,可做为单独的语句执行;调用函数时,函数必须把返回结果赋值给一个变量。 
3.在SQL语句中,可以不能调用过程;在SQL语句中,可以直接调用函数。
Oracle中 存储过程,过程和函数有什么区别和联系

过程:函数和存储过程的统称。函数:有且仅有一个返回值,可以用于SQL语句中。 如:x := get_X(),select get_X() from dual,返回值为函数调用的结果。存储过程:无返回值。要返回结果,必须声明为out参数。如:sp_x(x,y,z),x和y为in类型参数,z为out/in out类型参数。在oracle中,封装...

oracle存储过程和函数的区别

oracle存储过程和函数的区别 1. 返回值的区别,函数有1个返回值,而存储过程是通过参数返回的,可以有多个或者没有 2.调用的区别,函数可以在查询语句中直接调用,而存储过程必须单独调用.函数一般情况下是用来计算并返回一个计算结果而存储过程一般是用来完成特定的数据操作(比如修改、插入数据库表或执行某些...

oracle存储过程和函数的区别

oracle中存储过程和函数的区别如下:1.存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。2.对于存储过程来说可以返回参数,而函数只能返回值或者表对象。3.存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象,因此它可以在查询语...

Oracle中存储过程和函数的区别

函数有返回值,而过程没有,简单点就是 function test_f (parameter in varchar2) return varchar2;procdrue test_p (parameter in varchar2);declare result varchar2;begin result := test_f; --函数有返回值 必须用变量去装载 test_p; --过程没有可直接调用.end;

oracle函数和存储过程有什么区别

一、主体不同 1、函数:当需要分析数据清单中的数值是否符合特定条件时,使用数据库工作表函数。2、存储过程:是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,一次编译后永久有效。二、特点不同 1、函数:只能返回一个变量,可以嵌入sql中和存储过程中使用。2、存储过程:...

Oracle中存储过程和函数的区别

最本质的区别就是函数有返回值,过程没有返回值,如果确实需要过程返回值,只能通过设置传入的参数方式来实现,同理,函数也可以这样

oracle存储过程和函数的区别

申明时候的区别:存储过程用 procedure,函数用function 存储过程申明时候不需要描述返回值的类型,函数需要描述返回值类型,而且下面的语句块中至少要有一个return 存储过程和函数都可以使用 in、out、in out三种模式的参数 存错过程可以作为一个独立的PL/SQL语句来执行,而函数必须作为表达式的一部分调用 s...

Oracle 存储过程和函数的区别

其实,Oracle函数和存储过程差别很小,对比其他数据库,比如SqlServer:sqlserver中,函数是不能存在非select的dml语句的,换句话说,函数中,sqlserver是不能出现update、delete、insert等语句的 而Oracle中,是十分自由和宽容的,update、delete、insert等语句都可以出现 但因为Oracle的自由度,会引起其它一些...

oracle中函数和存储过程的区别和联系

不同点:1.存储过程定义关键字用procedure,函数定义用function。2.存储过程中不能用return返回值,但函数中可以,而且函数中必须有return子句。3.执行方式略有不同,存储过程的执行方式有两种(1.使用execute2.使用begin和end),函数除了存储过程的两种方式外,还可以当做表达式使用,例如放在select中(...

Oracle 存储过程和函数的区别

存储过程无返回值,函数有返回值,没有其他区别。

oracle函数和过程的区别 oracle存储过程和函数的区别 Oracle中的有没有对比的函数 oracle和mysql函数区别 oracle存储过程和存储函数 oracle取整函数区别 存储过程与函数的区别 调用存储过程和函数用什么 oracle和mysql区别
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
男生蹲在那里抽烟,女生去拿他的烟说“给我抽一口(女生不会抽烟... 大理附近哪里有网页UI设计培训班哪家比较正规? 苹果手机音乐文件删除了怎样找回来? 天龙八部3如何升级帮派城市 天龙八部帮派怎么才能升到5级。 视神经萎缩能恢复吗 怎么把vivox5max虚电弄没了 在苹果6手机上怎么注册appleid 梦见自己去私人诊所看下身,结果身上没有钱在裤兜里拿出来的都是卫生纸... 梦见两百万变成了卫生纸,该梦何解 药品名的名词解释有哪些? 药品stp营销的含义是什么 药名词解释 妈妈说把晒得被子翻一下怎么翻? 晒被子多久翻一次面 家里房子面积比较大,在选择热水器的时候该注意些什么? 1个月宝宝鼻子不通气怎么办呀?宝宝这两天老是哭闹,看着好心疼呀! 絮完棉花的被子怎么翻过来快有好翻 宝宝3岁了,鼻子总不通气怎么回事 热水器在选购的时候应该注意什么?怎样选择安全的热水器? 夜里宝宝鼻子总是不透气,有哪些缓解的好办法? 宝宝鼻子老是不通气是怎么回事 做棉花被,买的棉纱套,铺好棉花后怎么翻过来?求经验! 夏天翻晒被子有什么诀窍? 翻被子最快最好的方法 Excel公式中的Round函数教程 excel中round的用法 excel函数round怎么用 500000元人民币存到农行三个月,利息是多少,谁来帮我算一下 华硕电脑装了linux系统后无线网不能用了为什么 VBA编程:字符串定位后截取 Excel VBA怎么截取字符串 怎么用vba提取字符串中的数字 EXCEL 用VBA 提取字符串 vba如何将字符串中的指定的值截取出来 excel VBA,从字符串中提取数字。 vba 如何提取字符串中的一部分? excel中vba提取字符串问题 VBA 从第一个截取到倒数第二个字符,怎么写 请问如何 用 excel vba 的mid 函数,截取中间字符串 如何用excel中的VBA的正则表达式提取出字符串? VBA 怎么提取提取字符串中间的一段字符串 VBA获取某个字符左边的所有字符 vba中怎么提取每一个字符? vba中如何取字符串之后的数字 EXCEL VBA 截取字符串问题 LED倒计时牌哪里有? 倒计时显示器学习式和通讯式的区别 英国蔚尔WAYLANDAYER品牌护肤好用吗? 英国蔚尔WAYLANDAYER美妆怎么样?