`
T240178168
  • 浏览: 361672 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

oracle 函数,包,存储过程简单实例

阅读更多
/*
存储过程
参数类型:
in 表示入参
out 表示出参
in out 表示既是入参又是出参
默认情况下是入参
注意: 存储过程的参数数据类型不需要指定精度
*/
create or replace procedure pro_myjob(title in varchar2)
is
var_mytitle jobs.job_title%type;
begin
   select j.job_title into var_mytitle from jobs j where j.job_id=title;
   dbms_output.put_line('工种:'||var_mytitle);
   exception
   when no_data_found then
     raise_application_error(-20000,'no data found');
 
end;

create or replace procedure sp_insertJobs(p_id varchar2,p_title varchar2,p_salarymin number,p_salarymax number)
is
begin
       insert into jobs values(p_id,p_title,p_salarymin,p_salarymax);
       commit;
end;

--出参---

create or replace procedure sp_myjobForOut(p_title in varchar2, p_errMsg out varchar2)
as
var_mySalary jobs.max_salary%type;
--var_mySalary number(10);
begin
  select j.max_salary into var_mySalary from jobs j where j.job_id=p_title;
  dbms_output.put_line('最高薪水:'||var_mytitle);
  exception
  when no_data_found then
       p_errMsg:='没有'||p_title||'工号对应的数据';
  when too_many_rows then
       p_errMsg:=p_title||'工号对应的数据过多';
  when others then
       p_errMsg:='不确定的错误';
end;
--存储过程调用-----
declare
var_err varchar2(200);
begin
dbms_output.put_line('bef'||var_err);
sp_myjobForOut('AD_PREwS',var_err);
dbms_output.put_line('af'||var_err);
end;

--参数 in out-----
create or replace procedure sp_myjobintout(p_msg in out varchar2)
is
v_msg varchar2(200);
begin
   select j.max_salary into v_msg from jobs j where j.job_id=p_msg;
  p_msg:='最高薪水:'||v_msg;
  exception
  when no_data_found then
       p_msg:='没有工号对应的数据';
  when too_many_rows then
       p_msg:='工号对应的数据过多';
  when others then
       p_msg:='不确定的错误';
end;

declare
var_err varchar2(200):='AD_PRESs';
begin

dbms_output.put_line('bef'||var_err);
sp_myjobintout(var_err);
dbms_output.put_line('af'||var_err);
end;

select * from jobs


declare
var_msg varchar2(20);
begin
  pro_myjob('AD_PRES2',var_msg);
  dbms_output.put_line(var_msg);
end;

--存储过程的查看-----
select * from user_source
where lower(name) = 'sp_myjobintout';

--删除------
drop procedure sp_myjobintout

select * from jobs

--------------创建函数--------------------

select * from demo where did=1;
select substr(dname,3,3) from demo where did=1;

create or replace function f_demo(aid number) return varchar2
is
name1 varchar2(20);
begin
    select dname into name1 from demo where did=aid;
    return name1; 
end;
-------------调用-----

declare
name1 varchar2(20);
begin
   --name1:=f_demo(aid=>3);
   select f_demo(3) into name1  from dual;
   dbms_output.put_line(name1);
end;
-----2 comandline
var name1 varchar2;--定义变量
exec :name1:=f_demo(1);---执行  :name1
--------------------------------------
create or replace function f_demo_row(aid number) return demo%rowtype
is
rowdata demo%rowtype;
begin
    select * into rowdata from demo where did=aid;
    return rowdata;
    exception
      when others then
          dbms_output.put_line('error:'||sqlerrm); 
end;
----------pl/sql调用------
declare
rowdata1 demo%rowtype;
begin
   rowdata1:=f_demo_row(3);
   dbms_output.put_line(rowdata1.did||'  '||rowdata1.dname);
end;
-------------------包------------

create or replace package pkg_t2
is
       procedure p_demo(aid in number,aname in out varchar2);
       function f_demo(aid number) return varchar2;
       function f_demo(aname varchar2) return demo%rowtype;
end pkg_t2;
---包体--------
create or replace package body pkg_t2
is
       procedure p_demo(aid in number,aname in out varchar2)
          is
          name1 varchar2(10);
          begin
            select dname into name1 from demo where did=aid;
            aname:=name1;
          end p_demo;
       function f_demo(aid number) return varchar2
       is
          name1 varchar2(20);
          begin
              select dname into name1 from demo where did=aid;
              return name1; 
          end f_demo;
       function f_demo(aname varchar2) return demo%rowtype-- ref
       is
          rowdata demo%rowtype;
          begin
              select * into rowdata from demo where dname=aname;
              return rowdata;
              exception
                when others then
                    dbms_output.put_line('error:'||sqlerrm); 
          end; 
end pkg_t2;
------------调用-----------
pkg_t2.f_demo(aname=>'sss')

------------包 与 游标-----------------

create or replace package pkg_cur is
type my_cur_type is ref cursor;
cursor mycur return jobs%rowtype;
procedure sp_getdata(p_sql varchar2,p_cursor in out my_cur_type);
end pkg_cur;

create or replace package body pkg_cur is
cursor mycur return jobs%rowtype is select * from jobs;
procedure sp_getdata(p_sql varchar2,p_cursor in out my_cur_type)
  as
  begin
  open p_cursor for p_sql;
  end sp_getdata;
end pkg_cur;

declare
my_cur pkg_cur.my_cur_type;
rowdata jobs%rowtype;
begin
  -- my_cur:=pkg_cur.mycur;
   open pkg_cur.mycur;
  loop
  fetch pkg_cur.mycur into rowdata;
  exit when pkg_cur.mycur%notfound;
  dbms_output.put_line('did:'||rowdata.job_id||'   dname:'||rowdata.job_title);
end loop;
close pkg_cur.mycur;   
end;

select * from jobs


create or replace procedure sp_getdata(p_sql varchar2,p_cursor in out pkg_cur.my_cur_type)
  as
  begin
  open p_cursor for p_sql;
  end;
分享到:
评论

相关推荐

    oracle 的函数、存储过程、游标、简单实例

    oracle 的函数、存储过程、游标、简单实例 oracle常用语句oracle 的函数、存储过程、游标、简单实例 oracle常用语句

    oracle中的存储过程.函数,包

    oracle中的存储过程.函数,包的创建,更新实例

    Oracle存储过程和函数(最详细包含emp 表实例操作,边看边操作)

    Oracle存储过程和函数(最详细包含emp 表实例操作,边看边操作),目前最详细的存储过程文档,不好你举报我。含好多ORACLE SCOTT中emp表的实例。

    Python使用cx_Oracle调用Oracle存储过程的方法示例

    本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端创建简单的存储过程。 create or replace ...

    Oracle经典自定义创建函数和存储过程

    自定义函数不能被直接在Java中调用,可以通过存储过程调用函数的方法。本文采用实例的方法,介绍如何在Oracle数据库客户端PL/SQL中创建自定义函数,然后创建相应的存储过程调用该函数,最终实现一个实例计算。

    Oracle数据库存储过程技术文档.doc

    第一章 oracle存储过程概述 2 1.1 存储过程基本结构(PROCEDURE) 3 1.1.1创建存储过程 3 1.1.2 存储过程删除 5 1.1.3 调用存储过程 5 1.2存储函数(FUNCTIONE) 6 1.2.1 创建存储函数 6 1.2.2 删除存储函数 7 1.3 包...

    oracle 存储过程、函数和触发器用法实例详解

    本文实例讲述了oracle 存储过程、函数和触发器用法。分享给大家供大家参考,具体如下: 一、存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程、存储函数。 创建存储过程 用CREATE ...

    存储过程、存储函数和包的相关知识与实例

    本文的实例全部经过实际操作验证,欢迎下载学习!

    Oracle存储过程-1

    Oracle 数据类型及存储方式 概述 通过实例,全面而深入的分析oralce的基本数据类型及它们的存储方式。以ORACLE 10G为基础,介绍oralce 10g引入的新的数据类型。让你对oracle数据类型有一个全新的认识。揭示一些不...

    oracle基础教程:第8章_存储过程、函数和包.pdf

    oracle 存储过程,函数,包的超详细讲解课件带有实例讲解并有实例练习。

    Oracle百分比分析函数RATIO_TO_REPORT() OVER()实例详解

    本文通过实例代码给大家介绍了oracle百分比分析函数RATIO_TO_REPORT() OVER(),代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

    Oracle生成单据编号存储过程的实例代码

    Oracle生成单据编号存储过程,在做订单类似的系统都可能会存在订单编号不重复,或是流水号按日,按年,按月进行重新编号。 可以参考以下存储过程 CREATE OR REPLACE procedure Pro_GetBillNO(TypeTable in varchar2...

    Oracle数据库SQL和PL SQL实例教程 高继民(ppt)

    oracle数据库ppt 第1章 关系数据库与SQL语言环境 第2章 数据查询 第3章 数据操作 第4章 表和视图 第5章 其他数据库对象 第6章 SQL基础 ...第8章 存储过程、函数和包 第9章 触发器 第10章 数据库开发应用实例

    oracle分页存储过程 oracle存储过程实例

    代码如下:import java.sql.CallableStatement;import java.sql.Connection;...public class TestPage { public TestPage() { } public static void main(String[] args) { String driver = “oracle.jdbc.driver

    oracle实例

    里面分开写了oracle的各个部分的实例,有包,函数,存储过程,触发器等,适合入门的人。

    Oracle常用对象大全及实例详解.pdf

    本文介绍了Oracle 中的表、索引、视图、同义词、函数、存储过程、触发器及包等。测试通过的基础上,采用语法结合实例的方式,对这些常用对象使用方法、命令、步骤及注意事项进行了说明和讲解,读者按照本文学习,...

    Oracle存储过程循环语法实例分析

    本文实例讲述了Oracle存储过程循环语法。分享给大家供大家参考,具体如下: 1、简单循环 语法 loop statements; end loop; 例子: counter := 0; loop counter := counter + 1; exit when counter = 5; end ...

    21天学通Oracle

    8.3.3 调用程序包中的函数/存储过程 157 8.3.4 程序包中的变量 158 8.4 本章实例 159 8.5 本章小结 161 8.6 习题 161 …… 第9章 游标(教学视频:36分钟) 162 第10章 触发器(教学视频:58分钟) 178 第11...

    oracle 入门很简单.zip

    目录 第1章数据库简介ppt ...第17章函数与存储过程ppt 第18章数据车性能优化.ppt 第l9章数据库一致性与事务管理。ppt 第20章并发控制.ppt 第2l章Oracle在开发中的应用ppt 第22章Oracle+Hibernate应用实例.ppt

Global site tag (gtag.js) - Google Analytics