在看别人的代码的时候.发现了例如以下的编译指令. pragma restrict_references(get_attribute_name, wnds); get_attribute_name是一个pl/sql function, 当我试图在这个函数中往一个log表里面插入log信息的时候.编译都通只是,给出例如以下信息, Error(2252,1): PLS-00452: Subprogram 'GET_AMOUNT_NAME' violates its associated pragma …
1,写函数和过程,输入三角形三个表的长度.在控制台打印三角形的面积 -- 创建包 create or replace package pac_area is -- 定义计算三角形面积的过程 procedure pro_area (v_side_first number,v_side_second number,v_side_third number); -- 定义获取三角形面积的函数 function fun_area return number; end; -- 创建包体 create or…
原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天才在于积累!) ——通过知识共享树立个人品牌.   继上七篇:            [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)            [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之…
触发器是存放在数据库中的一种特殊类型的子程序.不能被用户直接调用,而是当特定事件或操作发生时由系统自己主动 调用执行.触发器不能接受參数.所以执行触发器就叫做触发或点火.Oracle事件指的是数据库的表进行的insert .update.delete操作或对视图进行类似的操作. 触发器是很多关系数据库系统都提供的一项技术.在Oracle系统里,触发器类似过程和函数,都有声明,运行和异常 处理过程的PL/SQL块. 触发器的组成: 触发事件:在何种情况下触发:比如:INSERT , UPDATE…
ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问.由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理.除此之外,可以在ORACLE数据库的某些客户端工具中,使用PL/SQL语言也是该语言的一个特点.本章的主要内容是讨论引入PL/SQL语言的必要性和该语言的…
原帖地址:http://blog.csdn.net/chenjinping123/article/details/8737604 ORACLE PL/SQL编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对Oracle数据库进行访问.由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理.除此之外,可以在oracle数据库…
PL/SQL存储过程编程 /**author huangchaobiao *Email:huangchaobiao111@163.com */ PL/SQL存储过程编程(上) 1. Oracle应用编辑方法概览 答:1) Pro*C/C++/... : C语言和数据库打交道的方法,比OCI更常用; 2) ODBC 3) OCI: C语言和数据库打交道的方法,和ProC很相似,更底层,很少用; 4) SQLJ: 很新的一种用Java访问Oracle数据库的方法,会的人不多; 5) JDBC 6)…
编写分页过程         通过pl/sql实现分页过程,再该过程中由简单到难一步步深入,目的在于通过该案例熟悉pl/sql的各种存储过程,包,游标.怎样在java中调用等内容的学习. 1.无返回值的存储过程 比如 1.能够向book表加入书, ---建表 Create table book(bookId number,bookName varchar2(50),publishHouse varchar2(50)); --编写过程 in 表示变量为输入值.假设不写默觉得输入值,而不是输出变量,…
Oracle数据库之PL/SQL包 1. 简介 包(PACKAGE)是一种数据对象,它是一组相关过程.函数.变量.常量和游标等PL/SQL程序设计元素的组合,作为一个完整的单元存储在数据库中,用名称来标识. 包类似于Java或C#语言中的类,包中的变量相当于类中的成员变量,过程和函数相当于类方法. 通过使用包,可以简化应用程序设计,提高应用性能,实现信息隐藏.子程序重载等面向对象语言所具有的功能. 与高级语言中的类相同,包中的程序元素也分为公用元素和私用元素两种,这两种元素的区别是他们允许访问的…
Oracle数据库之开发PL/SQL子程序和包   PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保存到数据库中,以便共享. 过程和函数均存储在数据库中,并通过参数与其调用者交换信息.过程和函数的唯一区别是函数总向调用者返回数据,而过程不返回数据. 1. 存储过程概念 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中.经过第一次编…
将代码封装在机灵的包中 http://www.oracle.com/technetwork/issue-archive/2013/13-jan/o13plsql-1872456.html 绝大多数基于PL/SQL的应用都是由成千上万甚至上百万行代码组成,这里面包括了具体多变的用户需求. 商业逻辑的实现最初是由存储过程和函数完毕,可是开发人员须要考虑将这些过程和函数放在包中维护. 何为包? 包是一组PL/SQL代码元素(游标.类型.变量.过程.函数)集合的程序单元. 通常由包声明(对象声明)和包体…
一.存储过程.存储函数   1.What's This? ①.ORACLE 提供可以把 PL/SQL 程序存储在数据库中,并可以在任何地方来运行它.这样就叫存储过程或函数. ②.存储过程.存储函数的唯一区别是存储函数有返回值,而存储过程没有返回值.   2.创建存储函数 eg.根据部门号返回部门总工资 CREATE OR REPLACE FUNCTION get_salary( dep_id , -- 输入参数, 可以设置默认值 emp_count OUT NUMBER -- 输出参数 ) RE…
本文简单介绍包, 目前来看我用的不多, 除了之前 为了实现 一个procedure 的输出参数是结果集的时候用到过 package. 概念: 包是一组相关过程.函数.变量.常量和游标等PL/SQL程序设计元素的组合. 特点: 它具有面向对象程序设计语言的特点,是对PL/SQL程序设计元素(过程.函数.变量等)的封装.它使程序设计模块化. 包中的程序元素分为两种:公用元素(公用组件).私用元素(私用组件). 组成: 一个包由两个分开的部分组成 (1) 包规范(包定义):用于定义包的公用组件,包括常…
一:包 包是由一组相关的函数,过程,变量,游标等PL/SQL程序设计元素的组合而成的一个PL/SQL程序单元,相当于Java中的类. 包的主要作用是封装:把相同或相似的东西归类,方便维护和管理,提高开发效率,提高性能. 二:包的开发 包的开发包括两部分:包的声明定义  和  包的主体开发. 包的声明定义:声明  类型,变量,常量,异常,游标,函数,过程(声明,但不实现!) ,在包的声明部分定义的变量是公有变量(public),可以在包外通过  包名.变量名  引用. 包的主体开发:在包的主体对…
1.  子程序的各个部分: 声明部分.可执行部分.异常处理部分(可选) 2.子程序的分类: A.  过程 - 执行某些操作 a.  创建过程的语法: CREATE [OR REPLACE]  PROCEDURE  <procedure name> [(<parameter list>)]  IS|AS <local variable declaration> BEGIN <executable statements> [EXCEPTION <excep…
前几天碰到一个有趣的事情:早上同事执行一个包很久没有反应,就中断了执行,发邮件让我帮忙查看具体情况,我用PL/SQL Developer登录后,找到这个包的过程中发现这个包的图标有红色叉叉,也就是说这个包有地方没有编译通过,于是我便单击右键点击“重新编译”,结果一直没有响应,导致PL/SQL Developer直接卡死,刚开始没太留意,直接杀掉PL/SQL Developer相关进程,重新打开它然后编译这个包,结果还是这个情况,还是头一次遇到这种情况,一头雾水. 后来搜索了一下才知道原因: 1:…
一.包 包是一组相关过程.函数.常量.变量.游标.异常等PL/SQL程序设计元素的组合.它类似于C++和Java中的类,其中变量相当于类中的成员变量,过程和函数相当于类中的方法.通过使用包,可以使开发人员利用面向对象的方法进行存储过程的开发,从而提高系统的性能. 包的结构如下: 一个包由包头和包主体组成: 包头(package):包头部分声明包内数据类型.变量.常量.游标.子程序(只有声明)和异常错误处理等元素,这些元素为包的共有元素. 包主体(package body):包主体则是包定义部分的…
创建时定义名称 2.可以被Oracle server 保存 3.可以被任何程序调用 4.可以被共享 存储过程: 1.不带参数的存储过程: SQL> create or replace procedure proc1 is v_ename emp.ename%type; v_sal emp.sal%type ; begin select ename,sal into v_ename,v_sal from emp where empno=&no; dbms_output.put_line('Na…
匿名PL/SQL块回顾 DECLARE (可选)    定义在PL/SQL块中要使用的对象BEGIN (必须)    执行语句EXCEPTION (可选)    错误处理语句END; (必须)匿名块(以DECLARE或BEGIN开始)每次使用时都要进行编译. 匿名块不存储在数据库中,并且它不能从其它的PL/SQL块中进行调用. 过程.函数.包和触发器:都是带名块.(请注重同匿名块的比较) 过程.函数.包和触发器:可以存储在数据库中,并且可以在需要的时候运行. 过程.函数.包和触发器:可以从其它P…
包用于逻辑组合相关的过程和函数,它由包规范和包体两部分组成,包规范用于定义公用的常量 变量,过程和函数,在SQL*PLUS中建立包规范可以使用CREATE PACKAGE命令. 实例如下: CREATE OR REPLACE PACKAGE emp_pkg IS PROCEDURE update_sal(name VARCHAR2,newsal NUMBER); FUNCTION annual_incom(name VARCHAR2) RETURN NUMBER; END; 包头值包含了过程和函…
动态SQL主要是用于针对不同的条件或查询任务来生成不同的SQL语句.最常用的方法是直接使用EXECUTE IMMEDIATE来执行动态SQL语句字符串或字符串变量.但是对于系统自定义的包或用户自定的包其下的函数或过程,不能等同于DDL以及DML的调用,其方式稍有差异.如下见本文的描述. 有关动态SQL的描述,请参考:           PL/SQL --> 动态SQL           PL/SQL --> 动态SQL的常见错误 1.动态SQL调用包中过程不正确的调用方法 --演示环境 s…
匿名PL/SQL块回顾 DECLARE (可选)     定义在PL/SQL块中要使用的对象 BEGIN (必须)     执行语句 EXCEPTION (可选)     错误处理语句 END; (必须) 匿名块(以DECLARE或BEGIN开始)每次使用时都要进行编译. 匿名块不存储在数据库中,并且它不能从其它的PL/SQL块中进行调用. 过程.函数.包和触发器:都是带名块.(请注重同匿名块的比较) 过程.函数.包和触发器:可以存储在数据库中,并且可以在需要的时候运行. 过程.函数.包和触发器…
包用于在逻辑上组合过程和函数,它由包规范和包体两部分组成.1).我们可以使用create package命令来创建包,如:i.创建一个包sp_packageii.声明该包有一个过程update_saliii.声明该包有一个函数annual_income --声明该包有一个存储过程和一个函数create package sp_package is procedure update_sal(name varchar2, newsal number); function annual_income(n…
一.程序包和包体 程序包(package):存储在数据库中的一组子程序.变量定义.在包中的子程序可以被其它程序包或子程序调用.但如果声明的是局部子程序,则只能在定义该局部子程序的块中调用该局部子程序. 它具有面向对象程序设计语言的特点,是对这些PL/SQL 程序设计元素的封装.包类似于JAVA语言中的类,其中变量相当于类中的成员变量,过程和函数相当于类方法. create or replace package stuinfo as type stucur is ref cursor; proce…
在这篇"PL/SQL重新编译包无反应"里面介绍了编译包无反应的情况,今天又遇到一起案例, 在测试环境中,一个包的STATUS为INVALID,重新编译时,一直处于编译状态,检查发现下面两条因素都不存在: 1:当包正在被调用执行时,编译该包会导致无响应情况.     2:包中的对象或依赖对象被其它session所拥有. 后面检查发现包中调用了一个LINKED SERVER,由于迁移测试服务器,原服务器的IP地址变化了,导致LINKED SERVER已经无效了.所以出现了这种情况.重建了L…
一.安装PL/SQL 1.百度下载plsql破解版软件,官网只能使用30天 2.双击plsqldev906.exe进行安装,点击 iagree 3.默认是安装在c盘,可以根据自己需要更改安装目录 4.默认设置继续点击next 5.出现如下窗口,点击finish即可 6.之后点击Close,在桌面上出现PL/SQL的图标则表示安装成功 二.激活PL/SQL 1.双击桌面的plsql启动图标会弹出注册窗口, 如果不小心关掉了,可以在help(帮助)-->register(注册)中呼出这个窗口 2.在…
1.包的定义 一个包由两个独立的部分组成--包头和包体.给部分被单独地存放在数据字典中. .1定义包头 语法: CREATE [OR REPLACE] PACKAGE [schema.] package {IS|AS} pl/sql_package; package是包的名称 pl/sql_package可以是存储过程.函数.变量.类型.异常以及游标的定义. 存储过程或函数必须在包头中预定义.也就是说,在包头中定义存储过程名或函数名以及它们的参数,存储过程或函数的执行代码将在包体中定义. CRE…
现象: 第一次用PL/SQL Developer连接数据库,若用sys用户登录并操作则正常,若用普通用户比如haishu登录并创建一个表则报错“动态执行表不可访问,本会话的自动统计被禁止.在执行菜单里你可以禁止统计,或在v$session,v$sesstat和v$statname表里获得选择权限. 原因分析: 从报错提示就可以看出,原因在于动态性能表相关的权限没有被授权给当前用户 解决方法一(推荐): 根据提示,在执行菜单里禁止统计,具体操作方法:在顶部的菜单中选择“工具”-->“首选项”-->…
1.PLSQL 中的包就相当于java中的package,主要好处有(1)防止命名污染,(2)功能统一,(3)允许重载,(4)可以隐藏核心代码,(5)最重要的就是断开依赖链. 2.对于一个程序需要大量的代码,需要要大量的存储过程就非得用包来实现,一次就把程序加载进去,然后就可以调用了. 3.在建包的时候,基本步骤就是(1)先create package,在里面声明procedure,(2)然后就是create package body,在package body里面编写procedure的代码即…
PL/SQL Developer ,主要是讲一下如何配置PL/SQL Developer ,连接Oracle数据库. [知识点] 1.PL/SQL Developer 是什么? PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发.如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分.PL/SQL Developer侧重于易用性.代码品质和生产力,充分发挥Oracle应用程序开…