关于 plsql 的总结 (一)
来源:互联网 发布:手机dlna软件 编辑:程序博客网 时间:2024/06/07 14:49
今天听老师讲了一天的plsql 下面是我自己的一些理解和总结,希望能帮助到一起学习的朋友们。
我用的是oracle。
1. plsql的程序结构
declare
/* 申明区 -> 用来定义变量 类型 异常等 */
begin
/* 执行区 -> 用来执行sql语句 或者plsql语句 */
exception
/* 异常处理区 -> 用于处理异常 */
end;
2.简单的 plsql程序
打开输出
set serveroutput on
begin
dbms_output.put_line ('hello plsql !'); /* 输出语句 */
end;
/
3.plsql 中的变量定义 (让我想到数据库中变量的定义)
declare
/* 定义变量 */
var_num number;
var_name varchar(25);
begin
/* 给变量赋值 注意冒号 */
var_num:=100;
var_name:='Erick';
dbms_output.put_line (var_num||':'||var_name);
end;
/
当然在定义的同时可以初始化
declare
/* 定义变量 并初始化 */
var_num number:=100;
var_name varchar(25):='Erick';
4.变量的修饰
constant -> const
not null -> 定义同时赋初值
变量的类型:
1.标量类型
number
char
varchar
date
boolean (true false NULL)
binary_integer
2.替代的语法:
定义两个标量 分别和s_emp表的id,first_name 的类型保持一致,然后把id=1的值赋给这两个变量。
declare
var_id number(7);
var_name varchar(25);
begin
var_id:=1;
var_name:='Erick';
dbms_output.put_line (var_id||':'||var_name);
end;
/
替代 赋值 into
declare
var_id number(7);
var_id number(7);
var_name varchar(25);
begin
select id,first_name into var_id,var_name from s_emp where id=1;
dbms_output.put_line (var_id||':'||var_name);
end;
/
替代类型 可以得到表的一个字段对应的类型
表名.字段名%type
declare
var_id s_emp.id%type;
var_name s_emp.first_name%type;
begin
select id,first_name into var_id,var_name from s_emp where id=1;
dbms_output.put_line (var_id||':'||var_name);
end;
/
3.plsql中的记录类型 record
declare
/* 定义一个记录类型 注意不是分隔类型 */
type emptype is record (
var_id s_emp.id%type,
var_name s_emp.first_name%type,
var_salary s_emp.salary%type
);
/* 使用类型定义变量 */
var_emp emptype;
begin
select id,first_name,salary into var_emp from s_emp where id=1;
dbms_output.put_line (var_emp.var_id||':'||var_emp.var_name||':'||var_emp.var_salary);
dbms_output.put_line (var_emp.var_id||':'||var_emp.var_name||':'||var_emp.var_salary);
end;
/
记录类型:
如何定义记录类型 ?
type 类型名 is record (
字段名 类型,
字段名 类型,
字段名 类型
如何定义记录类型 ?
type 类型名 is record (
字段名 类型,
字段名 类型,
字段名 类型
);
使用记录类型定义变量
变量名 类型名
4.表名%rowtype 得到表的一行对应的类型
declare
var_emp s_emp%rowtype;
begin
select id,name,salary into var_emp from s_emp where id=1;
dbms_purput.put_line (var_emp.id||':'||var_emp.first_name||':'||var_emp.salary);
end;
/
使用%rowtype 类型 就是得到表的一行对应的记录类型
字段名字 和 字段顺序和 desc 表名出来的顺序和名字
完全一致.就是一个字段 名字和顺序 和表头完全一致的
record类型
字段名字 和 字段顺序和 desc 表名出来的顺序和名字
完全一致.就是一个字段 名字和顺序 和表头完全一致的
record类型
map
table 类型名 is table of 表中的类型 index by binary_integer;
注:表中元素的类型可以是number varchar record类型
declare
/* 定义一个table类型 */
type numstype is type of s_emp.id%type index by binary_integer;
/* 使用类型定义的变量 */
var_nums numstype;
begin
/* 给变量赋值 */
var_nums(100):=1;
var_nums(2):=3;
var_nums(200):=50;
var_nums(300):=27;
dbms_output.put_line (var_nums(200));
end;
/
declare
type numstype is table of s_emp.id%type index by binary_integer;
var_nums numstype;/* 定义一个访问下标 */
var_ind binary_integer;
begin
var_nums(100):=1;
var_nums(2):=3;
var_nums(200):=13;
var_nums(300):=23;
var_ind:=100;
var_nums(300):=23;
var_ind:=100;
dbms_output.put_line (var_nums(var_ind));
end;
/
迭代器思想
first() -> 得到第一个元素对应的下标
next(n) -> 根据一个元素的下标得到下一个元素的下标
last() -> 得到最后一个元素的下标
declare
type numstype is table of s_emp.id%type index by binary_integer;
var_nums numstype;
var_ind binary_integer;
begin
var_nums(100):=1;
var_nums(2):=3;
var_nums(200):=13;
var_nums(300):=23;
var_ind:=var_nums.first();
dbms_output.put_line(var_nums(var_ind));
var_ind:=var_nums.next(var_ind);
dbms_output.put_line(var_nums(var_ind));
var_ind:=var_nums.next(var_ind);
dbms_output.put_line(var_nums(var_ind)); `
var_nums(200):=13;
var_nums(300):=23;
var_ind:=var_nums.first();
dbms_output.put_line(var_nums(var_ind));
var_ind:=var_nums.next(var_ind);
dbms_output.put_line(var_nums(var_ind));
var_ind:=var_nums.next(var_ind);
dbms_output.put_line(var_nums(var_ind)); `
var_ind:=var_nums.next(var_ind);
dbms_output.put_line(var_nums(var_ind));
var_ind:=var_nums.last();
dbms_output.put_line(var_nums(var_ind));
end;
dbms_output.put_line(var_nums(var_ind));
var_ind:=var_nums.last();
dbms_output.put_line(var_nums(var_ind));
end;
/
变量的作用域和可见性
declare
var_m nuimber:=100;
begin
declare
var_n number:=10;
begin
/* 局部可以访问全局 (var_m) */
end;
/* 全局不能访问局部 */
end;
/
解决方法:
<<flag>> /* 标签语法 解决名字冲突 */
declare
var_m number:=100;
begin
declare
var_n number:=10;
begin
/* 局部优先 */
dbms_output.put_line (var_m);
/* 隐藏局部 */
dbms_output.put_linr (abc.var_n);
end;
end;
/
因为也是刚刚学习plsql 肯定会有很多整理得不够完成甚至错误的地方,希望大家能够指出我的错误。谢谢!
plsql还有条件控制语句 循环语句 等学习了我会努力整理,和大家一起分享。
- 关于 plsql 的总结 (一)
- 关于XML的总结(一)
- 关于傅里叶的总结(一)
- 关于plsql的一些知识点
- plsql遇到的问题总结
- 关于PLSQL
- plsql(一)
- PLSQL总结
- plsql 总结
- 关于正则的------总结(一)
- 关于内存的一小点总结
- 关于数组的面试题总结(一)
- 关于HttpClient的总结(一)
- 关于网络的总结(一)
- ffmpeg关于音频的总结(一)
- 关于jvm的学习总结(一)
- Java关于Properties用法的总结(一)
- 关于X项目的总结一
- Android应用程序需不需要手动退出?
- DX窗口创建和初始化
- 做好时间评估,尽早行动
- 远程访问postgresql数据库
- 第六节cocos2dx的小试牛刀
- 关于 plsql 的总结 (一)
- openjdk和jdk的区别与联系
- 其他TM:biterm topic model
- MyEclipse设置编码方式
- LeetCode:Reorder List C++与Java实现
- Linux下配置NTP时间服务器
- 第七节cocos2dx的架构揣测
- python tab键自动补全
- C++构造函数