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

oracle的存储过程?

发布网友 发布时间:2022-04-22 02:58

我来回答

1个回答

热心网友 时间:2023-12-02 16:40

一:存储过程

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

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

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

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

1:语法

 1)创建

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

{AS|IS}

[说明部分]

BEGIN

可执行部分

[EXCEPTION

错误处理部分]

END[过程名];

 说明:

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

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

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

2)删除存储过程:

DROP PROCEDURE 存储过程名;

3)修改存储过程:

      ALTER PROCEDURE 存储过程名 COMPILE; 

4)执行存储过程

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

     或

       BEGIN 

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

END;

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

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

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

 2:参数说明

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

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

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

 1)参数名 IN 数据类型 DEFAULT 值;

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

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

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

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

2)参数名 OUT 数据类型;

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

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

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

3)参数名 IN OUT 数据类型 DEFAULT 值; 

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

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

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

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

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

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

EXECUTE CHANGE_SALARY(P_RAISE=>80,P_EMPNO=>7788);  //=>运算符左侧是参数名,右侧是参数表达式

 二:函数

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

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

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

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

1:语法

1)创建:

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

RETURN数据类型

{AS|IS}

[说明部分]

BEGIN

可执行部分

RETURN(表达式)

[EXCEPTION

    错误处理部分]

END[函数名];

 说明:

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

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

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

2)删除

      DROP FUNCTION 函数名;

3)修改

      ALTER PROCEDURE 函数名 COMPILE;

4)执行

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

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

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

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

 2:查看数据字殿

DESCRIBE USER_SOURCE ; //命令行中

 3:查看存储过程的参数

DESCRIBE say_hello; //后面是过程名

 4:查看发生编辑错误

SHOW ERRORS ;

 5:查询一个存储过程或函数是否是有效状态(即编译成功)

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

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

6:查看存储过程与表的依赖关系

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的存储过程是失败的还是成功的呢?答案是成功的。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 关闭花呗后以后开通额度还是以前那么多吗 ospf路由重分发 oracle怎么执行存储过程 5级地震有多严重? 路由的重分发 50元花呗额度关闭再开额度会增加吗 花呗关闭再开通额度会变吗? 5级地震到底有多可怕 ospf、rip、eigrp间如何路由重分发何? ospf、rip、eigrp间如何路由重分发何 思科怎样实现路由器重发布 路由器配置重分发的时候出现Only classful network... 路由器怎么重分发配置? 路由器重分发的所有指令 路由器重分发的所有指令是什么? 如何配置路由重分发和注意事项 静态路由和ospf重分发的具体命令? 什么是第二类和第三类非药品类易制毒危险化学品 自己做的炸土豆条怎么做好吃又简单,做法 oppo手机接不了电话一直亮屏,关不了机是怎么回事? 花呗关闭后再开通原有额度会变吗? 路由重分发的基本介绍 5级地震的破坏力是什么? ORACLE 存储过程是什么? 它的用处,好处是什么?... 5~6.5级地震能造成多大伤害 我想问一下关于配置RIP与OSPF路由重分发 我头一次... 公交卡让我放洗衣机里洗了,还能用吗? 花呗关了过一段时间再开额度会变吗? Oracle数据库的存储过程怎么写? 5级地震有多大威力 锐捷RSR20 怎么设置路由重分发 五级地震是什么概念 有多大 oracle中的存储过程是什么? 路由的rip和静态路由重分发怎么配置啊??我一道两... oracle中的存储过程怎么写 oracle存储过程如何输出信息 5级左右的地震造成的伤害是什么样的啊??危害大吗... 在配置路由重分发时如果同时有RIP OSPF和EIGRP应如... 公交车卡被水浸湿还能用吗? 路由重分发的注意事项