Oracle 基础 <1> --存储过程

一:存储过程的优点

  (1.模块化:通过子程序,可以对用来实现一种业务逻辑,一个业务功能。

  (2.可重用性:存储过程被创建之后,就可以在任意数目的应用程序中使用。

  (3.可维护性:可以简化维护操作

  (4.安全性:用户可以设置权限。

缺点:

  1.移植问题

  2.重新编译问题

  3.需求变更问题

二:存储过程的用法

1.存储过程的创建

 创建语法:

CREATE [OR REPLACE] PROCEDURE procedure_name  --名称

  [(paraameter_list)] --要用的参数

{IS/AS}

  [local_declarations]--局部声明的变量

BEGIN

    executable_statements;--执行的内容

[EXCEPTION]

    [exception_handlers] --异常处理部分

END [procedure_name] --名称

  说明:

  procedure_name:为存储过程的名字;

  paraameter_list:参数列表,参数中可以使用in和out表示输入和输出参数。可选

  AS表示其他变量声明,IS表示显示游标声明

  local_declarations:局部声明,可选

  executable_statements:可执行语句

  exception_handlers:异常处理语句,可选

  OR REPLACE:可选。如果不包含,创建存储过程如果存在会报错,包含存在会替换。

2.存储过程的调用

    调用语法:

    execute procedure_name (parameters_list);

  说明:

  execute:执行命令,可以缩写为exec。

  procedure_name:存储过程的名称。

  parameters_list:存储过程的参数列表。

    1)命令行方式:2)PLSQL方式: --PL/SQL方式,不需要使用exec

3、存储过程的参数模式:

  (1)in:输入

  (2)out:输出

  (3)in out:输入\输出

  定义存储过程参数语法:

  parameter_name [IN|OUT|IN OUT] dateType [{:= | default} expression]

  注意:

  1)参数IN模式是默认模式。如果未指定参数模式,则默认为IN。对于OUT和IN OUT参数,必须明确指定。

  2)可以再参数列表中为IN参数指定默认值,OUT和IN OUT不可用。

4、存储过程的授权

  语法:

  *grant execute on procedure_name(存储过程名称) to user(用户) --赋予用户 执行权

  *grant execute on procedure_name(存储过程名称) to user(用户) with grant option --该用户也可以有把该权限授予其他用户

5.存储过程的删除

  语法:

  dropp procedure 名称;

三.程序块的跟踪和调试

 1、在SQL*plus下调试

    语法:

  show errors (查看的程序块的类型procedure) (程序块的名称); --查看某个程序块是否存在编译错误

 2、在PL/SQL Developer 工具调试

    F9:开始调试

    Ctrl+R:执行

    Ctrl+N:单步进入

    Ctrl+O:单步跳过

    Ctrl+T:单步跳出

四.程序过程和游标的用法

  --带游标的存储过程
CREATE OR REPLACE PROCEDURE PRO_EMP_IN (EMP_CUR SYS_REFCURSOR)  AS
  V_NAME EMP.ENAME%TYPE;
  V_SAL  EMP.SAL%TYPE;
BEGIN
  LOOP
    FETCH EMP_CUR
      INTO V_NAME, V_SAL;
    DBMS_OUTPUT.PUT_LINE(‘name:‘ || V_NAME || ‘   sal:‘ || V_SAL);
    EXIT WHEN EMP_CUR%NOTFOUND;
  END LOOP;
END;

  --调用带游标的存储过程:
DECLARE
  EMP_CUR SYS_REFCURSOR;
BEGIN
  OPEN EMP_CUR FOR
    SELECT ENAME, SAL FROM EMP;
PRO_EMP_IN(EMP_CUR => EMP_CUR);
  CLOSE EMP_CUR;
END;

  

--调用带输出类型的游标的存储过程
DECLARE
  V_NAME  EMP.ENAME%TYPE;
  V_SAL   EMP.SAL%TYPE;
  EMP_CUR SYS_REFCURSOR;    --声明系统游标类型
BEGIN
  PRO_EMP(EMP_CUR => EMP_CUR);
  LOOP
    FETCH EMP_CUR INTO V_NAME, V_SAL;
    DBMS_OUTPUT.PUT_LINE(‘name:‘ || V_NAME || ‘   sal:‘ || V_SAL);
    EXIT WHEN EMP_CUR%NOTFOUND;
  END LOOP;
  CLOSE EMP_CUR;
END;

五.程序过程和事务的用法

 (1)自主事务:是由另一个事务处理(主事务处理)启动的独立事务处理。

  自主事务:是由零一个事务启动的独立事务处理。自主事务处理可以暂停主事务处理,也就是处理自己存储过程内部的事务,当自主事务处理完之后会恢复主事务处理。

  PRAGMA AUTONOMOUS_TRANSACTION;  --定义为自主事务,不受其他事务提交,回滚的影响

  总结自主事务:

  1、自主事务处理结果的变化不依赖于主事务处理的状态或最终配置。

  2、自主事务处理提交或回滚时,不影响主事务处理的结果。

  3、自主事务提交一旦提交,该自主事务处理结果的变化对于其他事务处理就是课件的。这意味着,用于可以访问已更新的信息,无需等待主事务处理提交。

  4、自主事务处理可以启动其它自主事务处理。

  

时间: 2024-10-06 22:20:55

Oracle 基础 <1> --存储过程的相关文章

Oracle实践--PL/SQL基础之存储过程

PL/SQL基础之存储过程 存储过程:过程是用于完成特定任务的子程序(代码的集合) /* 子程序的优点:1.模块化,将程序分解为逻辑模块: 2.可重用性,可以被任意数目的程序调用: 3,可维护性,简化维护操作: 4.安全性:通过设置权限,使数据更安全 */ --存储过程1,打印HelloWorld create or replace procedure my_pro is --用于声明一些变量 v_string varchar2(20) :='helloworld!'; begin dbms_o

Oracle基础 数据库备份和恢复

原文:Oracle基础 数据库备份和恢复 一.为什么需要数据备份 造成数据丢失的主要原因: 1.介质故障. 2.用户的错误操作. 3.服务器的彻底崩溃. 4.计算机病毒. 5.不可预料的因素. Oracle中故障类型分为以下4种. 1.语句故障: 执行SQL语句过程发生的逻辑故障可导致语句故障.如果用户编写的SQL语句无效,就会发生语句故障.Oracle可自我修复语句故障,撤销语句产生的而印象,并将控制权交给应用程序. 2.用户进程故障 当用户程序出错而无法访问Oracle数据库时,就会发生用户

用sql语句导出oracle中的存储过程和函数

用sql语句导出oracle中的存储过程和函数: SET echo off ; SET heading off ; SET feedback off ; SPOOL 'C:/PRC.SQL' replace SELECT CASE WHEN LINE = 1 THEN 'CREATE OR REPLACE ' || TEXT WHEN LINE = MAX_LINE THEN TEXT || CHR(10 ) || '/' ELSE TEXT END FROM USER_SOURCE A LEF

【转载:Oracle基础知识】Oracle数据库体系结构

先来看张直观的图:                                            oracle 11g 体系结构图 理解Oracle体系结构要充分理解三个概念:数据库(database),数据库实例(instance),会话(session),一定不要把这三个概念弄混. 数据库的概念 (A)    物理存储结构由数据文件.控制文件.重做日志文件组成: 1.       数据文件(datafile) select * from dba_data_files; 数据文件包括存

Oracle中的存储过程

 pl/sql编程语言是Oracle中操作数据库最快的语言,而存储过程本质就是pl/sql,所以通过存储过程来对数据库进行CRUD是最有效的. 不再使用JDBC来进行CRUD操作,因为使用JDBC来进行CRUD操作效率低. 所以,Java通过调用存储过程,来间接调用pl/sql,达到对数据库的CRUD操作. 我们可以把CRUD操作封装到存储过程中,在程序中,调用存储过程即可. 以下是例子:来自于Oracle讲师赵强 --打印Hello World /* 调用存储过程 1. exec sayH

Oracle中的存储过程简单例子

---创建表 create table TESTTABLE ( id1  VARCHAR2(12), name VARCHAR2(32) ) select t.id1,t.name from TESTTABLE t insert into TESTTABLE (ID1, NAME) values ('1', 'zhangsan'); insert into TESTTABLE (ID1, NAME) values ('2', 'lisi'); insert into TESTTABLE (ID1

Oracle基础实训

一.Oracle基础SQL练习 班级表:班级编号(主键.标识列).班级名称.班主任.开班日期老师表:老师编号(主键.标识列) .姓名.性别(默认值‘男’).身份证号(必须是18位数字).联系电话学生表:学号(主键.固定五位数字) .班级编号.姓名.性别.出生日期.联系电话.家庭地址成绩表:编号(主键.标识列) .学号.科目名称.分数 1.表格创建 create table();语法 CREATE TABLE [schema.]table (column datatype [DEFAULT exp

Oracle job procedure 存储过程定时任务(转自hoojo)

Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 select * from dba_jobs; select * from all_jobs; select * from user_jobs; -- 查询字段描述 /* 字段(列) 类型 描述 JOB NUMBER 任务的唯一标示号 LOG_USER VARCHAR2(30) 提交任务的用户 P

Oracle基础知识笔记(10) 约束

大清早打开vs2008,出现这么诡异的错, 删了一个dll的就好了.如图 Oracle基础知识笔记(10) 约束