plsql学习笔记1

摘要:
declare/*申明区声明变量定义类型*/beginplsql的程序结构/*执行区执行sql语句或者plsql语句*/exception/*异常处理区*/end;setseveroutputon将输出结果显示在屏幕上----------------------------------------变量的数据类型标准类型:numbervarchar2datebooleanbinary_integer

declare
/*申明区 声明变量 定义类型*/

beginplsql的程序结构

/*执行区 执行sql语句或者plsql语句*/

exception
/*异常处理区*/

end;

set severoutput on

将输出结果显示在屏幕上

----------------------------------------

变量的数据类型
标准类型:
number
varchar2
date
boolean
binary_integer
组合类型
record table类型
参考类型
ref cursor
大类型:(一般存储的是资源的路径)
BFILE 大二进制 0~4G
blob 大字符类型 0~4G
clob
----------------------------------------
关于函数中变量的赋值,可以在声明时就初始化
也可以先声明,等用到的时候再赋值
赋值符号 := 可以赋值plsql中的任何类型
declare
num number;
name varchar2(30);
begin
num:=1;
name:='Judy';
dbms_output.put_line('NO.'||num||'is'||name);
end;

声明变量时就赋值
declare
num number:=1;
name varchar2(30):='Judy';
begin
dbms_output.put_line('NO.'||num||' is '||name);
end;

plsql中注释可以用
/**/ 多行注释 和 --单行注释
declare
name varchar2(10):='Tom';
begin
dbms_output.put_line('My name is '||name);
/*
注释
*/
end;

declare
name varchar2(10):='TOM';
begin
dbms_output.put_line('My name is '||name);
--注释1
--注释2
end;

constant 防止变量被修改
constant 修饰的变量必须初始化
declare
num constant number:=1;
begin
num:=2;
end;
constant修饰的变量再次赋值时将会出现如下错误
PLS-00363: expression 'NUM' cannot be used as an assignment target

变量声明之后未初始化的值为空
declare
num number;
begin
dbms_output.put_line('num is '||num||'?');
end;

在函数中需要用到,已存在的表中数据类型时
可以使用%type
emp_id s_emp.id%type;
s_emp数据库中已经存在的表名,id是所需要的表中的数据类型
可以使用select从一张表中取值然后赋给变量
declare
emp_id s_emp.id%type;
emp_name s_emp.first_name%type;
emp_salary s_emp.salary%type;
begin
select id,first_name,salary into emp_id,
emp_name,emp_salary from s_emp where id=1;
dbms_output.put_line(emp_id||' '||emp_name||
' '||emp_salary);
end;

record 相当于C语言中的结构体
type 记录名 is record(
变量名 类型,
变量名 类型
......
);
declare
type emp is record(
id number,
name varchar2(30)
);
emp1 emp;
emp2 emp;
begin
emp1.id:=1;
emp1.name:='Tom';
dbms_output.put_line(emp1.id||' '||emp1.name);
emp2:=emp1;
dbms_output.put_line(emp2.id||' '||emp2.name);
end;

同类型record在相互赋值时
可以整体赋值
也可以给几个需要的变量之间进行赋值

当需要在一个record中记录一个表格中的所有类型时
使用 表名%rowtype
declare
emp s_emp%rowtype;
begin
select * into emp from s_emp where id=1;
dbms_output.put_line(emp.id||' '||
emp.first_name||' '||emp.salary);
end;
注意:
emp中的变量名和使用
SQL>desc s_emp
查看到的表头里面变量名是一致的(包括类型和顺序)
---------------------------------------------
定义表类型
type 表名 is table of 表中的数据类型
index by binary_integer;

相当于C语言中的数组
其中数据类型可以时基本类型 也可以时记录类型
只有当向表中插入数据的时候才会分配内存

下标 是整数的取值范围,可以不连续
使用迭代思想
first() 得到第一元素的下标
next(n-1) 跟据上一个元素n-1的的下标得到下一个元素的下标
last() 最后一个元素的下标

基本类型表
declare
type numbertype is table of number
index by binary_integer;
nums numbertype;
num_index number;
begin
nums(1):=100;
nums(3):=300;
nums(5):=700;
/*改成循环
num_index:=nums.first();
dbms_output.put_line('nums(1)= '||nums(num_index));
num_index:=nums.next(num_index);
dbms_output.put_line('nums(3)= '||nums(num_index));
num_index:=nums.next(num_index);
dbms_output.put_line('nums(7)= '||nums(num_index));
*/
num_index:=nums.first();
loop
dbms_output.put_line('nums('||num_index||')'||
nums(num_index));
exit when num_index=nums.last();
num_index:=nums.next(num_index);
end loop;
end;

record类型表
declare
type employee is table of s_emp%rowtype
index by binary_integer;
emp employee;
emp_index binary_integer;
num number:=1;
begin
while(num<=25) loop
select * into emp(num) from s_emp where id=num;
num:=num+1;
end loop;
emp_index:=emp.first();
loop
dbms_output.put_line(emp(emp_index).id||':'||
emp(emp_index).first_name||':'||
emp(emp_index).salary);
exit when emp_index=emp.last();
emp_index:=emp.next(emp_index);
end loop;
end;

---------------------------------------------
plsql中的if语句
if 条件 then
/*符合条件执行代码*/
else
/*不符合条件执行的代码*/
end if;
if 条件1 then
/*符合条件1执行的代码*/
elsif 条件2 then
/*符合条件2执行的代码*/
........
elsif 条件n then
/*符合条件n执行的代码*/
else
/*所有上述条件都不符合执行的代码*/
------------------------------------------------
plsql中的循环
1.最简单的循环
loop
/*执行代码*/
exit when 退出条件
/*执行代码*/
end loop;
2.while 循环
while 退出条件 loop
/*执行代码*/
end loop;
3.for 循环
for i in 1..n loop
/*执行代码*/
end loop;
注:i 不需要声明,系统会自动声明
1..n的取值范围[1,n]

如果循环需要从n到1执行
for i in reverse 1..n loop
/*执行代码*/
end loop;
4.嵌套循环
begin
for i in 1..n loop
for j in 1..m loop
/*执行代码*/
end loop;
end loop;
end;
注:
在while和for循环中可以使用
exit when 退出条件
提前退出循环
-----------------------------------------
plsql中依旧和C语言中的变量规则一样,局部变量优先
plsql解决这种问题的办法标签
标签 <<标签名>>
<<abc>>
declare
num number:=1;
begin
declare
num number:=2;
begin
dbms_output.put_line('num='||num);
dbms_output.put_line('abc.num='||abc.num);
end;
end;

免责声明:文章转载自《plsql学习笔记1》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇一套完整自定义工作流的实现Ubuntu18 编译OpenJDK12 JVM下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

windows7安装docker异常:looks like something went wrong in step ‘looking for vboxmanage.exe’

一、背景 最近准备抽点时间研究下docker,选择在家中的windows系统上安装。 我的系统是windows7,首先安装Docker Toolbox,Docker Toolbox是一个工具集,主要包含如下内容: Docker CLI 客户端,用来运行docker引擎创建镜像和容器 Docker Machine. 可以让你在windows的命令行中运行do...

dev -c++ 快捷键

转自:http://blog.csdn.net/abcjennifer/article/details/7259222 F8:开始调试 F7:进一步执行当前行,并跳到下一行 F4:添加查看 ctrl + F7 跳到下一断点, shift + F4 跳到光标所在行,并在该行设置断点 用鼠标选择源文件中的变量名,然后按 F4 也可以查看变量的值,该变量会出现...

python 处理oracle 分页查询

python 处理oracle 分页查询 # SQL语句 sql = '''SELECT * FROM (SELECT B.*, ROWNUM AS rowno FROM ( SELECT id, value, name from T_table WHERE name like '%{name }...

Mysql数据优化--DBA梳理珍藏篇

1. 优化SQL1)     通过show status了解各种sql的执行频率         show status like 'Com_%'        了解 Com_select,Com_insert 的执行次数 2)    通过Explain分析低效的sql语句 3)    建立合适的索引 4)    通过show status like '...

switch语句不能使用枚举的成员变量

出现问题: 写了个代码,需要使用枚举的来判断对于的事务处理 然而这里的编译器报错:constant expression required switch 的case中,必须要用常量,想了一下,枚举里面的code是可以相同的 实在不想在 类里面 定义 public static final int code 这样的常量来代替枚举 解决方法: 在枚举类中添加...

Delphi部分函数、命令、属性中文说明

Abort 函数 引起放弃的意外处理Abs 函数 绝对值函数AddExitProc 函数 将一过程添加到运行时库的结束过程表中Addr 函数 返回指定对象的地址AdjustLineBreaks 函数 将给定字符串的行分隔符调整为CR/LF序列Align 属性 使控件位于窗口某部分Alignment 属性 控件标签的文字位置AllocMem 函数 在堆栈上分...