之前学习的.doc

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
之前学习的

之前学习的PL/SQL块是匿名的,不能将其存储到数据库中。   我们可以命名我们的PL/SQL块,并为他们确定参数,存储在数据库中。这样可以从任何数据库客户端或者工具引用和运行他们,比如SQL*PLUS, Pro*C, JDBC。这些命名的PL/SQL块成为存储过程和函数,他们的集合成为程序包。   优点:   1. 可重用性:一旦命名并保存在数据库中后,任何应用都可以   2. 抽象和数据隐藏   3. 安全性   过程   存储过程就是命了名的PL/SQL块,可以被赋予参数,存储在数据库中,然后由另一个应用或者PL/SQL例程调用。比如   CREATE PROCEDURE my_proc as   BEGIN   NULL;   END;   /   语法:   CREATE [OR REPLACE] PROCEDURE procedure_name (参数)   IS | AS   [PRAGMA AUTONOMOUS_TRANACTION;] --声明自主事务处理。   [本地变量声明]   BEGIN   执行语句部分   [EXCEPTION]   错误处理部分   END[name];   /   CREATE OR REPLACE PROCEDURE my_proc as -- OR REPLACE   BEGIN   Dbms_output.put_line(‘Hello, world’);   END;   /   执行存储过程   set serveroutput on   begin   my_proc   end;   /   直接执行:   execute my_proc   exec my_proc   权限:   表和视图具有SELECT, INSERT, UPDATE, DELETE 这样的特权,而过程具有EXECUTE特权。只有将EXECUTE 特权赋予用户,用户才可以运行它。而将它赋予PUBLIC用户,则所有用户都可以运行。   [试验]   创建3个用户   conn donny/donny   create user chris identified by chris;   此时不能连结数据库,不能创建过程   grant connect, resource to chris;   create user sean identified by sean;   grant connect, resource to sean;   create user mark identified by mark;   grant connect, resource to mark;   使用mark建立一个过程   conn mark/mark   create procedure marks_proc as   begin   null;   end;   /   尝试使用chris用户执行这个过程:   conn chris/chris   exec mark.marks.proc   授权:   conn mark/mark   grant execute on marks_proc to chris   conn chris/chris   exec mark.marks_proc   尝试使用sean用户执行这个过程:   conn sean/sean   exec mark.marks.proc   将execute 授予public用户,使得所有用户都可以执行这个过程   conn mark/mark   grant execute on marks_proc to public;   conn sean/sean   exec mark.marks.proc   参数:   过程可以进行参数化处理,可以为任何合法的PL/SQL类型,有三种模式:IN, OUT, IN OUT   IN 参数通过调用者传入,只能由过程读取,不能改变。是默认的模式,可以具有默认值。   OUT 参数有过程写入。用于过程需要向调用者返回多条信息的时候。不能是具有默认值的变量,也不能是常量,必须向OUT参数传递返回值。   IN OUT 具有两者的特性,可以读取和写入。   IN参数:   Create table t(n number);   Create or replace   procedure insert_into_t (p in number ) is   begin   insert into t values(p);   end insert_into_t;   /   这个时候并没有执行该过程,尝试执行   select * from t;   exec insert_into_t (

文档评论(0)

manyu + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档