网站首页 > 文章中心 > 其它

oracle怎么创建存储

作者:小编 更新时间:2023-08-26 13:18:09 浏览量:137人看过

oracle存储过程基本语法

一:存储过程

创建存储过程,需要有CREATE PROCEDURE或CREATE ANY PROCEDURE的系统权限? ?

删除存储过程,是过程的创建者或者拥有DROP ANY PROCEDURE系统权限?

oracle怎么创建存储-图1

修改存储过程,则只能是过程的创建者或者拥有ALTER ANY PROCEDURE系统权限的人

执行(或调用)存储过程,是过程的创建者或是拥有EXECUTE ANY PROCEDURE系统权限的人或是被拥有者授予EXECUTE权限的人

①.:语法

①.)创建

CREATE[ORREPLACE]PROCEDURE存储过程名[(参数[IN|OUT|INOUT] 数据类型...)]

{AS|IS}

[说明部分]

BEGIN

可执行部分

[EXCEPTION

oracle怎么创建存储-图2

错误处理部分]

END[过程名];

说明:

?OR REPLACE?表示如果存在就覆盖存储过程

?参数有三种形式:IN、OUT和IN OUT.则默认为IN.

关键字AS也可以写成IS,后跟过程的说明部分,可以在此定义过程的局部变量.

DROP PROCEDURE 存储过程名;

? ? ALTER PROCEDURE 存储过程名 COMPILE;?

? ?EXECUTE 模式名.存储过程名[(参数...)];?

? ?或

? ? ?BEGIN?

模式名.存储过程名[(参数...)];

END;

另外:参数可以是变量、常量或表达式

要其它用户执行存储过程须要给其它用户授权

GRANT EXECUTE ON 存储过程名 TO 用户名

IN 定义一个输入参数变量,用于传递参数给存储过程

OUT 定义一个输出参数变量,用于从存储过程获取数据

IN OUT 定义一个输入、输出参数变量,兼有以上两者的功能

①.)参数名 IN 数据类型 DEFAULT 值;

? ? ? ?定义一个输入参数变量,用于传递参数给存储过程.

? ? ? ?可以是常量、有值变量或表达式

? ? ? ?DEFAULT 关键字为可选项,用来设定参数的默认值.如果在调用存储过程时不指明参数,则参数变量取默认值

? ? ? ?在存储过程中,输入变量接收主程序传递的值,但不能对其进行赋值.

? ? ? ?定义一个输出参数变量,用于从存储过程获取数据,即变量从存储过程中返回值给主程序.

? ? ? ? 在调用存储过程时,主程序的实际参数只能是一个变量,而不能是常量或表达式.

? ? ? ?在存储过程中,参数变量只能被赋值而不能将其用于赋值,而且必须给输出变量至少赋值一次.

? ? ? ?定义一个输入、输出参数变量,兼有以上两者的功能.

? ? ? ?在调用存储过程时,主程序的实际参数只能是一个变量,而不能是常量或表达式.

? ? ? ?DEFAULT 关键字为可选项,用来设定参数的默认值.

? ? ? ?在存储过程中,变量接收主程序传递的值,同时可以参加赋值运算,也可以对其进行赋值.在存储过程中必须给变量至少赋值一次.

补充:如果省略IN、OUT或IN OUT,则默认模式是IN.?

? ? ? ? 调用它时参数个数与位置可以不一致,用以下形式调用:

二:函数

创建函数,需要有CREATE PROCEDURE或CREATE ANY PROCEDURE的系统权限

删除函数,需要是函数的创建者或者是拥有DROP ANY PROCEDURE系统权限的人

修改函数,需要是函数的创建者或者拥有ALTER ANY PROCEDURE系统权限的人

执行函数,需要是函数的创建者或拥有EXECUTE ANY PROCEDURE系统权限的人

①.)创建:

CREATE[ORREPLACE]FUNCTION函数名[(参数[IN] 数据类型...)]

RETURN数据类型

RETURN(表达式)

? 错误处理部分]

END[函数名];

? ?参数是可选的,但只能是IN类型(IN关键字可以省略).

? ?在定义部分的RETURN 数据类型,用来表示函数的数据类型,也就是返回值的类型,不可省略.

? ?在可执行部分的RETURN(表达式),用来生成函数的返回值,其表达式的类型应该和定义部分说明的函数返回值的数据类型一致.在函数的执行部分可以有多个RETURN语句,但只有一个RETURN语句会被执行,一旦执行了RETURN语句,则函数结束并返回调用环境.?

? ?DROP FUNCTION 函数名;

? ?ALTER PROCEDURE 函数名 COMPILE;

? ?变量名:=函数名(...)?

三:对存储过程 和 函数的查看(可以通过对数据字典【USER_SOURCE】的访问来查询存储过程或函数的有关信息)

①.:查询某个存储过程序内容

select TEXT from user_source WHERE NAME='存储过程名';

DESCRIBE USER_SOURCE ; //命令行中

DESCRIBE say_hello; //后面是过程名

SHOW ERRORS ;

SELECT STATUS FROM USER_OBJECTS WHERE OBJECT_NAME='过程名';//注意大小写

VALID表示该存储过程有效(即通过编译),INVALID表示存储过程无效或需要重新编译.它的状态会改变,这与它依赖外部表(表删除修改等操作)有关系

SELECT REFERENCED_NAME,REFERENCED_TYPE FROM USER_DEPENDENCIES WHERE NAME='SAY_HELLO';

说明

NAME为实体名,TYPE为实体类型,REFERENCED_OWNER为涉及到的实体拥有者账户,REFERENCED_NAME为涉及到的实体名,REFERENCED_TYPE 为涉及到的实体类型.

问题:

如果一个用户A被授予执行属于用户B的一个存储过程的权限,在用户B的存储过程中,访问到用户C的表,用户B被授予访问用户C的表的权限,但用户A没有被授予访问用户C表的权限,那么用户A调用用户B的存储过程是失败的还是成功的呢?答案是成功的.

107 ORACLE 创建存储过程,存储函数

基本概念

存储过程和存储函数相当于一个东西.

存储过程在Oracle里叫procedure.

存储过程没有返回值.

存储函数在Oracle里叫function.

存储函数有返回值.

基本语法

create or replace procedure 名字

--create or replace 意思是创建或者替换

as

--可以在此定义参数

begin

语句;

end;

例:

create? or? replace ? procedure ? sayhello

--说明 相当与declare

dbms_output.put_line('Hello World');

基本调用

-- Call the procedure

sayhello;

带参数的存储过程--查询某个员工的年收入

create or replace procedure upmoney(testname in test_procedure.name%type)?

begin?

update test_procedure t set t.money = t.money + 1000

where t.name = testname;?

end?

upmoney;

特别的地方,参数要指明是输入参数还是输出参数.

存储函数

as ? ? --定义月薪参数

tmoney test_procedure.money%type;

--得到月薪

select t.money

? into tmoney

? from test_procedure t

where t.name = tname;

创建一个多输出参数的存储函数例子

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? tmoney out number,

is

select t.job,t.money,t.dept

? ? into tjob,tmoney,tdept

? ? from test_procedure t

? ? where t.name = tname;

end manyparm;

Oracle下怎样创建存储过程

给你示例你参考下:

----------------------------建立存储过程:

CREATE OR REPLACE PROCEDURE P_name--存储过程名字

(

i_var in int, --输入参数1

)

IS

--下面是存储过程的主体实现部分

v_STR := i_var;

dbms_output.put_line(v_STR);

o_var := v_STR;

exception--错误异常处理部分

when others then

dbms_output.put_line(sqlerrm);--打印错误信息

END P_name;

-----------------------------------调用存储过程示例:

declare

v_in int;

v_in :=100;

P_name (v_in,v_out); --调用存储过程P_name

dbms_output.put_line('存储过程输入结果为:'||v_out);

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章