PL/SQL小例子

最近学习了Oraclec的PL/SQL,以下是写的一些小例子,贴出来分享


--过程定义
create or replace procedure proc1(var_month in test.month%type) is
v_sal test.sal%type;
begin
select sal into v_sal from test where month=var_month;
if v_sal > 4000 then
begin
dbms_output.put_line(v_sal);
end;
end if;
end;


--函数定义
create or replace function func1(var_month test.month%type)
return test.sal%type
is v_sal test.sal%type;
begin
select sal into v_sal from test where month=var_month;
return v_sal;
end;

--函数的调用
declare
v_sal test.sal%type;
begin
v_sal:=func1(7);
dbms_output.put_line(v_sal);
end;

--带有复合变量的存储过程
create or replace procedure proc2
as
type emp_record is record
(
name emp.ename%type,
salary emp.sal%type,
dno emp.deptno%type
);
user_record emp_record;
begin
select ename,sal,deptno into user_record from emp where empno=7788;
dbms_output.put_line('用户名'||user_record.name||', 薪水'||user_record.salary||', 部门编号'||user_record.dno);
end;


--定义一个包,包由两部分组成,包规范和包体
create or replace package mypackage is
procedure myproc(varempno in emp.empno%type);
function myfunc(varempno in emp.empno%type) return emp.sal%type;
end mypackage;

--下面是包体
create or replace package body mypackage is
procedure myproc(varempno in emp.empno%type)
as
v_sal emp.sal%type;
begin
select sal into v_sal from emp where empno=varempno;
dbms_output.put_line(v_sal);
end;

function myfunc(varempno in emp.empno%type)
return emp.sal%type
as
v_sal2 emp.sal%type;
begin
select sal into v_sal2 from emp where empno=''||varempno||'';
return v_sal2;
end;
end mypackage;

--调用包中的过程和方法
declare
v_sal emp.sal%type;
begin
mypackage.myproc(7788);
v_sal:=mypackage.myfunc(7788);
dbms_output.put_line(v_sal);
end;

--定义复合类型PL/SQL表实例,其实就是一个特殊数组
--index by binary_integer表示下表是整数
declare
type emp_table_type is table of emp.ename%type index by binary_integer;
table_ename emp_table_type;
begin
select ename into table_ename(0) from emp where empno=7788;
dbms_output.put_line('员工名:'||table_ename(0));
end;

--游标的使用

declare
type emp_cursor is ref cursor;
v_sal emp.sal%type;
v_ename emp.ename%type;
test_cursor emp_cursor;
begin
open test_cursor for select ename,sal from emp where deptno=&deptnum;
loop
fetch test_cursor into v_ename,v_sal;
exit when test_cursor%NOTFOUND;
if v_sal < 2000 then
update emp set sal=2000 where ename=v_ename and deptno=&deptnum;
end if;
dbms_output.put_line('姓名:'||v_ename||' 工资为:'||v_sal);
end loop;
close test_cursor;
end;


--通过存储过程来使用游标和复合变量
create or replace procedure proc3(num in emp.deptno%type) as
type emp_type is record
(
v_ename emp.ename%type,
v_sal emp.sal%type
);
test_type emp_type;
cursor mycur is
select ename,sal from emp where deptno=num;
begin
if mycur%ISOPEN = false then
open mycur;
end if;
loop
fetch mycur into test_type;
exit when mycur%NOTFOUND;
dbms_output.put_line('用户名:'||test_type.v_ename||' 工资:'||test_type.v_sal);
end loop;
close mycur;
end;


--创建一个带有返回值的存储过程

create or replace procedure proc5(empnum in emp.empno%type,empsal out emp.sal%type,empjob out emp.job%type) is
begin
select sal,job into empsal,empjob from emp where empno=empnum;
end;

--定义一个包,并在包中定义游标以便能在存储过程参数中得到结果集
create or replace package testpackage as
type emp_cursor is ref cursor;
end testpackage;

--定义一个带有cursor类型的存储过程
create or replace procedure proc6(deptnum in number,test_cursor out testpackage.emp_cursor) is
begin
open test_cursor for select * from emp where deptno=deptnum;
end;

--分页语句
select * from (select A.*,rownum rn from (select * from emp) A) where rn>=5 and rn<=10;


--定义一个包,并在包中定义一个取得分页结果集的游标
create or replace package fypackage as
type fenye_cursor is ref cursor;
end fypackage;

--定义一个存储过程用来表示分页
create or replace procedure fenye(
tableName in varchar2,--查询的表名
myPageSize in number,--每页显示记录条数
pageNum in number,--第几页
allRows out number,--所有记录条数
allPages out number,--所有页数
result_cursor out fypackage.fenye_cursor--返回结果集游标
) is
v_sql varchar2(1000);
v_start number:=(pageNum-1)*myPageSize+1;
v_end number:=pageNum*myPageSize;
begin
v_sql:='select * from (select A.*,rownum rn from (select * from '||tableName||') A) where rn>='||v_start||' and rn<='||v_end;
open result_cursor for v_sql;
v_sql:='select count(*) from '||tableName;
execute immediate v_sql into allRows;
if mod(allRows,myPageSize)=0 then
allPages:=allRows/myPageSize;
else
allPages:=allRows/myPageSize+1;
end if;
end;


Oracle PL/SQL入门案例实践 正在看的ORACLE教程是:Oracle PL/SQL入门案例实践。 前面已经了解了关于PL/SQL编程的基础,本文将结合一个案例来加深对这些知识点的理解。   一. 案例介绍   某数据库有两张表,是关于某公司员工资料、薪水和部门信息的,它们分别是emp表和dept表,两张表的结构如下:   要求如下:   1、按照上表结构建立相应的表,并每张表写入5组合法数据。   2、操纵相关表,使得“技术部”的员工的薪水上涨20%。   3、建立日志,追踪薪水变动情况。   4、建立测试包。   二. 案例的分析与实现   从前面案例的介绍不难看出,要求1考察点为基本SQL语句;要求2主要考察复合查询 立即下载

相关推荐

大数据之父_BIM先驱Charles (Chuck) M. Eastman逝世——致敬“BIM之父”

原标题:BIM先驱Charles (Chuck) M. Eastman逝世——致敬“BIM之父”BIM研究的先驱、佐治亚理工教授Charles (Chuck) M. Eastman于本周一(11月9日)在其Atlanta家中逝世。特转韩国Yonsei大学Ghang Lee教授的讣文以作纪念。过世原因未说明。BIM的出现是与当今时代科技的发展分不开的。在信息时代建筑发展面临的挑战巨大:建筑物越建越高...

weixin_39941262的博客 3302

Oracle PL/SQL基础知识及应用案例

PL/SQL(Procedural Language/Structured Query Language)是一种过程化的编程语言,是Oracle数据库的核心组成部分。数据库集成:PL/SQL可以与SQL语句无缝集成,可以在PL/SQL代码中直接使用SQL语句来操作数据库。高性能:PL/SQL是在数据库服务器上执行的,可以减少网络开销和数据传输时间,提高性能。安全性:PL/SQL提供了丰富的安全控制机制,可以实现数据访问控制和数据完整性的保护。

jakelihua 413

OFDM调制matlab仿真详细代码

MATLAB仿真代码 % ================================================== % 作者: 肆拾伍 % 时间:11/30 2019 % 版本:V3 % =================OFDM仿真参数说明:================ % % 子载波数 carrier_count ---200 % 总符号数 symbol_count ...

肆拾伍的博客 3万+

PL/SQL 基操示例

文章目录1、PL/SQL2、新建一个测试用表3、基础语法3.1、基本输出语句3.2、变量3.2.1、常量3.2.1、引用类型变量3.2.2、记录类型变量3.3、分支语句3.3.1、语法一:`if 条件 then 语句; end if;`3.3.2、语法二:`if 条件 then 语句; else 语句; end if;`3.3.3、语法三:`if 条件 then 语句; elsif 条件 then 语句; ... else 语句; end if;`3.4、循环语句3.4.1、语法一:`while 条件 lo

qq_43613793的博客 928

零基础手把手教你做FMEDA

本文通过分步骤手把手来教大家具体如何做FMEDA,希望对工作中要做FMEDA的童鞋有帮助。对于工作当中用不到FMEDA的童鞋,也可以作为科普知识,更好地了解一下FMEDA及硬件功能安全。

NewCarRen的博客 9926

LightTools宏 vs Python API:光学仿真自动化方案选型指南

本文深入对比了LightTools光学仿真自动化中VBA宏与Python API两种方案。VBA宏内嵌易用,适合固定流程批处理;Python API生态强大,尤其在参数优化算法集成方面优势显著,便于构建复杂工作流。文章结合案例,为不同场景下的技术选型提供清晰指南。

garlic的博客 940

PL/SQL的例子

最近刚学oracle,才知道到有个PL/SQL,运行中这个语句运行的速度是最快的,所以肯定要掌握这个! 建表语句: create table AB(     id number not null,     username varchar2(64),     password varchar2(64),     primary key(id) )

qq_32844875的博客 397

【车载开发系列】ParaSoft单元测试环境配置(一)

bdf是数据文件的一种类型,表示一种数据库文件。在ParaSoft当中,可以使用bdf文件来快速创建一个测试项目。

千月星跡 2147

PL/SQL 基本案例

PL/SQL 基本案例 案例1 问题: 1.统计每年入职的员工人数 解题思路: 循环遍历员工人数,取出每一个员工的入职日期,符合的,计数器加1 代码: set severoutput on declare -- 定义光标 cursor cemp is select to_char(hiredate,'yyyy') from emp; phiredate varchar2(4); --每年入职的员工数 count80 number :=0; count81 number :

涛涛之海 394

YOLOv8改进,YOLOv8添加可变性卷积DCNv2

DCNv2对原始的DCNv1进行了改进,可变形卷积网络的卓越性能源于其适应对象几何变化的能力。通过对其自适应行为的检查,虽然对其神经特征的空间支持比常规的ConvNets更接近于对象结构,但这种支持可能远远超出感兴趣区域,导致特征受到不相关图像内容的影响。为了解决这个问题,我们提出了一种可变形卷积网的重新表述,通过提高建模能力和更强的训练,提高了其专注于相关图像区域的能力。通过更全面地集成网络中的可变形卷积,并引入扩展变形建模范围的调制机制,增强了建模能力。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 3606

RT-Thread必考面试题及参考答案

RT-Thread的设备驱动模型遵循层次化的结构,设计简洁且易于扩展。它主要由设备注册、设备操作和设备控制三部分组成。设备驱动模型允许开发者为不同的硬件设备编写驱动程序,这些驱动程序可以被RT-Thread内核统一管理和调度。在RT-Thread中,设备被抽象成一系列标准的接口,包括打开、关闭、读取、写入、控制等操作,这些操作封装在结构体中。设备驱动程序需要实现这些接口,然后通过调用函数注册设备,使其对系统可见。这种模型不仅简化了驱动开发,还提高了代码的可移植性和可维护性。

大模型大数据攻城狮的专栏 1823

plsql程序案例

瀑布模型 统计每年入职的员工人数 /*SQL语句 select to_char(hiredate,'yyyy') from emp; ->游标->循环->退出条件:notfound 变量:1.初始值 2.如何得到 每年入职的员工人数: count80 number := 0; count81 number := 0; count82 number := 0; count87 number := 0; */ DECLARE --定义游标 CURSOR cemp IS SELECT to_ch

chiangsheng的博客 898

cartographer如何使用2个反光柱子作为一个landmark

2个反光柱的摆放要求:靠着墙摆,因为我们只能从一侧看到2个反光柱,从两侧都看到至少需要3个反光柱来定位。 landmark检测原理:因为我们是从一侧看到2个反光柱,所以看到2个反光柱在一帧激光数据中会有顺序,有2种情形,如下图 这两种情形,我们发现 情形1: 这种情形2个反光柱子被检测到的激光角度小于180,我们认为大一些激光角度的是原点。 情形2: 这种情形2个反光柱子被检测到的激光角度大于180,我们认为小一些激光角度的是原点。 这样原点就固定下来,并是唯一的。2个反光柱构成的坐标系也就确定了。和激光坐

南北粉面馆 3827

PL/SQL 使用 SQL%ROWCOUNT 的例子

开始 VARIABLE rows_deleted varchar2(30) DECLARE v_empno emp_cpy.empno%TYPE:=7900; BEGIN DELETE FROM emp_cpy WHERE empno=v_empno; :rows_deleted:=(SQL%ROWCOUNT || 'row ...

weixin_34006468的博客 438

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

PL/SQL 使用 SQL%ROWCOUNT 的例子

开始 VARIABLE rows_deleted varchar2(30) DECLARE v_empno emp_cpy.empno%TYPE:=7900; BEGIN DELETE FROM emp_cpy WHERE empno=v_empno; :rows_deleted:=(SQL%ROWCOUNT || 'row deleted.'); ...

weixin_30477797的博客 242

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

PL/SQL入门例子

转贴地址:http://apple.upc.edu.cn/Article/ShowArticle.asp?ArticleID=493PL/SQL入门例子=================================================基本操作=================================================SQL>set serverou

冯立彬的博客 6773

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

一个简单的PL/SQL的例子

给自己做个备份。这个简单例子使用了记录集,游标等简单功能,正常返回OK,错误返回NG,同时在DB端控制台输出错误信息。CREATE OR REPLACE PACKAGE EMPLOYEE_IMPORT_SQL AS    --リテン結果    RET_NG CONSTANT VARCHAR2(2) := NG;    RET_OK CONSTANT VARCHAR2(2) := OK;

技术专栏 1265

PL/SQL例子

以下是经测验能正确运行的: create    table t_emp_log212(who varchar2(10) not null,action varchar2(10) not null,actime date);create or replace trigger tri_emp_insertbefore inserton t_empbegininsert into t_emp

294

PL/SQL脚本小例子

--删除所有ncr表的数据 begin for x in (select table_name from user_tables where table_name like 'NCR_%' ) loop execute immediate 'delete ' || x.table_name ; commit; end loop ; end ; --给所有的NCR表加字段 --注意空格...

雪儿的博客 1400

pl/sql之savepoint小例子

DECLARE      v_number number; BEGIN      v_number := 1;      insert into t11 values(T11_SEQ.nextval,v_number);      savepoint A;      insert into t11 values(T11_SEQ.nextval,v_number+1);

AI开源工具分享 991

[PL/SQL] CURSOR例子

CREATE OR REPLACE PROCEDURE EXPCURSOR_TEST ( V_DEPTNO IN DEPT.DEPTNO%TYPE ) IS -- 声明CURSOR CURSOR DEPT_AVG IS SELECT B.DNAME AS DNAME , COUNT(A.EMP...

一日一学! 156

PL/SQL 三个小例子

/* SQL语句 员工集合:select to_char(hiredate,'yyyy') from emp --> 光标 --> 循环--> 退出条件:notfound 变量 count80 number := 0; count81 number := 0; count82 number := 0; count87 number := 0; */ set serveroutput on de

极客on之路 876

[PL/SQL] LOOP语句例子

DECLARE V_CNT NUMBER := 100; BEGIN DBMS_OUTPUT.ENABLE; LOOP INSERT INTO EMP(EMPNO, ENAME, HIREDATE) VALUES (V_CNT, 'TEST' || TO_CHAR(V_CNT), SYSDATE); ...

一日一学! 242

pl/sql例子

1、使用游标、loop、%type、%rowtype [code="sql"] DECLARE Last_name VARCHAR2(50); email employees.email%type; emp employees%rowtype; Cursor c1 IS SELECT * FROM employees; BEGIN ...

benx 303

pl/sql exception例子

--exception异常 declare v_sal employees.salary%type; begin  select salary into v_sal from employees where employee_id=100; exception --非预定义异常 when too_many_rows then  dbms_output.put_line('不只一条数

scdn1172的博客 493
上一篇: oracle存储过程实现分页
下一篇: HashMap底层的实现
lk231_java
博客等级 码龄15年 0粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值