PL/SQL总结
一、为什么需要PL/SQL?
理由:1、原来在java应用程序中直接传入sql语句,这样在oracle数据库再编译执行,效率较低,而且网络传输不安全,容易被修改。
模块化编程。
2、PL/SQL过程很函数保存在数据库中,java程序直接调用,效率和安全性都更高。
缺点:移植性能差。过程函数等都存在数据库中,换了数据库不兼容就不能在用了。
二、pl/sql分类 -- 块,过程,函数,包,触发器。
块:
PL/SQL块是程序的最基本单元,它由定义部分,执行部分,和异常处理部分组成。
declare
--定义部分:定义变量、常量、游标和自定义数据类型等
begin
--需要执行的语句
exception
--异常处理部分
End;
其中,定义部分和异常处理部分是可以选择不要的,最简单的块就只有begin和end。
--在PL/SQL中需要输出在窗口的话,需要设置
Set serveroutput on;
--根据学号查询学生姓名,并输出
Set serveroutput on;
Declare
v_name varchar2(20);
Begin
Select sname into v_name from student where sid=1;
dbms_output.put_line('学生姓名'||v_sname);
End;
过程:过程可以指定输入参数和输出参数,它用于执行特定的操作,编译好之后可以重复调用。
语法:
--创建或者替换过程,后面是过程名,之后是is或者as,接着是定义变量
注意:在plsql中,定义变量是变量名在前,而且在定义参数的时候不需要指定参数的字符串长度或者number长度。
创建一个过程,根性id查找学生姓名
Create or replace procedure pro_01(v_sid number) is
V_sname varchar2(20);
Begin
Select sname into v_sname from student where sid=v_sid;
dbms_output.put_line('学生姓名'||v_sname);
End;
调用过程:
Exec pro_01(1);
函数:
函数用于返回特定的数据,在定义时候头部不要return + 数据类型,在代码块中也必须包含return 变量
定义语法:
Create or replace function fun_01(v_sid numnber) return varchar2 is
V_sname varchar(20);
Begin
Select sname into v_sname from student where sid=v_sid;
Return v_sname;
End;
调用函数的语法
1、定义变量
var v_sname varchar(20)
Call fun_01(1) into :v_sname;
包:便于管理函数和过程,它由规范和包体两部分注册,规范是对过程和函数的定义,包体是对过程和函数的具体实现,包还可以用于保持下自定义类型。
包的规范只包含了过程和函数的说明,但是没有过程和函数的实现代码。包体用于实现包规范中的过程和函数。
1、创建一个包
Create or replace package package_01 is
Procedure pro_01(v_sid number);
Function fun_01(v_sid number);
End;
2、包体,对包中函数和方法的具体实现
Create or replace package body package_01 is
Procedure pro_01(v_sid number) is
V_sname varchar2(20);
Begin
Select sname into v_sname from student where sid=v_sid;
Dbms_output.put_line('学生姓名'||v_sname);
End;
Function fun_01(v_sid number) return varchar2 is
V_sname varchar(20);
Begin
Select sname into v_sname from student where sid=v_sid;
Return v_sname;
End;
End;
三、数据类型
分类:标量、复合类型、参照类型
标量是已经预定义好的类型:
比如:定义一个number并给其赋值
V_sid number(3):=100;
注意:在plsql中赋值时使用的 := 一定要特别注意。
参照类型,比如变量的类型是表中某一类的属性,这个时候我们直接参照表中的列的类型,比如varchar2,这个时候我们就不用再自己来定义它的长度,以免浪费和不够。
V_sname student.sname%type;
复合类型:就相当于c语言中的结构体,又比如java中的类,只有成员属性没有成员方法,这个类可以保存多个不同的数据。
1. type emp_record_type is record(
2. name emp.ename%type,
3. salary emp.sal%type,
4. title emp.job%type);
游标:游标是用于多结果集的一行一行的处理,按照编程的方式来访问,在过程中,定义输出参数为游标,在java程序中来得到游标,也就是得到了一个结果集来操作。
Ref游标,在语句块中打开并且定义select语句,一般游标在声明时候定义select语句。
//游标类型在Oracle包 他在输入 sql语句的时候时候调用方式。 cstm.registerOutParameter(2,oracle.jdbc.OracleTypes.CURSOR);
那么在java程序中得到该输出参数的时候返回的也是一个结果集
//获取数据,游标类型可以强转成ResultSet
// 2表示第二个参数,他是输出参数并且是游标类型
ResultSet rs = (ResultSet)cstm.getObject(2);
四、在java程序中操作数据库的三个类,和调用过程
*********************************************************
Statement---这种方式非常不安全,因为,那么可以随意拼接,后面还可以拼接or ‘1’=‘1’这种逻辑值为true的表达式,这样的话查询的每行值都是正确的,造成数据被盗。
//这里name是函数传过来的
String sql="select sal from scott.emp where ename='"+name+"'";
Statement stm = conn.createStatement();
stm.executeQuery(sql);在执行的时候传入sql,非常不安全
*********************************************************
PreparedStatement--他可以解决传入一个不合法的表达式比如上面说的,他会自动屏蔽掉
String sql="select sal from scott.emp where ename=?";
//先将sql进行编译,然后再设这sql中的?的值
PreparedStatement pst= conn.prepareStatement(sql);
//这个时候再传值,第一个位置表示第几个问号,后面就是要传的值
pst.setString(1, name);
//执行的时候不需要再传入sql语句,所以没有再编译,可以直接执行。
ResultSet set=pst.executeQuery();
****************************************************************
CallableStatement --该类可以调用知道的过程和函数,可以利用返回的游标类型来得到结果集,按照编程的方式访问数据。
// 定义sql语句
String sql = "{call selectNameSal4id(?,?,?)}";
// 获得编译对象
CallableStatement csmt = conn.prepareCall(sql);
// 输入参数传入
csmt.setInt(1, id);
// 注入输出参数
csmt.registerOutParameter(2, java.sql.Types.VARCHAR);
csmt.registerOutParameter(3, java.sql.Types.FLOAT);
// 执行过程
csmt.execute();
// 获得输出参数的过程,第2个和第三个是输出参数
String username = (String) csmt.getObject(2);
Float sal = csmt.getFloat(3);
System.out.println("姓名:" + username + " 工资:" + sal);
//java程序中得到游标
try {
Connection conn = DBUtil.getConn();
String sql = "{call pro_getAllEmp(?,?)}";
CallableStatement cstm = conn.prepareCall(sql);
cstm.setInt(1, deptno);
//游标类型在Oracle包中
cstm.registerOutParameter(2,oracle.jdbc.OracleTypes.CURSOR);
cstm.execute();
//获取数据,游标类型可以强转成ResultSet
ResultSet rs = (ResultSet)cstm.getObject(2);
while(rs.next()){
String ename = rs.getString(1);
float sal = rs.getFloat(2);
System.out.println(ename+" "+sal);
}
} catch (Exception ef) {
ef.printStackTrace();
}
<!--EndFragment-->
相关推荐
这样,如果需要编译所有工程条目或者将工程从某个位置或数据库移动到其他位置时,所需工程条目的查找就变得比较简单, To-Do条目——您可以在任何SQL或PL/SQL源文件中使用To-Do条目快速记录该文件中那些需要进行的...
在Oracle应用程序的开发过程中,访问数据库对象和编写SQL程序是一件乏味且耗费时间的工作,对数据库进行日常管理也是需要很多SQL脚本才能完成的。Quest Software为此提供了高效的Oracle应用开发工具-Toad(Tools of ...
基于matlab实现的指纹识别.rar
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
项目型制造企业生产计划规划设计方案.pptx
Swing界面开发和游戏开发.docx
物流企业数字化转型暨五级信息化流程架构(L1-L5)规划建设方案.pptx
39黎秋菊.ipynb
本设计主要利用数字电子的知识设计的八人抢答器,随着电子技术的发展,它在各个领域的应用也越来越广泛。人们对它的认识也正逐步加深,从而利用电子技术以及相关的知识来解决一些实际问题。例如:智能抢答器的设计与制作。抢答器是智力竞赛活动中一种较为常见的装置。从原理上讲,它是一种典型的数字电路。并且,数字抢答器是由主体电路和扩展电路组成。优先编码电路、锁存器、译码电路将参赛队的输入信号在显示器上输出,主持人按开始按钮示意开始,以上两部分组成主体电路。在抢答电路中利用一个优先编码器译出最先抢到答题权的选手的编号并经LED显示器显示出来,同时还要封锁电路以防其他选手再抢答。当选手完成答题后,主持人将系统复位清除数据。
基于matlab实现的HOG特征提取在进行SVM行人检测,经典算法.rar
PP-OCR rec
系统环境配置 Python:3.8.13 操作系统:Windows 数据库:MySQL Web框架:Flask 模型训练:sklearn 1.Anaconda创建虚拟环境 conda create -n Graduation python=3.8 命令行切换到对应目录 2.安装第三方库 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple 3.将数据导入数据库 mysql -u root -p --local-infile=1 < D:\Bachelor_Graduation\Bachelor_Graduation.sql 二、模型训练 1.执行preprocess.ipynb 2.目录下自动生成model文件夹,里面存放训练好的模型pkl格式文件 三、系统启动 运行命令python main.py,在浏览器端输入127.0.0.1:5000即可 查看MySQL数据库中用户和管理员表可以得到用户名和密码,登录后可使用该系统
无人机最强源码,无人机算法,易于部署和学习交流使用
Rain Birdt Simple To Set Timer (SST) 使用说明书
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
BTL7-P511-M_ _ _ _ -A B Y Z(8)-NEX-S32 KA _ _ II 3 G Ex ec IIC T4 Gc II 2 D Ex tb IIIC T135 °C Db BTL7-P511-M _ _ _ _ -CD-NEX-S32 KA _ _ Betriebsanleitung
无人机最强源码,无人机算法,易于部署和学习交流使用