--pl/sql
--主要是结构 以及基础的定义
--判断 循环 loop 分支
--应用 异常处理 函数
-- pl/sql 语言的注释
/*
使用/* */
/*
这个就是段落注释
第二个注释方法就是
-- 前面两个-号
*/
/*
sql 结构化查询语言 cudr 第四代语言
pl/sql 第三代语言 是一种过程化的语言 java c# 都是第三代语言
java能做什么?
C#
定义变量 char int
定义结构体 (int ,char)
判断 if else
循环 for while do--while
函数 f(x,y){return x}
pl/sql 也可以完成以上所有操作
1 .pl/sql 可以提高程序性能
soft软件 ---->sql -------> 数据库中
---->sql ------->
---->sql ------->
---->sql ------->
---->sql ------->
特点就是每一次执行操作都需要进行一次操作
打开链接 传入sql 执行 获得结果 关闭链接
打开链接 关闭链接 都是时间开销
1 使用别的框架 学java的同学 mybatis 代理池
pl/sql 语言
soft ---------> pl/sql 代码块 ------->数据库
打开链接 执行预先准备的pl/sql代码 对数据库处理
2使程序模块化
pl/sql是三代语言 java c#
可以编写函数
f(a,b)
if a>b
return a
else
return b
3 使用逻辑语句
if while for do-while
4 处理错误信息
sql
select * from studenn :studenn错误 表不存在 就会中断运行
select * from student
while sid='001';
pl/sql 通过一些设置在中断之后还能够继续运行
5 移植性
oracle server1 -----------
| 拷贝 就可移植过来
server2 <----------
*/
/*
回忆java里面学过什么东西
hello wrod!
输出语句 system.out.print()
*/
DECLARE
-- 最基本的pl/sql 代码块
BEGIN
--开始
--在一个表里面有一个输出函数
DBMS_OUTPUT.PUT_LINE('这是我的第一个PL/SQL的执行'); --换行打印
-- EXCEPTION ---跟的是异常处理
END;
/
--结束
--申明变量
DECLARE
--在此申明变量
--取名 数据类型
stu_no varchar2(10) ; --这个数据和我们数据库中的sno数据类型一致
BEGIN
--可以进行赋值
-- 注意 赋值不能使用 = 需要使用 := 进行赋值
stu_no := 's001';
--开始
--在一个表里面有一个输出函数
DBMS_OUTPUT.PUT_LINE('学生的id是' || stu_no); --换行打印
END;
--结束
/
-- 注意 这个开关 默认是关闭的
SET SERVEROUTPUT ON
-- 注意 这个开关 默认是关闭的
SET SERVEROUTPUT ON
-- 注意 这个开关 默认是关闭的
SET SERVEROUTPUT ON
ON 开
OFF 关
--申明变量
DECLARE
--在此申明变量
--取名 数据类型
v_sno varchar2(10); --能不能直接使用表的数据类型?
v_sname varchar2(20);
v_sage number(2);
v_ssex varchar2(5);
--可以进行赋值
stu_no := 's001'
-- 注意 赋值不能使用 = 需要使用 := 进行赋值
BEGIN
--开始
--在一个表里面有一个输出函数
DBMS_OUTPUT.PUT_LINE('这是我的第一个PL/SQL的执行'); --换行打印
END;
--结束
-- 查看表结构
desc table_name
/*
SQL> desc student
名称 是否为空? 类型
----------------------------------------- -------- ---------------
SNO NOT NULL VARCHAR2(10)
SNAME VARCHAR2(20)
SAGE NUMBER(2)
SSEX VARCHAR2(5)
*/
DECLARE
-- 最基本的pl/sql 代码块
v_sno varchar2(10); --能不能直接使用表的数据类型?
v_sname varchar2(20);
v_sage number(2);
v_ssex varchar2(5);
BEGIN
select sno,sname,sage,ssex
into v_sno,v_sname,v_sage,v_ssex
from student
where sno='s001' ;
--开始
--在一个表里面有一个输出函数
DBMS_OUTPUT.PUT_LINE('学生姓名:'||v_sname); --换行打印
DBMS_OUTPUT.PUT_LINE('学生性别:'||v_ssex); --换行打印
DBMS_OUTPUT.PUT_LINE('学生年龄:'||v_sage); --换行打印
DBMS_OUTPUT.PUT_LINE('学生学号:'||v_sage); --换行打印
END;
/
DECLARE
-- 最基本的pl/sql 代码块
v_sno student.sno%type; --能不能直接使用表的数据类型
v_sname student.sname%type;
v_sage student.sage%type;
v_ssex student.ssex%type;
BEGIN
select sno,sname,sage,ssex
into v_sno,v_sname,v_sage,v_ssex
from student
where sno='s001' ;
--开始
--在一个表里面有一个输出函数
DBMS_OUTPUT.PUT_LINE('学生姓名:'||v_sname); --换行打印
DBMS_OUTPUT.PUT_LINE('学生性别:'||v_ssex); --换行打印
DBMS_OUTPUT.PUT_LINE('学生年龄:'||v_sage); --换行打印
DBMS_OUTPUT.PUT_LINE('学生学号:'||v_sage); --换行打印
END;
/
ps:
v_ssex student.ssex%type;
/*
v_ssex : 变量名称
student : 表名称
. : 取表的数据
ssex : 表的字段
%type : 获取字段的数据类型
;
*/
DECLARE
-- 最基本的pl/sql 代码块
v_sno student.sno%type; --能不能直接使用表的数据类型?
v_sname varchar2(20);
v_sage student.sage%type;
v_ssex student.ssex%type;
v_test CONSTANT v_sname%type:='test';
BEGIN
select sno,sname,sage,ssex
into v_sno,v_sname,v_sage,v_ssex
from student
where sno='s001';
--开始
--在一个表里面有一个输出函数v
DBMS_OUTPUT.PUT_LINE('学生姓名:'||v_sname); --换行打印
DBMS_OUTPUT.PUT_LINE('学生性别:'||v_ssex); --换行打印
DBMS_OUTPUT.PUT_LINE('学生年龄:'||v_sage); --换行打印
DBMS_OUTPUT.PUT_LINE('学生学号:'||v_sage); --换行打印
DBMS_OUTPUT.PUT_LINE('学生学号:'||v_test); --换行打印
END;
/
ps:
v_ssex student.ssex%type;
/*
v_ssex : 变量名称
student : 表名称
. : 取表的数据
ssex : 表的字段
%type : 获取字段的数据类型
;
*/
v_sname varchar2(20);
v_test CONSTANT v_sname%type:='test';
/*
要使用数据类型继承的时候 首先被继承的申明必须是明确的
v_test :变量名称
CONSTANT :关键字
v_sname :被继承的变量名称
%type :获取变量的数据类型和大小
:='test'; : 要给一个初始值
*/
DECLARE
-- 最基本的pl/sql 代码块
TYPE studen IS RECORD(
v_sno student.sno%type,
v_sname varchar2(20),
v_sage student.sage%type,
v_ssex student.ssex%type
);
s studen ;
BEGIN
select sno,sname,sage,ssex
into s --返回的是一个单独的实例
from student
where sno='s001';
--开始
--在一个表里面有一个输出函数v
DBMS_OUTPUT.PUT_LINE('学生姓名:'||s.v_sname); --换行打印
DBMS_OUTPUT.PUT_LINE('学生性别:'||s.v_ssex); --换行打印
DBMS_OUTPUT.PUT_LINE('学生年龄:'||s.v_sage); --换行打印
DBMS_OUTPUT.PUT_LINE('学生学号:'||s.v_sage); --换行打印
END;
/
--PS
TYPE studen IS RECORD(
v_sno student.sno%type, --能不能直接使用表的数据类型?
v_sname varchar2(20),
v_sage student.sage%type,
v_ssex student.ssex%type
);
/*
TYPE :申明的关键字
studen :自己取的结构体名称
IS RECORD : 关键字
(
.... :数据结构
);
*/
s studen ;
-- 注意:使用前要先定义
DBMS_OUTPUT.PUT_LINE('学生学号:'||s.v_sage); --换行打印
-- 调用的时候使用变量名称.变量的方法
-- 总结:
-- 先申明 (申明的是数据结构)
-- 再定义 (定义数据的类型)
-- 后使用 (再来使用定义过后的变量)
-- int a =10;
DECLARE
-- 最基本的pl/sql 代码块
-- student;
s student%ROWTYPE;
BEGIN
select *
into s --返回的是一个单独的实例
from student
where sno='s001';
--开始
--在一个表里面有一个输出函数v
DBMS_OUTPUT.PUT_LINE('学生姓名:'||s.sname); --换行打印
DBMS_OUTPUT.PUT_LINE('学生性别:'||s.ssex); --换行打印
DBMS_OUTPUT.PUT_LINE('学生年龄:'||s.sage); --换行打印
DBMS_OUTPUT.PUT_LINE('学生学号:'||s.sage); --换行打印
END;
/
-- 到此结束 end