PLSQL_结构、存储过程、函数

/**************************************002 PLSQL结构、存储过程、函数 *****************************************/
/**
[DECLARE declarations]
BEGIN
executable statements
[EXCEPTION handlers]
END;
*/
DECLARE
v_ename emp.ename%TYPE;
BEGIN
SELECT ename INTO v_ename FROM emp WHERE empno = &empno;
dbms_output.put_line(‘员工姓名:‘ || v_ename);
EXCEPTION
WHEN NO_DATA_FOUND
THEN dbms_output.put_line(‘查无此人!‘);
END;

/**
条件判断
IF boolean THEN executable END IF;
IF boolean THEN executable ELSE executable END IF;
IF boolean THEN executable ELSIF boolean THEN executable ELSE executable END IF;
*/

/**
循环 (LOOP WHILE FOR)
*/
-- LOOP
DECLARE
j NUMBER := 0;
BEGIN
j := 1;
LOOP
dbms_output.put_line(j);
EXIT WHEN j >= 7;
j := j + 1;
END LOOP;
END;

-- WHILE
DECLARE
j NUMBER := 0;
BEGIN
j := 1;
WHILE j <= 8
LOOP
dbms_output.put_line(j || ‘---‘);
j := j+1;
END LOOP;
END;

-- FOR
DECLARE
j NUMBER := 0;
BEGIN
FOR j IN 1..8
LOOP
dbms_output.put_line(j || ‘---‘);
END LOOP;
END;

/**
存储过程.PROCEDURE
参数形式三种 (in, outm in out)
*/

-- 001 in example
CREATE OR REPLACE PROCEDURE PROC1(i IN NUMBER)
AS
a VARCHAR2(50);
BEGIN
a := ‘‘;
FOR j IN 1..i
LOOP
a := a || ‘*‘;
dbms_output.put_line(a);
END LOOP;
END;

-- 两种方式调用存储过程 1 通过exec执行 2 通过块执行
-- exec PROC1(4);
BEGIN
PROC1(7);
END;

-- 002 out example

CREATE OR REPLACE PROCEDURE PROC2(i OUT NUMBER)
AS
BEGIN
i := 100;
dbms_output.put_line(i);
END;

DECLARE
k NUMBER;
BEGIN
PROC2(K);
dbms_output.put_line(k);
END;

-- 003 in out example

CREATE OR REPLACE PROCEDURE PROC3(p1 IN OUT NUMBER , p2 IN OUT NUMBER)
AS
v_temp NUMBER;
BEGIN
v_temp := p1;
p1 := p2;
p2 := v_temp;
END;

DECLARE
num1 NUMBER := 10;
num2 NUMBER := 20;
BEGIN
PROC3(num1, num2);
dbms_output.put_line(num1);
dbms_output.put_line(num2);
END;

/**
函数:(函数是可以返回值的命名的PL/SQL 子程序)
CREATE [OR REPLACE] FUNCTION <FUNCTION NAME> [(PARAM...)]
RETURN <DATATYPE> IS|AS
[LOCAL DECLARATIONS]
BEGIN
EXECUTABLE STATEMENTS;
RETURN RESULT;
EXCEPTION
EXCEPTION HANDLERS;
END;
*/

-- 001 要求:创建一个函数,可以接受用户输入的学号,得到该学生的名次,输出名次。
/**
-- 实验准备
CREATE TABLE STUDENT (STU_NO NUMBER(3), NAME VARCHAR2(10), SCORE NUMBER(3));
INSERT INTO STUDENT VALUES (1 , ‘小小‘, 99);
INSERT INTO STUDENT VALUES (2 , ‘小G‘, 80);
INSERT INTO STUDENT VALUES (3 , ‘诺诺‘, 98);
INSERT INTO STUDENT VALUES (4 , ‘小北‘, 79);
COMMIT;
SELECT * FROM STUDENT;
*/

CREATE OR REPLACE FUNCTION FUNC1(SNO INT) RETURN INT
AS
v_score NUMBER;
v_mingci NUMBER;
BEGIN
SELECT SCORE INTO v_score FROM STUDENT WHERE STU_NO = SNO;
SELECT COUNT(*) INTO v_mingci FROM STUDENT WHERE SCORE > v_score;
v_mingci := v_mingci + 1;
RETURN v_mingci;
END;

SELECT FUNC1(3) FROM DUAL;

原文地址:https://www.cnblogs.com/bymcyc/p/8888783.html

时间: 2024-10-14 03:56:27

PLSQL_结构、存储过程、函数的相关文章

mysqldump导出--数据+结构+(函数+存储过程)

mysqldump--导出工具 #导出某个数据库--结构+数据 shell>mysqldump -h192.168.161.124 -uroot -pxxxxxx --opt db_name |gzip -9 > /db_bakup/db_name.gz #导出某个数据库的表--结构+数据+函数+存储过程 shell>mysqldump -h192.168.161.124 -uroot -pxxxxxx --opt -R db_name |gzip -9 > /db_backup/

MySQL mysqldump 导入/导出 结构&amp;数据&amp;存储过程&amp;函数&amp;事件&amp;触发器

———————————————-库操作———————————————-1.①导出一个库结构 mysqldump -d dbname -u root -p > xxx.sql ②导出多个库结构 mysqldump -d -B dbname1 dbname2 -u root -p > xxx.sql 2.①导出一个库数据 mysqldump -t dbname -u root -p > xxx.sql ②导出多个库数据 mysqldump -t -B dbname1 dbname2 -u r

mysql使用存储过程&amp;函数实现批量插入

写这边文章的目的,是想结合mysql 存储过程+函数完成一个批量删除的功能吧...正好也好加深下对procedure和function的熟练操作吧...废话不多说,我就直接上表结构啦哈,如下: create table dept( id int unsigned primary key auto_increment, deptno mediumint unsigned not null default 0, dname varchar(20) not null default "",

MySQL-视图-触发器-事务-存储过程-函数-流程控制-索引与慢查询优化-06

目录 视图*** 什么是视图 为什么要用视图 如何生成视图 修改视图 --> 最好(千万)不要 关联表数据改动前 关联表数据改动之后 触发器 什么是触发器 触发条件 触发器语法结构 修改mysql的默认结束符(;) 触发器死循环 六个触发器的执行时机 新增前.新增后.删除前.删除后.更新前.更新后 NEW对象指代的就是当前记录(对象) 事务 ***** 什么是事务 事务的四大特性 ACID A:原子性 atomicity C:一致性 consistency I:隔离性 isolation D:持

视图 触发器 存储过程 函数 流程过程 索引 慢查询

视图 触发器 存储过程 函数 流程过程 索引 慢查询 视图 触发器 事务 存储过程 内置函数 流程控制 索引 视图 1.什么是视图 ? 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 ? 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何用视图 create view teacher2course as select * from teacher inner join course on teacher.tid = course.teacher_id; 强调

结构体和类的唯一区别就是类函数没有加说明是私有而结构体函数是公有

结构体和类的唯一区别就是              类函数没有加说明是私有                   而   结构体函数是公有

[Go语言]从Docker源码学习Go——结构和函数的定义

Docker在最近很火,而作为Docker的开发语言-Go也再次被大家提到. 已经使用Docker一段时间了,但是对于源码,尤其是其开发语言Go却一直是一知半解. 最近准备利用空余时间从Docker源代码入手来学习一下Go,同时对Docker的实现也希望可以提高一个层次. 有兴趣的可以一起讨论,学习. 准备工作: 1. Docker源代码https://github.com/docker/docker (版本1.1.2) 2. 安装开发工具LiteIDE, 这个是官方的Go语言的IDE 3. G

代码案例(结构体,函数指针,指针函数,冒泡排序) 修改

#import <Foundation/Foundation.h> typedef struct {     char name[20];     int age;     float score; }Stu; //建立字符串和函数之间的一一对应关系. typedef BOOL (*PStu) (Stu stu1,Stu stu2) ; typedef struct nameFunctionPair{     char name[20]; //存储函数对应的字符串     PStu funct

代码案例(结构体,函数指针,指针函数,冒泡排序)

typedef struct {     char name[20];     int age;     float score; }Stu; #import <Foundation/Foundation.h> //姓名升序 void sortByName(Stu *p , int count ) {     for (int i = 0 ; i < count -1; i ++) {         for (int j= 0 ; j < count -1-i; j ++) {

OTL调用存储过程/函数及注意事项

OTL 是 Oracle, Odbc and DB2-CLI Template Library 的缩写,是一个 C++ 编译中操控关系数据库的模板库,它目前几乎支持所有的当前各种主流数据库. OTL 使用起来比较方便,其官方网站也提供了详细的文档和例子( http://otl.sourceforge.net/otl3.htmhttp://otl.sourceforge.net/otl3_examples.htm ). 最近在项目中需要使用 OTL 调用 Oracle 存储过程,并且需要返回游标,