Oracle--plsql创建存储过程
2012-03-29 19:29
369 查看
子程序的介绍:
•命名的
PL/SQL 块,能够接受传递的参数,能够被调用。
•子程序的类型
过程:用于执行某项操作
函数:用于执行某项操作并返回值
•基于标准的PL/SQL块结构
声明部分
可执行部分
异常部分(可选)
优点:
–模块化
将程序分解为多个逻辑模块
–可重用性
子程序在被执行之后,被存储在数据库中,可以在任意数目的
应用程序中使用
–可维护性
子程序简化了维护
–提高性能
用户直接使用共享池中解析后的程序
存储过程:
•命名的PL/SQL块
•能够接受参数
•能够被重复调用
•用于执行某项操作
•存储在数据库中
形式参数与实际参数
形式参数:在子程序说明的参数列表中声明的变量
CREATEPROCEDURE raise_sal(
p_idNUMBER, p_amount NUMBER)
...
ENDraise_sal;
•实际参数:在子程序被调用的参数列表中引用的变量或表达式
raise_sal(v_id,2000)
创建带参数的过程
参数模式IN 是默认的参数模式。换句话说,如果未指定一个参数的模式,该参数就被认为是一个 IN 参数。参数模式 OUT和 IN OUT 必须在参数的前面被明确指定。
一个IN 模式的形式参数不能被指定一个值,就是说,一个在过程体中的 IN 参数不能被修改。
一个OUT 或 IN OUT 参数在返回主叫环境之前必须被指定一个值。
IN参数可以在参数列表中被指定一个默认值。OUT 和 INOUT 参数不能被指定默认值。
默认情况下IN 参数是引用传递,而 OUT 和 IN OUT 参数是值传递。
声明主机变量,执行raise_sal过程
用 VARIABLE命令创建主机变量。
调用 raise_sal过程,提供这些主机变量作为 OUT 参数。
在 EXECUTE命令中引用主机变量时,注意冒号 (:) 的使用。
传递参数的方法
•位置:实际参数与形式参数排列的顺序相同
•指定:实际参数联合其相应的形式参数以任意顺序排列
•组合:实际参数的排列一些用位置,一些用指定
异常处理:
当一个异常发生时,控制立即转向块的异常部分。如果异常被处理,块终止运行,并且控制转向主叫程序。
删除存储在数据库中的过程
DROP PROCEDURE procedure_name
权限授予:
•为了能够在子程序中引用和访问不同方案中对象,必须被明确地授予
访问引用对象的权限,不能通过角色授权。
PLSQL对象信息存储:
通过以下方法查看PL/SQL对象的存储信息:
–user_objects
–user_source
–desc object_name
–show err
–dbms_output
通过user_objects视图查看PL/SQL对象的信息;
通过user_source视图查看PL/SQL对象的程序文本;
desc查看对象的结构;
showerr查看对象在编译过程中出现的错误;
通过dbms_output包查看PL/SQL对象的调试信息;
USER_OBJECTS:
USER_SOURCE:
USER_ERROR:
•命名的
PL/SQL 块,能够接受传递的参数,能够被调用。
•子程序的类型
过程:用于执行某项操作
函数:用于执行某项操作并返回值
•基于标准的PL/SQL块结构
声明部分
可执行部分
异常部分(可选)
优点:
–模块化
将程序分解为多个逻辑模块
–可重用性
子程序在被执行之后,被存储在数据库中,可以在任意数目的
应用程序中使用
–可维护性
子程序简化了维护
–提高性能
用户直接使用共享池中解析后的程序
存储过程:
•命名的PL/SQL块
•能够接受参数
•能够被重复调用
•用于执行某项操作
•存储在数据库中
形式参数与实际参数
形式参数:在子程序说明的参数列表中声明的变量
CREATEPROCEDURE raise_sal(
p_idNUMBER, p_amount NUMBER)
...
ENDraise_sal;
•实际参数:在子程序被调用的参数列表中引用的变量或表达式
raise_sal(v_id,2000)
创建带参数的过程
参数模式IN 是默认的参数模式。换句话说,如果未指定一个参数的模式,该参数就被认为是一个 IN 参数。参数模式 OUT和 IN OUT 必须在参数的前面被明确指定。
一个IN 模式的形式参数不能被指定一个值,就是说,一个在过程体中的 IN 参数不能被修改。
一个OUT 或 IN OUT 参数在返回主叫环境之前必须被指定一个值。
IN参数可以在参数列表中被指定一个默认值。OUT 和 INOUT 参数不能被指定默认值。
默认情况下IN 参数是引用传递,而 OUT 和 IN OUT 参数是值传递。
create or replace procedure raise_sal (p_id in emp.empno%type, p_name out varchar2, p_sal out number) Is begin select sal,ename into p_sal,p_name from emp where empno = p_id; end raise_sal;
DECLARE v_sal emp.sal%type; v_name emp.ename%type; BEGIN raise_sal(7369,v_sal,v_name); dbms_output.put_line('雇员:'||v_name||'的薪水是 '||v_sal); END;
声明主机变量,执行raise_sal过程
VARIABLE g_sal NUMBER VARIABLE g_name VARCHAR2(25) EXEC raise_sal(7369,:g_name,:g_sal)
用 VARIABLE命令创建主机变量。
调用 raise_sal过程,提供这些主机变量作为 OUT 参数。
在 EXECUTE命令中引用主机变量时,注意冒号 (:) 的使用。
传递参数的方法
•位置:实际参数与形式参数排列的顺序相同
•指定:实际参数联合其相应的形式参数以任意顺序排列
•组合:实际参数的排列一些用位置,一些用指定
CREATE OR REPLACE PROCEDURE raise_sal (p_id IN emp.empno%type default 7369, p_name OUT varchar2 , p_sal IN OUT number ) IS BEGIN UPDATE emp SET sal = sal + p_sal WHERE empno = p_id; SELECT sal,ename INTO p_sal,p_name FROM emp WHERE empno = p_id; END raise_sal;
异常处理:
当一个异常发生时,控制立即转向块的异常部分。如果异常被处理,块终止运行,并且控制转向主叫程序。
CREATE OR REPLACE PROCEDURE test1 IS v_deptno dept.deptno%type; BEGIN insert into dept values(60,'nuc','kitty'); select deptno into v_deptno from dept where deptno=99; EXCEPTION WHEN NO_DATA_FOUND THEN dbms_output.put_line('内部执行的异常'); END; CREATE OR REPLACE PROCEDURE test IS BEGIN insert into dept values(70,'micro','NEW YORK'); test1(); EXCEPTION WHEN NO_DATA_FOUND THEN dbms_output.put_line('外部执行的异常'); END;
删除存储在数据库中的过程
DROP PROCEDURE procedure_name
权限授予:
•为了能够在子程序中引用和访问不同方案中对象,必须被明确地授予
访问引用对象的权限,不能通过角色授权。
PLSQL对象信息存储:
通过以下方法查看PL/SQL对象的存储信息:
–user_objects
–user_source
–desc object_name
–show err
–dbms_output
通过user_objects视图查看PL/SQL对象的信息;
通过user_source视图查看PL/SQL对象的程序文本;
desc查看对象的结构;
showerr查看对象在编译过程中出现的错误;
通过dbms_output包查看PL/SQL对象的调试信息;
USER_OBJECTS:
SELECT object_name, object_type,status FROM user_objects WHERE object_type in ('PROCEDURE','FUNCTION') ORDER BY object_name;
USER_SOURCE:
SELECT text FROM user_source WHERE name='GET_SAL' ORDER BY line;
USER_ERROR:
相关文章推荐
- 『ORACLE』 PLSQL创建存储过程(11g)
- Oracle 创建存储过程以及PlSql 调用 存储过程
- Oracle创建存储过程
- oracle 创建表并创建存储过程,通过存储过程将其他用户的信息导入到新建表中
- 『PLSQL』在oracle表中怎样创建自增长字段?
- plsql创建表空间并创建oracle用户授权并指定默认表空间
- Oracle 9i 数据库 创建数据库 Net 配置 创建表 SQL查询 创建存储过程 (图)
- 关于Oracle创建存储过程时,访问不同Schema下的表报错:ORA-00942的问题
- oracle创建存储过程并调用
- Oracle:创建存储过程
- Oracle 创建视图、创建存储过程
- 如何使用plsql导出Oracle建表语句、存储过程、视图
- oracle如何创建job和存储过程
- oracle创建触发器调用含参数存储过程
- Oracle创建存储过程、创建函数、创建包
- Oracle 存储过程的创建,及触发器调用存储过程
- 【Oracle-PLsql】使用存储过程,利用table集合类型开发复杂业务报表
- oracle,通过plsql创建用户表空间和所属用户示例
- Oracle--plsql游标创建和使用
- 使用plsql创建oracle表