linux call 存储过程,存储过程

过程定义:

CREATE [OR REPLACE] PROCEDURE procedure_name

[(part_name [ IN | OUT | IN OUT] datetype... )]

[AUTHID DEFINER | CURRENT_USER]

IS | AS

BEGIN

procedure_body

END

例:定义一个过程,以job作为参数,显示该job平均工资、最高工资和最低工资

CREATE OR REPLACE PROCEDURE disp_job_sal(v_job scott.emp.job%type)

AS

max_sal scott.emp.sal%type;

min_sal scott.emp.sal%type;

avg_sal scott.emp.sal%type;

BEGIN

select avg(sal),max(sal),min(sal) into avg_sal,max_sal,min_sal

from scott.emp where job=v_job;

dbms_output.put_line(v_job||' avg sal:'||avg_sal);

dbms_output.put_line(v_job||' max sal:'||max_sal);

dbms_output.put_line(v_job||' min sal:'||min_sal);

EXCEPTION

WHEN NO_DATA_FOUND THEN

dbms_output.put_line('No data found!');

END disp_job_sal;

/

过程调用、运行

call | execute procedure_name(part_list);

存储过程运行权限要求:

1、运行一个过程时,默认是以定义者的权限来访问相关表,所以即便运行无法访问存储过程涉及到的表,

过程也能运行,如果要改变这种方式在定义过程时加 AUTHID CURRENT_USER

如:

CREATE OR REPLACE PROCEDURE disp_job_sal2

AUTHID CURRENT_USER

2、存储过程编译时,不能使用角色授权,在运行时同样不能使用角色授权

与存储过程相关的数典:

dba_source

dba_objects

dba_dependencies

加密存储过程

1、把创建过程用脚本保存,不要直接在sqlplus 去建

2、用wrap对创建过程的脚本加密

wrap iname=create_pro.sql name=aa.sql

原始文件名              加密后的文件名

3、拿这个加密后的脚本去运行,来创建存储过程

查看存储过程依赖表

SQL> select REFERENCED_TYPE,REFERENCED_OWNER,REFERENCED_NAME from dba_dependencies

2  where NAME='DISP_JOB_SAL';

存储过程参数传递方式:

存储过程参数传递方式有两种:

按位置传递: 知道每一个参数的名字,依次给值

按名字传递:不需要按参数顺序一一对应,在传参数归,输入参数名,再给值

例:创建了过程

create ... inser_emp(empno,ename,sal,deptno)

按位置传:

exec inser_emp(8000,'test',2500,10)

按名字传

exec inser_emp(ename=>'test',empno=>8000,sal=>2500,deptno=>0)

默认参数

默认参数即调用时不给参数传值,这个参数的值是多少

默认参数必须在创建时定义

定义方法:

定义参数时,为其赋值

例:写一个过程,显示部门平均工资,最高工资、最低工资,同时部门号设置一个默认参数,

如果不指定就默认为10号部门

CREATE OR REPLACE PROCEDURE disp_dept_sal(d_no scott.emp.deptno%type:=10)

AUTHID CURRENT_USER

AS

max_sal scott.emp.sal%type;

min_sal scott.emp.sal%type;

avg_sal scott.emp.sal%type;

BEGIN

select avg(sal),max(sal),min(sal) into avg_sal,max_sal,min_sal from scott.emp where deptno=d_no;

dbms_output.put_line(d_no||' avg sal:'||avg_sal);

dbms_output.put_line(d_no||' max sal:'||max_sal);

dbms_output.put_line(d_no||' min sal:'||min_sal);

EXCEPTION

WHEN NO_DATA_FOUND THEN

dbms_output.put_line('No data found!');

END;

/

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21175589/viewspace-755684/,如需转载,请注明出处,否则将追究法律责任。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值