--创建表
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, NAME)
values ('3', 'wangwu');

insert into TESTTABLE (ID1, NAME)
values ('4', 'xiaoliu');

insert into TESTTABLE (ID1, NAME)
values ('5', 'laowu');
---创建存储过程
create or replace procedure test_count
as
v_total number(1);
begin
  select count(*) into v_total from TESTTABLE;
  DBMS_OUTPUT.put_line('总人数:'||v_total);
end;
--准备
--线对scott解锁:alter user scott account unlock; 
--应为存储过程是在scott用户下。还要给scott赋予密码
---alter user scott identified by tiger;
---去命令下执行
EXECUTE test_count;
----在ql/spl中的sql中执行
begin
  -- Call the procedure
  test_count;
end;

create or replace procedure TEST_LIST
      AS 
      ---是用游标
        CURSOR test_cursor IS select t.id1,t.name from TESTTABLE t;
      begin
        for Test_record IN test_cursor loop---遍历游标,在打印出来
           DBMS_OUTPUT.put_line(Test_record.id1||Test_record.name);
           END LOOP;
            test_count;--同时执行另外一个存储过程(TEST_LIST中包含存储过程test_count)
            end;
      -----执行存储过程TEST_LIST
      begin 
         TEST_LIST;
         END;
       ---存储过程的参数
        ---IN  定义一个输入参数变量,用于传递参数给存储过程   
        --OUT 定义一个输出参数变量,用于从存储过程获取数据   
        ---IN OUT  定义一个输入、输出参数变量,兼有以上两者的功能  
        --这三种参数只能说明类型,不需要说明具体长度 比如 varchar2(12),defaul 可以不写,但是作为一个程序员最好还是写上。
        
      ---创建有参数的存储过程
      create or replace procedure test_param(p_id1 in VARCHAR2 default '0')
        as v_name varchar2(32);
        begin
          select t.name into v_name from TESTTABLE t where t.id1=p_id1;
          DBMS_OUTPUT.put_line('name:'||v_name);
         end;
      ----执行存储过程
      begin
         test_param('1');
       end;
       
       default '0'

---创建有参数的存储过程
      create or replace procedure test_paramout(v_name OUT VARCHAR2 )
        as  
        begin
          select name into v_name from TESTTABLE where id1='1';
          DBMS_OUTPUT.put_line('name:'||v_name);
         end;
      ----执行存储过程
    DECLARE  
        v_name VARCHAR2(32);   
        BEGIN  
        test_paramout(v_name);
        DBMS_OUTPUT.PUT_LINE('name:'||v_name);   
        END;  
    -------IN OUT
    ---创建存储过程
    create or replace procedure test_paramINOUT(p_phonenumber in out varchar2)
    as  
    begin 
      p_phonenumber:='0571-'||p_phonenumber;
    end;
    
    ----
    DECLARE  
    p_phonenumber VARCHAR2(32);  
    BEGIN  
    p_phonenumber:='26731092';  
    test_paramINOUT(p_phonenumber);  
    DBMS_OUTPUT.PUT_LINE('新的电话号码:'||p_phonenumber);  
    END;  
    -----sql命令下,查询当前用户的存储过程或函数的源代码,
    -----可以通过对USER_SOURCE数据字典视图的查询得到。USER_SOURCE的结构如下:
    
    SQL> DESCRIBE USER_SOURCE ;
    Name Type           Nullable Default Comments                                                                                                      
    ---- -------------- -------- ------- ------------------------------------------------------------------------------------------------------------- 
    NAME VARCHAR2(30)   Y                Name of the object                                                                                            
    TYPE VARCHAR2(12)   Y                Type of the object: "TYPE", "TYPE BODY", "PROCEDURE", "FUNCTION",
    "PACKAGE", "PACKAGE BODY" or "JavaSOURCE" 
    LINE NUMBER         Y                Line number of this line of source                                                                            
    TEXT VARCHAR2(4000) Y                Source text                                                                                                   
    SQL> 
    ---查询出存储过程的定义语句
    select text from user_source WHERE NAME='TEST_COUNT';
    ----查询存储过程test_paramINOUT的参数
    SQL> DESCRIBE test_paramINOUT;
    Parameter     Type     Mode   Default? 
    ------------- -------- ------ -------- 
    P_PHONENUMBER VARCHAR2 IN OUT  
    SQL> 
    ---查看当前的存储过程的状态是否正确,
    ---VALID为正确,INVALID表示存储过程无效或需要重新编译
    SELECT STATUS FROM USER_OBJECTS WHERE OBJECT_NAME='TEST_COUNT';
    -----如果要检查存储过程或函数的依赖性,可以通过查询数据字典USER_DENPENDENCIES来确定,该表结构如下:
    SQL> DESCRIBE USER_DEPENDENCIES;
    Name                 Type          Nullable Default Comments                                                   
    -------------------- ------------- -------- ------- ---------------------------------------------------------- 
    NAME                 VARCHAR2(30)                   Name of the object                                         
    TYPE                 VARCHAR2(17)  Y                Type of the object                                         
    REFERENCED_OWNER     VARCHAR2(30)  Y                Owner of referenced object (remote owner if remote object) 
    REFERENCED_NAME      VARCHAR2(64)  Y                Name of referenced object                                  
    REFERENCED_TYPE      VARCHAR2(17)  Y                Type of referenced object                                  
    REFERENCED_LINK_NAME VARCHAR2(128) Y                Name of dblink if this is a remote object                  
    SCHEMAID             NUMBER        Y                                                                           
    DEPENDENCY_TYPE      VARCHAR2(4)   Y                                                                               
    SQL>  
    ---查询存储过程TEST_COUNT的依赖关系
    SELECT REFERENCED_NAME,REFERENCED_TYPE FROM USER_DEPENDENCIES WHERE NAME='TEST_COUNT';

Oracle中的存储过程简单例子的更多相关文章

  1. oracle 中的存储过程

      oracle 中的存储过程 --oracle 中的存储过程, --不带任何参数的 CREATE OR REPLACE PROCEDURE PRO_TEST AS -- AS 和is 没有任何区别 ...

  2. <正则吃饺子> :关于oracle 中 with的简单使用

    oracle中 with的简单使用介绍,具体可以参见其他的博文介绍,在这里只是简单的介绍: with 构建了一个临时表,类似于存储过程中的游标,我是这么理解的. 一.数据准备: select * fr ...

  3. Oracle中执行存储过程call和exec区别

    Oracle中执行存储过程call和exec区别 在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是e ...

  4. oracle 中 dblink 的简单使用

    oracle 中 dblink 的简单使用 dblink的作用 当用户要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中必须创建了远程数据库的dblink,通过dblink本地数据库可以像访 ...

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

    用sql语句导出oracle中的存储过程和函数: SET echo off ; SET heading off ; SET feedback off ; SPOOL 'C:/PRC.SQL' repl ...

  6. oracle中print_table存储过程实例介绍

    oracle中pro_print_table存储过程实例介绍 存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中.这 ...

  7. oracle中的存储过程例子

    用了两年Oracle还没写过存储过程,真是十分惭愧,从今天开始学习Oracle存储过程,完全零起点,争取每日一篇学习笔记,可能开始认识的不全面甚至有错误,但坚持下来一定会有收获. . 建立一个存储过程 ...

  8. mysql存储过程简单例子

    1.之前经常在oracle数据库中使用存储过程,换到mysql后用的不多,但是有时候也用,大致记录一下,基本和oracle的一样. CREATE DEFINER = `root`@`%` PROCED ...

  9. Mybatis调用Oracle中的存储过程和function

    一.Mybatis调用存储过程 1 在数据库中创建以下的存储过程create or replace procedure pro_hello(p_user_name in varchar2,p_resu ...

随机推荐

  1. [BZOJ1587]叶子合并leaves

    Description 在一个美丽的秋天,丽丽每天都经过的花园小巷落满了树叶,她决定把树叶堆成K堆,小巷是笔直的 共有N片树叶(树叶排列也是笔直的),每片树叶都有一个重量值,并且每两片想邻的树叶之间的 ...

  2. 微信小程序获取用户信息,解密encryptedData 包括敏感数据在内的完整用户信息的加密数据

    package com.iups.wx.wxservice; import java.io.UnsupportedEncodingException; import java.security.Alg ...

  3. Java中遍历map的四种方法 - 转载

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...

  4. 【Boost】boost库asio详解5——resolver与endpoint使用说明

    tcp::resolver一般和tcp::resolver::query结合用,通过query这个词顾名思义就知道它是用来查询socket的相应信息,一般而言我们关心socket的东东有address ...

  5. SVM-支持向量机原理详解与实践

    前言 去年由于工作项目的需要实际运用到了SVM和ANN算法,也就是支持向量机和人工神经网络算法,主要是实现项目中的实时采集图片(工业高速摄像头采集)的图像识别的这一部分功能,虽然几经波折,但是还好最终 ...

  6. 如果在applicationContext.xml中没有配置bean的属性,那么也会导致空指针异常

    报错如下: java.lang.NullPointerException cn.itcast.action.VisitAction.toAddPage(VisitAction.java:37) sun ...

  7. Ubuntu16.04 Kdevelop汉化及配置

    关闭Kdevelop sudo apt-get install kdevelop-l10n 再打开. 字体选择 Sans Serif :style:Normal:这样更舒服且不影响中文的排版,如何改成 ...

  8. easyui datagrid 行编辑功能

    datagrid现在具有行编辑能力了,使用时只须在columns中为需要编辑的列添加一个editor属性,编辑保存时同时具有数据校验能力. 看一个例子效果图: 代码如下: $('#tt').datag ...

  9. tracecaller.cs

    #region Utility #if TRACE private const string Traceformat = "\"{0}\",\"{1:yyyy- ...

  10. Superset 初探

    安装都是借鉴的别人的,已经剪裁下来.到自己文件夹里了. 下面介绍.如何启动superset ,BI 分析工具.这是我以前的强项.应该没问题. 问题: 安装好了之后,再打开localhost 就拒绝访问 ...