--只包含执行部分的PL/SQL块 --set serveroutput off begin dbms_output.put_line('Hello,everyone!'); end; select * from emp; --包含定义部分和执行部分的PL/SQL块 declare v_ename varchar2(5); begin select ename into v_ename from emp where empno=&no; dbms_output.put_line('雇员名:'||v_ename); end; --包含定义部分、执行部分和例外处理部分的PL/SQL块 declare v_ename varchar2(5); begin select ename into v_ename from emp where empno=&no; dbms_output.put_line('雇员名:'||v_ename); exception when NO_DATA_FOUND THEN dbms_output.put_line('请输入正确的雇员号!'); end; select * from emp; --PL/SQL块分类-匿名块 declare v_avgsal number(6,2); begin select avg(sal) into v_avgsal from emp where deptno=&no; dbms_output.put_line('平均工资:'||v_avgsal); end; select * from emp; select * from dept for update; --PL/SQL块分类-命名块(具有特定名称标识的PL/SQL块) --<<outer>> --在PL/SQL Developer中不可执行 declare v_deptno number(2); v_dname varchar2(10); begin --<<inner>> --在PL/SQL Developer中不可执行 begin select deptno into v_deptno from emp where lower(ename) = lower('&name'); end; --<<inner>> select dname into v_dname from dept where deptno = v_deptno; dbms_output.put_line('部门名:'||v_dname); end; --<<outer>> --子程序-过程 create procedure update_sal(name varchar2,newsal number) is begin update emp set sal = newsal where lower(ename)=lower(name); end; select * from emp; --exec update_sal('Test',40.5) select * from emp; --子程序-函数 create function annual_income(name varchar2) return number is annual_salary number(7,2); begin select sal*12 + nvl(comm,0) into annual_salary from emp where lower(ename)=lower(name); return annual_salary; end; --调用函数 declare income number(6,2); begin income:=annual_income('Test2'); dbms_output.put_line(income); end; --子程序-包 create package emp_pkg IS PROCEDURE update_sal(name varchar2,newsal number); FUNCTION annual_income(name varchar2) return number; end; create package body emp_pkg IS PROCEDURE update_sal(name varchar2,newsal number) is begin update emp set sal=newsal where lower(ename)=lower(name); end; function annual_income(name varchar2) return number is annual_salary number(7,2); begin select sal*12+nvl(comm,0) into annual_salary from emp where lower(ename)=lower(name); return annual_salary; end; end; select * from emp; call emp_pkg.update_sal('Test2',1500); --调用包中的函数 declare income number(6,2); begin income:=emp_pkg.annual_income('Test2'); dbms_output.put_line(income); end; --触发器 --触发器update_cascade用于实现级联更新,如果不建立该触发器,那么当更新dept表的deptno列数据时就会显示错误"ORA-02292:违反完整约束条件 --(SCOTT.FK_DEPTNO)-已找到子记录日志";而在建立了该触发器之后,当更新deptno列时,就会级联更新emp表的deptno列的相关数据 create OR REPLACE trigger update_cascade after update of deptno ON dept for each row begin update emp set deptno=:new.deptno where deptno=:old.deptno; end; --使用标量变量 DECLARE v_ename VARCHAR2(5); v_sal NUMBER(6,2); c_tax_rate CONSTANT NUMBER(3,2):=0.03; v_tax_sal NUMBER(6,2); BEGIN select ename,sal into v_ename,v_sal from emp where empno=&no; v_tax_sal:=v_sal*c_tax_rate; dbms_output.put_line('雇员名:'||v_ename); dbms_output.put_line('雇员工资:'||v_sal); dbms_output.put_line('所得税:'||v_tax_sal); end; select * from emp; --使用%TYPE属性 --变量v_ename,v_sal与EMP表的ename列、sal列的数据类型和长度完全一致,而变量v_tax_sal与变量v_sal的数据类型和长度完全一致。 --这样,当ename列和sal列的类型和长度发生改变时,该PL/SQL块将不需要进行任何修改。 DECLARE v_ename emp.ename%TYPE; v_sal emp.sal%TYPE; c_tax_rate CONSTANT NUMBER(3,2):=0.03; v_tax_sal v_sal%TYPE; BEGIN select ename,sal into v_ename,v_sal from emp where empno=&eno; v_tax_sal:=v_sal*c_tax_rate; dbms_output.put_line('雇员名:'||v_ename); dbms_output.put_line('雇员工资:'||v_sal); dbms_output.put_line('所得税:'||v_tax_sal); end; select * from emp for update; --复合变量-PL/SQL记录 --emp_record_type是PL/SQL记录类型,并且该PL/SQL记录类型包含了三个成员(name,salary,title);emp_record是记录变量; --emp_record.name则表示引用记录变量emp_record的成员name. declare type emp_record_type is record( name emp.ename%TYPE, salary emp.sal%TYPE, title emp.job%TYPE); emp_record emp_record_type; begin select ename,sal,job into emp_record from emp where empno=7788; dbms_output.put_line('雇员名:'||emp_record.name); end; --复合变量-PL/SQL表 declare type ename_table_type is table of emp.ename%TYPE INDEX BY BINARY_INTEGER; ename_table ename_table_type; begin select ename into ename_table(-1) from emp where empno=7788; dbms_output.put_line('雇员名:'||ename_table(-1)); end; --复合变量-嵌套表 create or replace type emp_type as object( name varchar2(10),salary number(6,2), hiredate date); create or replace type emp_array is table of emp_type; --使用嵌套表类型作为表列时,必须要为其指定专门的存储表,如下所示 create table department( deptno number(2),dname varchar2(10), employee emp_array )nested table employee store as employee; --复合变量-VARRAY --VARRAY(变长数组)类似于嵌套表,它可以作为表列和对象类型属性的数据类型。 --但需要注意,嵌套表的元素个数没有限制,而VARRAY的元素个数是有限制的。 --注意:嵌套表列数据需要存储在专门的存储表中,而VARRAY数据则与其他数据一起存放在表段中。 create type article_type as object( title varchar2(30),pubdate date ); create type article_array is varray(20) of article_type; create table author( id number(6),name varchar2(10),article article_array ); select * from emp; --参照变量-REF CURSOR DECLARE TYPE cl IS REF CURSOR; emp_cursor cl; v_ename emp.ename%TYPE; v_sal emp.sal%TYPE; BEGIN OPEN emp_cursor FOR select ename,sal from emp where deptno = 3; loop fetch emp_cursor into v_ename,v_sal; exit when emp_cursor%NOTFOUND; dbms_output.put_line(v_ename); end loop; close emp_cursor; end; --参照变量-REF obj_type create or replace type home_type as object( street varchar2(50),city varchar2(20), state varchar2(20),zipcode varchar2(6), owner varchar2(10) ); create table homes of home_type; insert into homes values('呼伦北路12号','呼和浩特','内蒙','010010','马鸣'); insert into homes values('呼伦北路13号','呼和浩特','内蒙','010010','秦斌'); commit; select * from homes --对象表homes存放着家庭所在地以及户主姓名。 --为了使得同一家庭的每个家庭成员可以共享家庭地址,可以使用REF引用home_type对象类型,从而降低占用空间。 create table person( id number(6) primary key, name varchar2(10),addr ref home_type ); select * from person; insert into person select 1,'马嗣',ref(p) from homes p where p.owner='马鸣'; insert into person select 2,'马真',ref(p) from homes p where p.owner='马鸣'; insert into person select 3,'王敏',ref(p) from homes p where p.owner='马鸣'; commit;
相关推荐
Umi-OCR-main.zip
基于springboot+Web的毕业设计选题系统源码数据库文档.zip
基于springboot校外兼职教师考勤管理系统源码数据库文档.zip
58商铺全新UI试客试用平台网站源码
基于springboot大学生就业信息管理系统源码数据库文档.zip
基于SpringBoot的口腔诊所系统源码数据库文档.zip
数据存放网盘,txt文件内包含下载链接及提取码,永久有效。失效会第一时间进行补充。样例数据及详细介绍参见文章:https://blog.csdn.net/T0620514/article/details/143956923
3-240P2162218.zip
网络安全 基于Qt创建的Linux系统下的浏览器.zip
C++ 类和对象:多态-练习题目2(制作咖啡和茶叶)
基于springboot+J2EE在线项目管理与任务分配中的应用源码数据库文档.zip
简介本项目提供了一个在51单片机上运行的简单操作系统,旨在帮助学习者深入理解操作系统的基本原理和任务调度机制。该操作系统通过汇编和C语言编写,实现了任务调度、中断处理等核心功能,并提供了详细的源代码和注释,方便学习和实践。
本文将深度卷积神经网络(CNN)设计实现一个复杂结构的生成模型,旨在通过多阶段的编码器-解码器结构,能够有效地将灰度图像转换为彩色图像。最后,本文将实现一个简单的Web应用,用户可以通过上传灰度图像,应用会使用预训练的Caffe模型对其进行颜色化,并将结果返回给用户。 1.模型设计:模型由多个卷积层、ReLU激活函数和批归一化层组成,通过前向传播函数将输入的灰度图像(L通道)转换为彩色图像(ab通道)。如果指定了 pretrained=True,则会自动下载并加载预训练的模型权重。 2. 系统通过Flask框架提供了一个Web应用,用户可以上传灰度图像,系统会自动将其转换为彩色图像,并在网页上显示结果。整个过程包括文件验证、图像处理、颜色化预测和结果展示,具有较高的实用性和用户体验。
一个JAVA图形化的、联网的五子棋游戏.zip javaweb
KWDB 是一款面向 【AIoT 场景】的【分布式多模数据库】,支持在同一实例同时建立时序库和关系库并融合处理多模数据,具备千万级设备接入、百万级数据秒级写入、亿级数据秒级读取等时序数据高效处理能力,具有稳定安全、高可用、易运维等特点。
页面数量:7页 网页主题:网站模板、酒店网站模板、官方网站模板 网页页面:首页、关于我们、相关服务、服务详情、在线博客、博客详情、在线留言 页面实现元素:加载动画、滚动加载、主题切换、导航栏 、轮播图、图文列表、图片切换、 文字列表、 按钮悬停、图片悬停、表单 实现技术:HTML、CSS 、JQuery 源码样式及js文件均分开存放,所有内容仅供初学者学习参考
内容概要:本文档提供了详细的 Neo4j 安装与配置指南,涵盖 Windows、Linux 和 Mac 系统的安装步骤。具体包括下载、安装、启动服务、修改配置文件(如端口配置、远程访问和内存限制)、设置管理员密码以及基本的 Cypher 查询语言使用方法。同时,还提供了一些常见问题及其解决方案。 适合人群:数据库管理员、软件开发人员、系统管理员。 使用场景及目标:①帮助初学者快速掌握 Neo4j 的安装与配置;②适用于需要搭建和使用图数据库的项目;③为已有用户解决常见问题。 其他说明:本文档不仅包含了基础的安装和配置流程,还提供了实际操作中可能遇到的问题及其解决方法,有助于提高使用者的实际操作能力。
基于SpringBoot+Vue的软件产品展示销售系统源码数据库文档.zip
《书戴嵩画牛》教学课件.pptx
20届智能车 【项目资源】:包含前端、后端、移动开发、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源,毕业设计等各种技术项目的源码。包括C++、Java、python、web、C#、EDA等项目的源码。 【适用人群】:适用于希望学习不同技术领域的初学者或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。