是什么 procedure language 面向过程的语言
SQL 结构化的查询语言
面向过程化的结构化查询语言
PL/SQL是ORACLE 对sql语言的扩展
SQL 数据结构 查询语句 逻辑操作 循环控制
java 的优点:跨平台 GC 垃圾回收 面向对象 实现代码的复用
PL/SQL优点:
1、使一组sql语句的功能更加具体化
2、采用面向过程的思想
3、性能高,预编译 数据库
4、异常处理机制,能够是数据库在遇到问题的时候不会中断
5、移植性高,可以移植到另一个数据库
6、减少网络交互,节省带宽
编程语言
标识符
字母,数字,_$ 不能使用关键字
userName
UserName 驼峰命名法
user_name下划线命名
声明变量 declare
--声明变量 变量名 + 数据类型
begin
u_ename varchar2(20)
end;
--emp enanme
对变量赋值 2种
:= u_ename:='zhangsan';
接受键盘输入 &后面可以跟提示字符
通过sql语句 select 。。。into
select ename(字段名) into u_name(变量名)
from emp where empno =7369;
输出语句 dbms_output.put_line 代表(相当于)java中(System.out.print)
字符串拼接 ||
处理业务逻辑的时
将输出先打开 set serveroutput on;
运算符 + - * /
数据类型 。。。
常用的数据类型
number(a,b)a:总位数 b:小数的位数
number(2) 整数
字符串类型
char varchar2() varchar 字符串
char(20) 固定的字符长度 数据库中存储中就占用固定的空间
超出的肯定不能存放 不够的补齐空格
varchar2(20) 可变的字符长度 数据库存储中节省空间
超出的 也存不下
不够的 不补,取实际长度
varchar mysql 标准类型
oracle 在varchar基础上设计的数据类型
varchar 空字符串 可以用空“”oracle varchar2 null
日期 date 默认的格式
boolean true false null
%type %rowtype
流程控制
分支结构 if..else case 表达式 两种书写方式
循环结构 do...while while for
SQL 结构化的查询语言
面向过程化的结构化查询语言
PL/SQL是ORACLE 对sql语言的扩展
SQL 数据结构 查询语句 逻辑操作 循环控制
java 的优点:跨平台 GC 垃圾回收 面向对象 实现代码的复用
PL/SQL优点:
1、使一组sql语句的功能更加具体化
2、采用面向过程的思想
3、性能高,预编译 数据库
4、异常处理机制,能够是数据库在遇到问题的时候不会中断
5、移植性高,可以移植到另一个数据库
6、减少网络交互,节省带宽
编程语言
标识符
字母,数字,_$ 不能使用关键字
userName
UserName 驼峰命名法
user_name下划线命名
声明变量 declare
--声明变量 变量名 + 数据类型
begin
u_ename varchar2(20)
end;
--emp enanme
对变量赋值 2种
:= u_ename:='zhangsan';
接受键盘输入 &后面可以跟提示字符
通过sql语句 select 。。。into
select ename(字段名) into u_name(变量名)
from emp where empno =7369;
输出语句 dbms_output.put_line 代表(相当于)java中(System.out.print)
字符串拼接 ||
处理业务逻辑的时
将输出先打开 set serveroutput on;
运算符 + - * /
数据类型 。。。
常用的数据类型
number(a,b)a:总位数 b:小数的位数
number(2) 整数
字符串类型
char varchar2() varchar 字符串
char(20) 固定的字符长度 数据库中存储中就占用固定的空间
超出的肯定不能存放 不够的补齐空格
varchar2(20) 可变的字符长度 数据库存储中节省空间
超出的 也存不下
不够的 不补,取实际长度
varchar mysql 标准类型
oracle 在varchar基础上设计的数据类型
varchar 空字符串 可以用空“”oracle varchar2 null
日期 date 默认的格式
boolean true false null
%type %rowtype
select * from emp
--:= 赋值
declare
--声明变量
id number(6) :=20;--初始化值
name varchar2(20);
birthday date;
begin
--逻辑处理 包括对变量的赋值
id:=32;--赋值操作
name:='zhang';
dbms_output.put_line('id:'||id);
end;
---select..into 赋值
declare
id number(4);
s_name varchar2(20);
begin
--查询emp 表中共有多少条数据赋值给变量id
select count(*) into id from emp;
--查询emp表中empno为7369的人的名字赋值
--变量s_name
select ename into s_name from emp
where empno=7369;
--输出
dbms_output.put_line('id:'||id);
dbms_output.put_line('ename'|| s_name);
end;
declare
id number(10);
begin
--接受用户输入 &
--后面为一句提示话,包含空格
--用双引号包住提示语
id:=&"please input firstnum";
dbms_output.put_line('id'||id);
end;
--完成求和
declare
num1 number(2);
num2 number(2);
begin
num1:=&num1;
num2:=&num2;
dbms_output.put_line('两个数的和为:'||(num1+num2));
end;
select
declare
--%type 数据类型 表的结构desc 某一个字段的未知数据类型
--当用到某一个字段数据类型不知道的情况
--使用%type 和谁的数据类型一致
--%rowtype 行数据类型
s_ename emp.ename%type;
s_row emp%rowtype;
begin
select ename from emp into s_ename
from emp where empno =7369;
-- dbms_output.put_line(s_ename);
select * from into s_row from emp where empno=7369;
dbms_output.put_line(s_row.empno||':'||'s_row.ename');
end;
流程控制
分支结构 if..else case 表达式 两种书写方式
--分支结构
--if else
declare
grade number(4,1);
begin
grade :=&"please input your grade";
if(grade >=90 and grade<=100) then
dbms_output.put_line('优秀');
elsif(grade>=80 and grade<90) then
dbms_output.put_line('良好');
elsif(grade>=70 and grade<80) then
dbms_output.put_line('中等');
elsif(grade>=60 and grade<70) then
dbms_output.put_line('及格');
else
dbms_output.put_line('不及格');
end if;
end;
--java 中 switch case
--case
declare
n number(1);
begin
n :=&fistnum;--接受用户输入
dbms_output.put_line(n);--输出
case n
when 1 then
dbms_output.put_line('周一');
when 2 then
dbms_output.put_line('周二');
when 3 then
dbms_output.put_line('周三');
when 4 then
dbms_output.put_line('周四');
when 5 then
dbms_output.put_line('周五');
when 6 then
dbms_output.put_line('周六');
when 7 then
dbms_output.put_line('周日');
else
dbms_output.put_line('不详');
end case;
end;
--第二种 case
declare
n number(1);
begin
n :=&fistnum;--接受用户输入
dbms_output.put_line(n);--输出
case
when n=1 then
dbms_output.put_line('周一');
when n=2 then
dbms_output.put_line('周二');
when n=3 then
dbms_output.put_line('周三');
when n=4 then
dbms_output.put_line('周四');
when n=5 then
dbms_output.put_line('周五');
when n=6 then
dbms_output.put_line('周六');
when n=7 then
dbms_output.put_line('周日');
else
dbms_output.put_line('不详');
end case;
end;
declare
grade number(4,2);
n number(2);
begin
grade:=&"Input your grade please!";
--把成绩转换 除以10
dbms_output.put_line(grade);
--不让他四舍五入 floor 去尾
--trunc 截取
--ceil 进一
if(grade>100) then
dbms_output.put_line('输入有误');
else
n:=trunc(grade/10);
dbms_output.put_line(n);
case
when n=10 then
dbms_output.put_line('优秀');
when n=9 then
dbms_output.put_line('优秀');
when n=8 then
dbms_output.put_line('良好');
when n=7 then
dbms_output.put_line('中等');
when n=6 then
dbms_output.put_line('及格');
else
dbms_output.put_line('不及格');
end case;
end if;
end;
循环结构 do...while while for
--循环结构
--do while 打印1-100
--oracle 中loop循环
--结束循环有两种方式 break continue return
--if then exit;
--exit when
declare
num number(3):=1;--number类型初始值为1
begin
loop
dbms_output.put_line(num);
if num=100 then
exit;--结束循环 相当于break
end if;
--num++
num:=num+1;
end loop;
end;
--exit when
declare
num number(3):=1;--number类型初始值为1
begin
loop
dbms_output.put_line(num);
exit when num=100;
--num++
num:=num+1;
end loop;
end;
--计算1--100之间所有数的和
declare
num number(3):=1;
result number(5):=0;
begin
loop
exit when num=101;
result:=result+num;
num:=num+1;
end loop;
dbms_output.put_line(result);
end;
declare
num number(3):=1;
result number(5):=0;
begin
loop
if num=101 then
dbms_output.put_line(result);
exit;
end if;
result:=result+num;
num:=num+1;
end loop;
end;
--
declare
num number(3):=1;
result number(5):=0;
begin
loop
end;
--while 循环
declare
n number(4):=0;
begin
while(n<100) loop
n:=n+1;
dbms_output.put_line(n);
end loop;
end;
declare
n number(4):=0;
result number(4):=0;
begin
while(n<100) loop
n:=n+1;
result:=result+n;
end loop;
dbms_output.put_line(result);
end;
--求1-100内3的倍数的和
declare
result number(5):=0;
num number(3):=1;
begin
while(num<100) loop
if(mod(num,3)=0) then
result:=result+num;
end if;
num:=num+1;
end loop;
dbms_output.put_line(result);
end;