PL/SQL 结构与实例
IS
v_average NUMBER;
v_sum NUMBER;
BEGIN
SELECT AVG(n), SUM(n) INTO v_average, v_sum
FROM TEMP;
dbms_output.put_line('Average:'||v_average);
dbms_output.put_line('Sum:'||v_sum);
END print_temp;
SQL>execute insert_temp;
SQL>execute insert_temp();
都是正确的。
IS
next_day DATE;
BEGIN
next_day := SYSDATE + 1;
RETURN next_day; //函数都有返回值,没有function必须有return
END tomorrow;
PROCEDURE add_student
(v_student_name IN students.student_name%TYPE,
v_college_major IN students.college_major%TYPE,
v_status IN students.status%TYPE,
v_state IN students.state%TYPE DEFAULT NULL,
v_license_no IN students.license_no%TYPE DEFAULT NULL);
FUNCTION NO_OF_STUDENTS
(v_major IN major_lookup.major_desc%TYPE DEFAULT NULL,
v_status IN students.status%TYPE DEFAULT NULL)
RETURN NUMBER;
END students_pkg;
PROCEDURE add_student
(v_student_name IN students.student_name%TYPE,
v_college_major IN students.college_major%TYPE,
v_status IN students.status%TYPE,
v_state IN students.state%TYPE DEFAULT NULL,
v_license_no IN students.license_no%TYPE DEFAULT NULL)
IS
BEGIN
INSERT INTO students VALUES
('A'||students_pk_seq.NEXTVAL,
v_student_name,
v_college_major,
v_status,
v_state,
v_license_no);
END add_student;
FUNCTION NO_OF_STUDENTS
(v_major IN major_lookup.major_desc%TYPE DEFAULT NULL,
v_status IN students.status%TYPE DEFAULT NULL)
RETURN NUMBER
IS
ccount INTEGER;
BEGIN
SELECT COUNT (*) INTO ccount
FROM students, major_lookup
WHERE students.college_major = major_lookup.major
AND major_lookup.major_desc =
nvl(v_major,major_lookup.major_desc)
AND students.status = nvl(v_status,students.status);
RETURN ccount;
END NO_OF_STUDENTS;
END students_pkg;
使用下面方式调用:
temp_operations.insert_temp;
temp_operations.insert_temp();
(1)、IN 模式参数是一个常量
IN模式参数是一个常量必须被看作常量。下面的过程将不能编译成功以为第3行是一个IN模式变量
PROCEDURE print_next_value(v_data IN INTEGER) IS
BEGIN
v_data := v_data+1; -- compile error
dbms_output.put_line(v_data);
END;
常量可以用在表达式中,下面的用法是正确的:
PROCEDURE print_next_value(v_data IN INTEGER) IS
BEGIN
dbms_output.put_line(v_data+1);
END;
(2)、IN OUT模式
IN OUT模式的变量既可以在赋值语句的左边,也可以在赋值语句的右边。
PROCEDURE change_data(v_data IN OUT INTEGER) IS
BEGIN
for i in 1..10 loop
v_data := v_data + 1;
end loop;
END;
(3)、OUT模式
在下例中,第4行之前,v_data变量是一个null,在使用OUT模式变量前必须先给他赋一个值:
PROCEDURE provide_data(v_data OUT INTEGER)
IS
BEGIN
v_data := 100;
FOR i IN 1..10 LOOP
v_data := v_data +1;
END LOOP;
END;
(4)、参数默认值
过程或函数说明可以为IN或IN OUT参数定义一个初始默认值。下面两种方法都是正确的
PROCEDURE name
(argument mode datatype := a_default_value);
PROCEDURE name
(argument mode datatype DEFAULT a_default_value);
下面函数定义了以默认半径为1返回圆的面积:
FUNCTION circle
(radius IN NUMBER := 1) RETURN NUMBER IS
BEGIN
RETURN 3.14 * radius**2;
END;
FUNCTION circle
(radius IN NUMBER DEFAULT 1) RETURN NUMBER IS
BEGIN
RETURN 3.14 * radius**2;
END;
(5)、%TYPE
%TYPE 的意思是变量声明类型和数据库表的指定字段类型一致。
variable_name table_name.column_name%TYPE;
转载于:https://blog.51cto.com/pioncare2012/710705
PL/SQL 结构与实例相关推荐
- PL\SQL结构控制、异常
PL\SQL结构控制 1.IF条件控制语句(三种基本方式+IF语句的嵌套使用) (1)IF... (2)IF...ELSE (3)IF...EL ...
- oracle12 pl/sql
pl/sql块介绍 介绍 块(block)是pl/sql的基本程序单元,编写pl/sql程序实际上就是编写pl/sql块,要完成相对简单的应用功能,可能只需要编写一个pl/sql块,但是如果想要实现复 ...
- ORACLE PL/SQL编程
PL/SQL程序设计 什么是PL/SQL PL/SQL是 Procedure Language & Structured Query Language 的缩写.PL/SQL是对SQL语言存储过 ...
- Oracle PL/SQL编程详解
Oracle PL/SQL编程详解 - 古立 - 博客园 <我的网络摘抄本> 网摘/转载/备忘/随记 博客园 首页 新随笔 联系 管理 订阅 随笔- 84 文章- 0 评论- 0 & ...
- Oracle学习笔记(最重要的是PL/SQL编程)
一:Oracle认证,与其它数据库比较,安装 Oracle安装会自动的生成sys用户和system用户: (1) sys用户是超级用户,具有最高权限,具有sysdba角色,有create databa ...
- Oracle PL/SQL匿名块
转载: http://blog.163.com/lyq_163_2009/blog/static/1340826962010712103822138/ PL/SQL单行注释使用--,多行注释使用/* ...
- PL/SQL块结构和组成元素
本篇主要内容如下: 2.1 PL/SQL块 2.2 PL/SQL结构 2.3 标识符 2.4 PL/SQL 变量类型 2.4.1 变量类型 2.4.2 复合类型 2.4.2.1 记 ...
- [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)...
[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) 原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之 ...
- 【PL/SQL】开发程序
1.开发PL/SQL过程 · 程序是指被命名的PL/SQL块 ·可以存在参数 ·可以被其他应用程序调用 ·语法: CREATE [OR REPLACE] PROCEDURE procedure_nam ...
最新文章
- 使用C++ ostringstream来格式化字符串输出
- Note:类(Class)
- mysql 22001_mysql ERROR 1264 (22003): Out of range value for column 'x' at row 1 错误
- Windows 下 OpenGL ES 开发环境搭建
- eclipse中tomcat启动不了_Eclipse怎样与Tomcat集成
- 1千条数据平均分配给15人_5项数据挂零!但5犯太吓人!CBA第1狠人场均干1人
- C++学习之路 | PTA乙级—— 1023 组个最小数 (20分)(精简)
- oneplus 驱动_OnePlus投放CyanogenMod,Raspberry Pi 2驱动的机器人等
- java学习(六)多线程 中
- Word2Vec入门
- Win7安装curl工具、解决PowerShell ISE中文乱码问题
- 笔记本电脑开不了机怎么重装系统?小熊U盘重装win7系统教程
- MMA7660传感器使用心得
- 漏洞库:爬取NVD-美国国家信息安全漏洞库
- cpu倍频怎么调_认识外频和倍频,可以极限超频,把你CPU性能发挥到最大化
- 苹果电脑各型号支持的macOS版本列表
- fastjson基本使用
- 解密刷子是如何进行APP刷量的?
- 后缀名为jnlp的文件的打开方式
- windows下安装Python和安装Python解释器