---创建一个表

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赋予password

---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';

版权声明:本文博主原创文章。博客,未经同意不得转载。

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

  1. 创建并在项目中调用SQLSERVER存储过程的简单示例

    使用SQLSERVER存储过程可以很大的提高程序运行速度,简化编程维护难度,现已得到广泛应用.创建存储过程 和数据表一样,在使用之前需要创建存储过程,它的简明语法是: 引用: Create PROC ...

  2. java 调用mysql的存储过程(简单示例)

    首先我在mysql的test数据库里定义了一个student表: create table student4( id   int   primary key, sanme char(5) ); 插入几 ...

  3. MySQL中的存储函数和存储过程的简单示例

    存储函数 定义 CREATE FUNCTION `fn_sum`(`a` int,`b` int) RETURNS int(11) BEGIN RETURN a + b; END 调用 Navicat ...

  4. 转 Java连接Oracle数据库的简单示例

    https://www.cnblogs.com/joyny/p/11176643.html https://community.oracle.com/thread/4096458 import jav ...

  5. oracle 存储过程 示例

      oracle 存储过程 示例 CreationTime--2018年9月4日09点49分 Author:Marydon 1.情景展示 对VIRTUAL_QRCODELOG表的静态二维码,动态二维码 ...

  6. Oracle创建表语句(Create table)语法详解及示例、、 C# 调用Oracle 存储过程返回数据集 实例

    Oracle创建表语句(Create table)语法详解及示例 2010-06-28 13:59:13|  分类: Oracle PL/SQL|字号 订阅 创建表(Create table)语法详解 ...

  7. [转]使用ADO.NET访问Oracle存储过程

    本文转自:http://www.cnblogs.com/datasky/archive/2007/11/07/952141.html 本文讨论了如何使用 ADO.NET 访问 Oracle 存储过程( ...

  8. Oracle存储过程详解(引用)+补充(转) dbms_output包 good

    执行存储过程时,execute和call的区别 EXEC is a sqlplus command that put its argument as an anonymous pl/sql block ...

  9. Oracle——存储过程的使用

    为什么使用存储过程? 存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度. 存储过程的定义: 存储过程(Sto ...

随机推荐

  1. Python学习路径8——Python对象2

    1.标准型运营商 1.1对象值对照 比较运算符用于如果相同类型的对象是相等.所有的内建类型的是在比较操作中支持,返回布尔比较操作值True 或 False. <span style=" ...

  2. UE4编码规范

    翻译原文为Unreal 的官方!自己看着总结了一下,不一定每条都能对上.不足之处,请多多不吝赐教! 原文地址:  unreal CodingStandard UE4编码规范 在Epic,有简单几条代码 ...

  3. OpenStack_Swift源代码分析——Ring基本原理及一致性Hash算法

    1.Ring的基本概念 Ring是swfit中最重要的组件.用于记录存储对象与物理位置之间的映射关系,当用户须要对Account.Container.Object操作时,就须要查询相应的Ring文件( ...

  4. 【Swift】学习笔记(一)——熟知 基础数据类型,编码风格,元组,主张

    自从苹果宣布swift之后,我一直想了解,他一直没有能够把它的正式学习,从今天开始,我会用我的博客来驱动swift得知,据我们了解还快. 1.定义变量和常量 var  定义变量,let定义常量. 比如 ...

  5. T-SQL基础(5) - 表表达式

    1.派生表(derived table)select YEAR(orderdate) as orderyear, COUNT(distinct custid) as numcustsfrom Sale ...

  6. java基础程序题

    发现自己初学java时保存在word里的练习题,哈哈,放博客里面来作为纪念吧~~~ [程序1]  题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔 ...

  7. FTP文件操作之上传文件

    上传文件是一个比较常用的功能,前段时间就做了一个上传图片的模块.开始采用的是共享文件夹的方式,后来发现这种方法不太好.于是果断将其毙掉,后来选择采用FTP的方式进行上传.个人感觉FTP的方式还是比较好 ...

  8. cnBlog 的windows live writer 客户端配置

    重装系统后总是忘,备个档 CNBLOG 博客名 cnblog 日志帐户 http://www.cnblogs.com/liulaocai2/ 用户:359444066 密码:同QQ密码,比QQ少一位 ...

  9. 《Qt on Android核心编程》夹

    china-pub在售前,售中环节退房,折扣低! 有朋友想看看<Qt on Android核心编程>的文件夹,So-- 文件夹     <Qt on Android核心编程>文 ...

  10. jQuery Validate插入 reomte使用详细的说明

    在用户注冊时常常要通过ajax请求推断用户账号是否已注冊,最方便的方法便是用jQuery Validate插件 reomte方法 Jquery Validate插件, 调用远程方法验证參数, remo ...