plsql函数参数

上传人:第*** 文档编号:32693812 上传时间:2018-02-12 格式:DOC 页数:12 大小:103.50KB
返回 下载 相关 举报
plsql函数参数_第1页
第1页 / 共12页
plsql函数参数_第2页
第2页 / 共12页
plsql函数参数_第3页
第3页 / 共12页
plsql函数参数_第4页
第4页 / 共12页
plsql函数参数_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《plsql函数参数》由会员分享,可在线阅读,更多相关《plsql函数参数(12页珍藏版)》请在金锄头文库上搜索。

1、游标 for 循环-查询所有员工编号,姓名,工资declarecursor emp_cursor isselect * from employees;beginfor e IN emp_cursor loopdbms_output.put_line(编号: |e.employee_id|姓名:|e.last_name|工资:|e.salary);end loop;end;-查询所有员工编号,姓名,工资(参数)declarecursor emp_cursor(p_dept_id employees.department_id%type)isselect * from employeeswhere

2、 department_id=p_dept_id;beginfor e in emp_cursor(90) loopdbms_output.put_line(编号: |e.employee_id|姓名:|e.last_name|工资:|e.salary);end loop;end;declarebeginfor e in(select * from employees where department_id=60) loopdbms_output.put_line(编号: | e.employee_id |姓名|e.last_name|工资|e.salary);end loop;end;-隐式

3、游标-用户输入一个任意的部门编号,更新这个部门员工的工资 如果有员工的工资被更新,输出更新成功,有多少个员工被更新,如果没有,输出部门不存在v_deptid number:=beginupdate employeesset salary = salary+1where department_id=v_deptid;if sql%found thendbms_output.put_line(更新成功,有 | SQL%ROWCOUNT |个员工被更新);elsedbms_output.put_line(部门不存在 );end if;commit;end;-动态游标-用户输入一个字母,输入 E,查的

4、是员工姓名,输入 D,查的是部门名称select count(employee_id) from employees函数和过程ORACLE 提供可以把 PL/SQL 程序存储在数据库中,并可以在任何地方来运行它。这样就叫存储过程或函数。过程和函数统称为 PL/SQL 子程序,他们是被命名的 PL/SQL 块,均存储在数据库中,并通过输入、输出参数或输入/输出参数与其调用者交换信息。过程和函数的唯一区别是函数总向调用者返回数据,而过程则不返回数据。 创建函数创建函数的语法如下:CREATE OR REPLACE FUNCTION function_name (argment IN | OUT |

5、 IN OUT Type ,argment IN | OUT | IN OUT Type RETURN return_type IS | AS BEGINFUNCTION_bodyEXCEPTION其它语句END; CREATE OR REPLACE FUNCTION get_salary(Dept_no NUMBER, Emp_count OUT NUMBER)RETURN NUMBER ISV_sum NUMBER;BEGINSELECT SUM(sal), count(*) INTO V_sum, emp_countFROM emp WHERE deptno=dept_no;RETURN

6、 v_sum;EXCEPTIONWHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE(你需要的数据不存在!);WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLCODE|-|SQLERRM);END get_salary; 调用函数方法函数声明时所定义的参数称为形式参数,应用程序调用时为函数传递的参数称为实际参数。应用程序在调用函数时,可以使用以下三种方法向函数传递参数: 第一种参数传递格式称为位置表示法,格式为:argument_value1,argument_value2 DECLAREV_num NUMBER;V_sum

7、 NUMBER;BEGINV_sum :=get_salary(30, v_num);DBMS_OUTPUT.PUT_LINE(30号部门工资总和: |v_sum|,人数:|v_num);END; 第二种参数传递格式称为名称表示法,格式为 :argument = parameter , 其中:argument 为形式参数,它必须与函数定义时所声明的形式参数名称相同。Parameter 为实际参数。在这种格式中,形势参数与实际参数成对出现,相互间关系唯一确定,所以参数的顺序可以任意排列。 DECLAREV_num NUMBER;V_sum NUMBER;BEGINV_sum :=get_sala

8、ry(emp_count = v_num, dept_no = 30);DBMS_OUTPUT.PUT_LINE(30号部门工资总和: |v_sum|,人数:|v_num);END;第三种参数传递格式称为混合表示法 :即在调用一个函数时,同时使用位置表示法和名称表示法为函数传递参数。采用这种参数传递方法时,使用位置表示法所传递的参数必须放在名称表示法所传递的参数前面。也就是说,无论函数具有多少个参数,只要其中有一个参数使用名称表示法,其后所有的参数都必须使用名称表示法。DECLARE Var VARCHAR2(32);BEGINVar := demo_fun(user1, 30, sex =

9、男);DBMS_OUTPUT.PUT_LINE(var);Var := demo_fun(user2, age = 40, sex = 男);DBMS_OUTPUT.PUT_LINE(var);Var := demo_fun(user3, sex = 女 , age = 20);DBMS_OUTPUT.PUT_LINE(var);END;参数默认值在 CREATE OR REPLACE FUNCTION 语句中声明函数参数时可以使用 DEFAULT 关键字为输入参数指定默认值。 CREATE OR REPLACE FUNCTION demo_fun(Name VARCHAR2,vAge INT

10、EGER,Sex VARCHAR2 DEFAULT 男)RETURN VARCHAR2 ISV_var VARCHAR2(32);BEGINV_var := name|:|TO_CHAR(age)|岁,|sex;RETURN v_var;END; 具有默认值的函数创建后,在函数调用时,如果没有为具有默认值的参数提供实际参数值,函数将使用该参数的默认值。但当调用者为默认参数提供实际参数时,函数将使用实际参数值。在创建函数时,只能为输入参数设置默认值,而不能为输入/输出参数设置默认值。 DECLARE Var VARCHAR(32);BEGINVar := demo_fun(user1, 30);

11、DBMS_OUTPUT.PUT_LINE(var);Var := demo_fun(user2, age = 40);DBMS_OUTPUT.PUT_LINE(var);Var := demo_fun(user3, sex = 女, age = 20);DBMS_OUTPUT.PUT_LINE(var);END; 存储过程在 ORACLE SERVER 上建立存储过程,可以被多个应用程序调用,可以向存储过程传递参数, 也可以向存储过程传回参数 创建存储过程语法 :CREATE OR REPLACE PROCEDURE Procedure_name (argment IN | OUT | IN

12、OUT Type,argment IN | OUT | IN OUT Type IS | AS BEGINEXCEPTIONEND; CREATE OR REPLACE PROCEDURE DelEmp(v_empno IN emp.empno%TYPE) ASNo_result EXCEPTION;BEGINDELETE FROM emp WHERE empno=v_empno;IF SQL%NOTFOUND THENRAISE no_result;END IF;DBMS_OUTPUT.PUT_LINE(编码为|v_empno|的员工已被除名!); EXCEPTIONWHEN no_resu

13、lt THEN DBMS_OUTPUT.PUT_LINE(你需要的数据不存在! );WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE(SQLCODE|-|SQLERRM);END DelEmp;调用存储过程存储过程建立完成后,只要通过授权,用户就可以在 SQLPLUS 、ORACLE 开发工具或第三方开发工具中来调用运行。ORACLE 使用 EXECUTE 语句来实现对存储过程的调用: EXECUTE Procedure_name( parameter1, parameter2)例: EXECUTE DelEmp; EXCEPTIONWHEN no_result THE

14、N DBMS_OUTPUT.PUT_LINE(你需要的数据不存在! );WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE(SQLCODE|-|SQLERRM);END DelEmp; CREATE OR REPLACE PROCEDURE proc_demo(Dept_no NUMBER DEFAULT 10 , Sal_sum OUT NUMBER,Emp_count OUT NUMBER)ISBEGINSELECT SUM(sal), COUNT(*) INTO sal_sum, emp_count FROM emp WHERE deptno=dept_no;EXC

15、EPTIONWHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE(你需要的数据不存在! );WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLCODE|-|SQLERRM);END proc_demo;V_num NUMBER;V_sum NUMBER(8, 2);BEGINProc_demo(30, v_sum, v_num);DBMS_OUTPUT.PUT_LINE(30号部门工资总和:|v_sum|,人数:|v_num);Proc_demo(sal_sum = v_sum, emp_count = v_num);DBMS_OUTPUT.PUT_LINE(10号部门工资总和:|v_sum|,人数:|v_num);END;删除过程和函数可以使用 DROP 语句删除过程:DROP PROCEDURE proceduer_name;可以使用 DROP 语句删除函数:DROP FUNCTION function_name;授权执行权给相关的用户或角色 如果调式正确的存储过程没有进行授权,那就只有建立者本人才可以运行。所以作为应用系统的一部分的存储过程也必须进行授权才能达到要求。可以用 GRANT 命令来进行存储过程的运行授权n

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 职业教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号