子程序与程序包
来源:互联网 发布:网络词鸡精是什么意思 编辑:程序博客网 时间:2024/05/16 06:35
子程序
PL/SQL命名程序块的定义在PL/SQL程序块的声明部分,用户称之为子程序。子程序=过程+函数
存储过程(命名的PL/SQL块,相当于JAVA里面的方法)
创建存储过程的语法:create [ or replace] procedure<procedure_name>(<arg1 [mode] datatype>,…………)is|as[declaration]begin[exception]end[procedure_name];
三种调用方式
第一种 通用 call proc1(); 第二种 pl/sql sql 窗口 begin proc1(); end; 第三种 exec proc1(); sql命令提示符 传参。in(输入 default) out(输出) in out(输入输出) 数据类型不能申明长度。
举例
--第一个create or replace procedure proc1asbegin dbms_output.put_line('hello!');end;--调用call proc1();beginproc1();end;exec proc1();-- in 传值: 传入的是一个常量create or replace procedure proc1(a in number,b varchar, c varchar)asbegin a:=11; insert into dept values(a,b,c); commit;end;-- out 输出: 输入的值被忽略create or replace procedure proc2(a number,b out number)as v emp.sal%type;begin select sal into v from emp where empno=a; b:=v;end;declare b number(7,2);begin b:=10; proc2(7369,b); dbms_output.put_line('工资:'||b);end;-- in out 传引用,传的是对象本身, create or replace procedure proc3(a in out integer ,b in out integer)as temp int;begin temp:=a; a:=b; b:=temp;end;declare a int; b int;begin a:=10; b:=20; dbms_output.put_line('传入前a: '||a); dbms_output.put_line('传入前b: '||b); proc3(a,b); dbms_output.put_line('传入后a: '||a); dbms_output.put_line('传入后b: '||b);end;select * from emp;--函数 function-- 语法,一定两个returncreate or replace function fun1(a int) return intas v emp.sal%type;begin select sal into v from emp where empno=a; return v;end;select fun1(7369) from dual;总结: 函数与过程不同 返回不同: 过程 可以返回,可以不返回,可以返回多个 函数,一定要返回一个 调用方式不同: 过程 单独调用 java CallableStateMent接口 函数 写在SQL里面 java PrereparedStateMent接口
程序包
程序包是对相关类型、变量、常量、游标、异常、过程和函数的封装。由包规范和包主体两部分组成
--包头: 对外声明作用,对外是可见的,声明我这个包里有什么东西create or replace package pack1as procedure proc1(a number,b out number); function fun1(a number) return number;end; --包体 对外是不可观的黑盒,实现包头的声明 create or replace package body pack1is procedure proc1(a number,b out number) as begin select sal into b from emp where empno=a; end proc1; function fun1(a number) return number as v number(7,2); begin select sal into v from emp where empno=a; return v; end fun1;end pack1; --调用declare a int; b number(7,2);begin a:=&工号; pack1.proc1(a,b); dbms_output.put_line('工资:'||b); select fun1(a) into b from dual; dbms_output.put_line('工资:'||b);end; select pack1.fun1(7369),sal from emp;
0 0
- 子程序与程序包
- 子程序和程序包
- 子程序和程序包
- 子程序和程序包
- 子程序和程序包-1
- 子程序和程序包-2
- 子程序和程序包-3
- 子程序和程序包-4
- oracle使用七(子程序和程序包)
- Oracle Lesson 7 子程序和程序包
- ORACLE相关语法--子程序和程序包
- oracle子程序和程序包以及触发器
- ORACLE相关语法--子程序和程序包(package,function,procedure)
- ORACLE相关语法--子程序和程序包(package,function,procedure)
- ORACLE相关语法--子程序和程序包(package,function,procedure)
- 【安博培训技术】Oracle7 子程序和程序包20130912
- 【安博培训笔记】Oracle7 子程序和程序包 作业20130914
- 子程序与变量
- android:installLocation简析
- mips下的syscall
- bzoj3261 最大异或和
- init library failed(UnsatisfiedLinkError):dalvik.system.PathClassLoader
- Key-Value Observing
- 子程序与程序包
- Android中使用Fragment
- LeetCode87——Scramble String
- KVC Collection Operators
- mips下的汇编指令集
- 公平锁 非公平锁
- System.DateTime和System.TimeSpan
- JavaSE学习笔记_2:Java语言基础
- [leetcode281]Zigzag Iterator