http://blog.csdn.net/o9109003234/article/details/24910039

---创建表
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 "Java SOURCE" 
    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';

转载于:https://www.cnblogs.com/Damon-Luo/p/5973856.html

Oracle中的存储过程简单例子相关推荐

  1. 在ORACLE中对存储过程加密

    在ORACLE中对存储过程加密 2007年08月04日 星期六 下午 04:06 1 创建存储过程       create or replace procedure lb_test2 as begi ...

  2. Java中调用Oracle中的存储过程的单元测试代码

    Oracle中的存储过程: /* 创建一个存储函数,返回指定员工的姓名,薪水和年收入 */ create or replace function queryEmp2(eno in number, em ...

  3. 【DB笔试面试750】在Oracle中,请简单描述DG的架构。

    ♣ 题目部分 在Oracle中,请简单描述DG的架构. ♣ 答案部分 DG架构图如下所示: 图 3-20 DG架构图 DG架构按照功能可以分成3个部分: (1)日志发送(Redo Send) (2)日 ...

  4. 在oracle中使用存储过程,如何在ORACLE中使用JAVA存储过程(详解)

    如何在Oracle中使用Java存储过程 (详解) 一.如何缔造java存储过程? 通常有三种步骤来缔造java存储过程. 1.使用oracle的sql语句来缔造: e.g.使用create or r ...

  5. oracle执行存储过程06576,Oracle中执行存储过程call和exec区别

    在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是exec是sqlplus命令,只能在sqlplus中 ...

  6. Oracle中修改存储过程名语句,修改存储过程中使用的语句是,select 语句使用存储过程...

    Q1:如何在SELECT语句中调用存储过程的结果 语法 SELECT [predicate] { *table.*[table.]field1 [AS alias1] [, [table.]field ...

  7. java 存储过程简单例子

    ---创建表 create table TESTTABLE (   id1  VARCHAR2(12),   name VARCHAR2(32) ) select t.id1,t.name from ...

  8. oracle中PLSQL存储过程中如何使用逗号分隔的集合(逗号分隔字符串转换为一个集合)...

    原文: https://blogs.oracle.com/aramamoo/entry/how_to_split_comma_separated_string_and_pass_to_in_claus ...

  9. 如何通过java程序调用oracle中的存储过程

    一.编写一个存储过程,向student表中添加学生. 1.创建一个student表 create table student(stuId number,stuName varchar2(50),stu ...

最新文章

  1. 研发效能改进的实践方法
  2. Microsoft Visual Studio 宏脚本添加注释模板
  3. jquery ajax中使用jsonp的限制[转]
  4. JavaScript二(第一个js程序)
  5. 遇到上亿(MySQL)大表的优化....
  6. opengl 大作业_「陪玩时光」糕妈:说说年糕的小学生活,先从陪作业和家长群聊起...
  7. MATLAB报错“Exception in thread FileDecorationCache request queue java.lang.OutOfMemoryError: Java “
  8. unity 特效shader下载_Unity shader消融特效——(1)逻辑节点篇
  9. 行业首份社会责任报告诞生,满帮如何写下价值新注脚?
  10. 麻瓜编程python web_麻瓜编程 Python Web开发工程师教程 完整版
  11. 敬伟PS教程:基础篇A
  12. Linux运维工程师必备工具合集
  13. 网易云音乐编码_为什么有那么多编码员音乐家?
  14. Apache Spark 3.0 结构化Streaming流编程指南
  15. TCP 为什么需要三次握手?
  16. 专访胡润:中国富豪正变得透明
  17. NodeMCUESP8266学习笔记汇总
  18. python将多个txt合并成一个_Python实现将目录中TXT合并成一个大TXT文件的方法
  19. G65SC802 与 G65SC816 指令集(按字母顺序排列)
  20. 爬取电影天堂全站电影

热门文章

  1. How to determine what causes a particular wait type
  2. 接口测试用例设计思路
  3. hive中的一些参数
  4. 关于推荐和机器学习的几个网站
  5. Averse, Adverse
  6. 分上下半月统计 SQL
  7. c语言解决一元二次方程,一元二次方程求解程序完整代码
  8. 裴蜀定理(note)
  9. android多语言编码格式,在Android中使用国家/地区代码以编程方式更改语言
  10. Morphling:云原生部署 AI , 如何把降本做到极致?