JavaEE开源博客-阿Q ~用心做事,诚信做人!以德为本,兼顾各方!细心观察,联系推理! ~遵守规范->重构->可复用代码->可扩展性 *大道至简* ~时间是挤出来的,要成功,你就必须在最短的时间内采取最大量的行动!坚持到底,看到的就是胜利!再低下、再简单、再不愿意做的事情,你也要把它当成自己的事业做好!以马内利,阿们! |
|
子程序 1、 存储子程序和数据字典 当使用CREATE OR REPLACE命令创建子程序时,该子程序就存储在数据字典中。除去子程序中的源文本外,该子程序是以编译后的中间代码形式存储的,这种中间代码叫做p-code。 子程序的信息可以通过各种数据字典视力来访问,视力user_object包括了当前用户拥有的所有对象的信息。该信息包括了对象的创建以及最后修改的时间,对象类型(表、序列、函数等)和对象的有效性。视图user_source包括了对象的源程序代码。而视图user_error则包括了编译错误信息。 例如,查询视力user_objects获知某一子程序的状态、类型等,执行如下命令: SELECT OBJECT_NAME, OBJECT_TYPE, STATUS -- EVEN_ODD 为存储过程或函数的名称 执行下面命令,从user_source视图中获取子程序’EVEN_ODD’的源代码, SELECT TEXT 2、 本地子程序 子程序可以在块的声明部分定义,以这种方式定义的子程序叫做本地子程序。 SET SERVEROUTPUT ON DECLARE TYPE BookRecord IS RECORD ( BOOKNO INTEGER, BOOKName VARCHAR2(40), ISBN VARCHAR2(20), AUTHORNAME VARCHAR2(20), PRESSNAME BOOKName%TYPE, Status CHAR(1), BOOKPRICE FLOAT ); Book1 BookRecord; PROCEDURE PrintBookRecord(BookA IN BookRecord) IS BEGIN DBMS_OUTPUT.enable; DBMS_OUTPUT.put('序号: '||BookA.BOOKNO); DBMS_OUTPUT.put('书名: '||BookA.BOOKName); DBMS_OUTPUT.put('ISBN: '||BookA.ISBN); if BookA.Status = 'Y' then DBMS_OUTPUT.put('目前有货'); else DBMS_OUTPUT.put('目前缺货'); end if; DBMS_OUTPUT.put_line(''); END PrintBookRecord; BEGIN Book1.BOOKNO:=102; Book1.BOOKName:= 'JavaEE ceo'; Book1.ISBN:= '26'; Book1.Status:= 'Y'; PrintBookRecord(Book1); END; / 该过程只在声明的块中可见, 其作用域从声明点开始到该块结束为止。其他块不能调用该过程,因为该过程对其他块来说是不可见的。 任何本地子程序都必须在声明部分的结尾处声明,否则将得到编译错误。 3、 存储子程序与本地子程序的比较 1)存储子程序以编译后生成的中间代码本地子程序被编译为该程序所在块的一部 4、 执行权限 为了能够对表进行访问,必须使用SELECT、INSERT、UPDATE和DELETE对象的特权,语句GRANT把这些特权赋予数据库用户或角色,但对于存储子程序来说,相关的特权是EXECUTE。 如:把User1的过程MyProcedure的执行权限赋予一个数据库用户User2: GRANT EXECUTE ON MyProcedure TO User2;
个人博客:http://zhan.zhmy.com |