1.开发PL/SQL过程

· 程序是指被命名的PL/SQL块

·可以存在参数

·可以被其他应用程序调用

·语法:

CREATE [OR REPLACE] PROCEDURE procedure_name

[(argument1 [mode1] datatype1,

argument2 [mode2] datatype2,

. . .)]

IS | AS

PL/SQL block...

procedure_body;

实例:

①不带参数的存储过程

SQL> CREATE OR REPLACE PROCEDURE proc1 IS

2     v_ename emp.ename%TYPE;

3     v_sal  emp.sal%TYPE;

4  BEGIN

5    SELECT ename,sal INTO v_ename,v_sal FROM emp WHERE empno=&NO;

6    dbms_output.put_line('Name is: '||v_ename||','||'salary is :'||v_sal);

7    EXCEPTION

8       WHEN no_data_found THEN

9         dbms_output.put_line('you number is not corrent,please input again!');

10       WHEN OTHERS THEN

11         dbms_output.put_line('Others error!');

12   END;

13  /

Procedure created

SQL> exec proc1;            //执行存储过程

Name is: SMITH,salary is :4600

PL/SQL procedure successfully completed

通过数据字典查看procedure信息:

SQL> select OBJECT_NAME,PROCEDURE_NAME,OBJECT_TYPE from user_procedures;

OBJECT_NAME     PROCEDURE_NAME   OBJECT_TYPE

--------------------------------------------------------------------------------

PROC1                               PROCEDURE

②带有参数的存储过程

参数定义中,IN、OUT和IN OUT代表参数的三种不同模式

IN:当调用存储过程时,该模式的形参接收对应实参的值,并且是只读的。默认为IN

OUT:该形参被认为只能写,即只能为其赋值。在存储过程中不能读它的值。返回时,将该形参值传给相应的形参。

IN OUT:都允许

IN:

SQL> CREATE OR REPLACE PROCEDURE ins_dept

2    (v_deptno IN NUMBER,v_dname VARCHAR2,v_loc IN varchar2) IS

3    e_dept_err EXCEPTION;

4    PRAGMA EXCEPTION_INIT(e_dept_err,-0001);

5    BEGIN

6      INSERT INTO dept VALUES(v_deptno,v_dname,v_loc);

7      COMMIT;

8      EXCEPTION

9        WHEN e_dept_err THEN

10          dbms_output.put_line('You deptno is not unique,please input unique deptno number!');

11        WHEN OTHERS THEN

12          dbms_output.put_line('Others error!');

13       END;

14  /

Procedure created

SQL> exec ins_dept(79,'zhangsan','beijing');

PL/SQL procedure successfully completed

SQL> select * from dept;

DEPTNO DNAME   LOC

------ -------------- -------------

92 DEV3

79 zhangsan beijing

91 DEV2

90 DEV

80 caiwu      hongkong

10 ACCOUNTING HongKong

20 RESEARCH BEIJING

30 SALES      CHICAGO

40 OPERATIONS BOSTON

9 rows selected

OUT:

SQL> CREATE OR REPLACE PROCEDURE proc2

2    (v_empno IN NUMBER,v_ename OUT VARCHAR2,v_sal OUT NUMBER)

3  IS

4  BEGIN

5    SELECT ename,sal INTO v_ename,v_sal FROM emp WHERE empno=v_empno;

6    dbms_output.put_line('Employee name is:'|| v_ename);

7    dbms_output.put_line('Employee salary is: '||v_sal);

8  EXCEPTION

9    WHEN no_data_found THEN

10      dbms_output.put_line('Employee ID is error!');

11     WHEN OTHERS THEN

12       dbms_output.put_line('Others error!');

13   END;

14  /

Procedure created

在系统下运行:

SQL> var name varchar2(10);

SQL> var sal number;

SQL> exec proc2(7369,:name,:sal);

PL/SQL procedure successfully completed

name

---------

SMITH

sal

---------

4600

通过PLSQL块运行:

SQL> DECLARE

2    v_name emp.ename%TYPE;

3    v_sal emp.sal%TYPE;

4  BEGIN

5    proc2(7369,v_name,v_sal);

6    END;

7  /

Employee name is:SMITH

Employee salary is: 4600

PL/SQL procedure successfully completed

IN-OUT:

SQL> CREATE OR REPLACE PROCEDURE proc3

2    (v_empno IN OUT NUMBER,v_ename OUT VARCHAR2,v_sal OUT NUMBER)

3  AS

4  BEGIN

5    SELECT empno,ename,sal INTO v_empno,v_ename,v_sal FROM emp WHERE

6    empno=v_empno;

7    dbms_output.put_line('Employee ID is: '||v_empno);

8    dbms_output.put_line('Employee name is: '||v_ename);

9    dbms_output.put_line('Employee salary is: '||v_sal);

10  EXCEPTION

11    WHEN no_data_found THEN

12      dbms_output.put_line('Employee ID is error');

13    WHEN OTHERS THEN

14      dbms_output.put_line('Others error!');

15    END;

16  /

Procedure created

执行存储过程:

SQL> DECLARE

2    v_empno emp.empno%TYPE;

3    v_ename emp.ename%TYPE;

4    v_sal emp.sal%TYPE;

5  BEGIN

6    v_empno :=&n;

7    proc3(v_empno,v_ename,v_sal);

8  END;

9  /

Employee ID is: 7369

Employee name is: SMITH

Employee salary is: 4600

PL/SQL procedure successfully completed

③查看存储过程代码

Select text from user_source where name=’xx’;

④删除存储过程

DROP PROCEDURE procedure_name;

2.PL/SQL函数

·函数用于返回特定数据

·函数作为表达式的一部分被调用

·函数可以简化客户端应用程序的开发

·提高应用程序的执行性能

函数的使用限制:

①函数可以在SQL语句的一些部分:

—SELECT命令的选择列表

—WHERE和HAVING子句中

—INSERT命令的VALUES子句中

—UPDATE命令的SET子句中

—CONNECT BY 子句中

—START WHTN 子句中

—ORDER BY 子句中

—GROUP BY 子句中

②函数不可以在如下场景使用:

—函数中不能包含INSERT、UPDATE、DELETE语句

—在SQL语句中只能调用服务端存储函数,不能调用客户端函数

—在SQL语句中调用的函数只能使用标准数据类型,不能使用PL/SQL特有的数据类型,如BOOLEAN、TABLE、RECORD等。

语法:

CREATE [OR REPLACE] FUNCTION function_name

[(argument1 [mode1] datatype1,

argument2 [mode2] datatype2,

....) ]

RETURN datatpe

IS | AS

function_body;

①不带参数的函数:

SQL> CREATE OR REPLACE FUNCTION fun1

2    RETURN NUMBER

3    IS

4    v_sum_sal emp.sal%TYPE;

5    BEGIN

6      SELECT SUM(sal) INTO v_sum_sal FROM emp WHERE deptno=10;

7    RETURN v_sum_sal;

8    END;

9  /

Function created

执行函数:

SQL> DECLARE

2    v_sumsal emp.sal%TYPE;

3  BEGIN

4    v_sumsal :=fun1;

5    dbms_output.put_line(v_sumsal);

6  END;

7  /

8750

PL/SQL procedure successfully completed

②带有参数的函数:

IN:

SQL> CREATE OR REPLACE FUNCTION fun2

2    (v_deptno IN NUMBER)

3    RETURN NUMBER

4    IS

5     v_sum_sal emp.sal%TYPE;

6     BEGIN

7       SELECT SUM(sal) INTO v_sum_sal FROM emp WHERE deptno=v_deptno;

8       RETURN v_sum_sal;

9     END;

10  /

Function created

执行函数:

SQL> DECLARE

2    v_sumsal emp.sal%TYPE;

3    BEGIN

4      v_sumsal :=fun2(10);

5      dbms_output.put_line(v_sumsal);

6    END;

7  /

8750

PL/SQL procedure successfully completed

OUT:

SQL> CREATE OR REPLACE FUNCTION fun3

2    (v_empno NUMBER,v_ename OUT VARCHAR2,v_sal OUT NUMBER)

3    RETURN NUMBER

4    IS

5    BEGIN

6      SELECT ename,sal INTO v_ename,v_sal FROM emp WHERE empno=v_empno;

7      RETURN v_sal;

8    END;

9  /

Function created

执行函数:

SQL> DECLARE

2    v_salary emp.sal%TYPE;

3    v_ename emp.ename%TYPE;

4    v_sal emp.sal%TYPE;

5  BEGIN

6     v_salary :=fun3(7369,v_ename,v_sal);

7     dbms_output.put_line('Salary is: '||v_salary);

8  END;

9  /

Salary is: 4600

PL/SQL procedure successfully completed

【PL/SQL】开发程序相关推荐

  1. 金仓数据库KingbaseES数据库开发指南(4. 面向应用程序的PL/SQL开发)

    目录 4.1. PL/SQL子程序和包的编写 ¶ 4.1.1. PL/SQL 子程序概述 ¶ 4.1.2. PL/SQL 包概述 ¶ 4.1.3. PL/SQL 单元概述 ¶ 4.1.4. 创建 PL ...

  2. 常用的PL/SQL开发原则 by dbsanke

    在微博上看到dbsnake 有一个培训,因为是在北京举办的,过去不.所以问dbsnake 能否把相关的文档传我一份. dbsnake 邮件给我时说有些东西没有写到文档里. 这个文档也是dbsnake ...

  3. Oracle PL/SQL开发基础(第三十弹:预定义异常)

    无论是预定义错误还是自定义错误,Oracle在内部都会隐含地触发一个错误,每个错误都有一个序号,SQLCODE就是异常的编码,SQLERRM用来获取异常的信息.但是在PL/SQL进行异常处理时,不能直 ...

  4. ebs oracle pl sql开发_ORACLEERP开发基础之EBS开发基础

    调用会计科目弹性域 1.首先在创建数据表时,添一个字段用来保存会计科目的ID.如:CODE_COMBINATION_ID 2.在FORM相应的数据块增加两个ITEM,用来显示科目NUMBER与DESC ...

  5. ebs oracle pl sql开发_Oracle EBS Form个性化开发

    Oracle EBS Form个性化开发 时间: 2017-03-30 00:55:04 阅读: 728 评论: 收藏: Form个性化开发内容不是很多,在国内的项目上客户化界面上基本用不上,相关开发 ...

  6. ebs oracle pl sql开发_PL/SQL设置

    1.PL/SQL Developer记住登陆密码 再使用PL/SQL Developer时,为了工作方便希望PL/SQL Developer记住登录Oracle的用户名和密码: 设置方法:PL/SQL ...

  7. 用oracle怎么测试,oracle – 如何(单位)测试数据密集的PL / SQL应用程序

    有几种不同的PL / sql测试工具. Steven Feuerstein已经写了两个 utplsql和 Quest Code Tester for Oracle(以前的QUTE).我是utplsql ...

  8. Oracle数据库PL SQL开发、Oracle-SQL开发习题答案

    第2章 编写简单的查询语句 练习1 1.使用两种方式查询所有员工(EMP)信息. SELECT *FROM emp;SELECT empno,ename,job,mgr,hiredate,sal,co ...

  9. Oracle PL/SQL开发基础(第十七弹:集合类型)

    集合是PL/SQL提供的用来同时处理多个数据的一种数据结构.如果说记录是一个单行多列的数据结构,那么集合就是一种单列多行的数据结构. 集合简介 集合类似于高级语言中的列表或一维数组,主要用来存储具有相 ...

  10. 《Oracle PL/SQL开发指南》学习笔记28——源码调试——PL/SQL基础知识(第六部分)

    控制结构 1. 条件结构 1)if, elsif和else语句 重要概念: 三值逻辑(Three-Valued Logic) Three-valued logic means basically th ...

最新文章

  1. 西湖大学特聘研究员张岳:自然语言处理的一些瓶颈思考与探索
  2. 钽电容正负极_固态电容怎么看正负极,固态电容正负极区分方法
  3. Java 中这些常用关键字,总有那么些被你遗忘的
  4. 数字化时代的创新意欲何为?
  5. JQuery中的样式操作
  6. matlab find
  7. [APIO2016]
  8. linux定时监控端口并重新启动shell脚本命令
  9. 转: SVN和Git的一些用法总结
  10. Windows中安装Electron说明
  11. unity中移动lindrender和transform, 两个点的位置
  12. python 遗传算法 agv_遗传算法在AGV的路径规划中的应用
  13. C语言课程设计|学生成绩管理系统(含完整代码)
  14. 傅立叶变换、拉普拉斯变换、Z 变换的联系是什么?为什么要进行这些变换?...
  15. 2023CS保研经验分享(清深、上交、港科大、南大LAMDA、同济、东南Palm等)
  16. 【产业互联网周报】微软、谷歌再布局边缘云;美团放弃公有云业务;开普云登陆科创板...
  17. 互联网行业定制网站需要多少钱
  18. 伴雨夜谈【即便大雨倾盆,也无法击起心中的波澜】
  19. 猫耳FM日期窗口实现
  20. echarts添加基准线

热门文章

  1. Ruby在windows下配置所遇到的问题
  2. 2019计算机调剂困难,2019年研究生调剂困难程度远超想象
  3. linux 脚本做成服务,Shell脚本注册到Linux系统服务实例
  4. 道硕改革宗神学院课表简略
  5. Android中Bundle和Intent的区别
  6. oracle12C 创建用户学习
  7. hadoop程序MapReduce之DataSort
  8. Javascript 正则表达式校验数字
  9. spring ioc控制反转
  10. 南洋oj 题目144小珂的苦恼