plsql(一)
来源:互联网 发布:天龙八部清风怡江美工 编辑:程序博客网 时间:2024/06/05 00:02
常见访问oracle的技术
PLSQL 过程化sql procedure(存储过程)
proc/c++ 使用c和c++访问oracle数据库
odbc/ado vc访问数据库的技术
sqlj/jdbc java 访问数据库的技术
一plsql中的变量
1.变量的定义 和 初始化
2.变量的修饰
constant not null
一个变量声明为not null 必须赋初始值 ,因为
任何一个变量 定义之后不赋值 值都是NULL.
3.变量的类型
标量类型
数字类型 number binary_integer
字符类型 char varchar2
布尔类型 boolean (true false NULL)
日期类型 date
组合类型
record table
参考类型 引用类型
ref cursor
大类型
CLOB
BLOB 0-4g
BFILE (一般不使用这种类型 因为存储数据
的路径就可以解决问题)
4.使用%type 得到表的字段对应的类型
表名.字段名%type
5.记录类型 record 类型
/*定义一个类似于c语言结构体的类型 */
type 类型名 is record(
字段名 类型,
字段名 类型,
字段名 类型
);
把s_emp 表中的id first_name salary
对应的类型取出来定义变量
然后把id=1的数据赋值给 记录变量
输出这些信息
declare
/* 定义一个记录类型 */
type emptype is record(
id s_emp.id%type,
name s_emp.first_name%type,
salary s_emp.salary%type
);
/* 使用类型定义变量 */
var_emp emptype;
begin
/* 使用sql 给记录类型的变量赋值 */
select id,first_name,salary into var_emp
from s_emp where id=1;
dbms_output.put_line(var_emp.id||':'||
var_emp.name||':'||var_emp.salary);
end;
-------------------------
/*当查询的字段数 少于记录类型的字段数?
没有赋值的字段是NULL值*/
----------------------------------------------
特殊的记录类型
表名%rowtype 取得表的一行对应的类型
s_emp%rowtype
和字段顺序完全相同的记录类型。
6. 类似于c数组的类型 table类型
/*下标不连续
迭代器思想
first() 得到第一个元素对应的下标
last() 最后一个元素对应的下标
next(n) 根据一个元素的下标得到下一个元素的
下标*/
7 变量的作用域和 可见性(跟c语言完全一样)
二. 控制语句
1)分支语句
if a>b then
end if;
------------------
if a>b then
else
end if;
--------------------
if a<b then
elsif a<c then
elsif a<d then
end if;
--------------
2).循环语句
a.简单循环
1.语法
loop
/*循环代码*/
end loop;
一个例子
exit when 退出条件;
if 退出条件 then
exit;
end if;
------------------------
b.while 循环
.while 循环的语法
--------------------
c.for 循环 ----智能循环
1.for循环语法
for 变量 in a..b loop
end loop;
2.输出1到10
begin
for var_i in 1..10 loop
dbms_output.put_line(var_i);
end loop;
end;
3.for循环中的变量不允许修改
4.如何反向输出 输出10 到 1
begin
for var_i in reverse 1..10 loop
dbms_output.put_line(var_i);
exit when var_i=5;
end loop;
end;
----------------------------
d.循环的嵌套 --如何退出循环
1.使用类似c语言的goto 语句
2.plsql中可以把标签放前面
PLSQL 过程化sql procedure(存储过程)
proc/c++ 使用c和c++访问oracle数据库
odbc/ado vc访问数据库的技术
sqlj/jdbc java 访问数据库的技术
plsql 扩展了sql
1.变量 和数据类型
2.控制语句 if for goto
3.过程和 函数
4.对象和对象的函数
plsql的程序结构declare /*申明区 定义变量 和 定义类型 */begin /*执行区 执行sql语句 和plsql语句*/exception /*异常处理区 处理错误的区域*/end;
设置输出并测试
set serveroutput on/*测试*/begin dbms_output.put_line('hello plsql'); end;/
一plsql中的变量
1.变量的定义 和 初始化
declare var_id number:=100; var_name varchar2(30):='test';begin dbms_output.put_line(var_id||':'|| var_name); end;/
2.变量的修饰
constant not null
declare /* 定义变量 */ var_id constant number:=1000; var_name varchar2(30) not null:='a'; begin /* 赋值*/ var_id:=1001; */ var_name:='test'; dbms_output.put_line(var_id||':'|| var_name); end;/
一个变量声明为not null 必须赋初始值 ,因为
任何一个变量 定义之后不赋值 值都是NULL.
3.变量的类型
标量类型
数字类型 number binary_integer
字符类型 char varchar2
布尔类型 boolean (true false NULL)
日期类型 date
组合类型
record table
参考类型 引用类型
ref cursor
大类型
CLOB
BLOB 0-4g
BFILE (一般不使用这种类型 因为存储数据
的路径就可以解决问题)
4.使用%type 得到表的字段对应的类型
表名.字段名%type
declare var_id s_emp.id%type; var_name s_emp.first_name%type; begin /* 使用sql语句给变量赋值 */ select id,first_name into var_id,var_name from s_emp where id=1; dbms_output.put_line(var_id||':' ||var_name); end;
5.记录类型 record 类型
/*定义一个类似于c语言结构体的类型 */
type 类型名 is record(
字段名 类型,
字段名 类型,
字段名 类型
);
把s_emp 表中的id first_name salary
对应的类型取出来定义变量
然后把id=1的数据赋值给 记录变量
输出这些信息
declare
/* 定义一个记录类型 */
type emptype is record(
id s_emp.id%type,
name s_emp.first_name%type,
salary s_emp.salary%type
);
/* 使用类型定义变量 */
var_emp emptype;
begin
/* 使用sql 给记录类型的变量赋值 */
select id,first_name,salary into var_emp
from s_emp where id=1;
dbms_output.put_line(var_emp.id||':'||
var_emp.name||':'||var_emp.salary);
end;
-------------------------
/*当查询的字段数 少于记录类型的字段数?
没有赋值的字段是NULL值*/
----------------------------------------------
特殊的记录类型
表名%rowtype 取得表的一行对应的类型
s_emp%rowtype
declare /*使用表的一行的类型定义一个变量*/ var_emp s_emp%rowtype; var_emp2 s_emp%rowtype;begin select * into var_emp2 from s_emp where id=1; var_emp:=var_emp2; dbms_output.put_line(var_emp.id||':'|| var_emp.first_name||':'||var_emp.salary);end;%rowtype 就是一个字段名和表头中的字段名
和字段顺序完全相同的记录类型。
6. 类似于c数组的类型 table类型
declare /*定义一个table类型*/ type numstype is table of s_emp.id%type index by binary_integer; var_nums numstype; var_ind binary_integer:=1;begin var_nums(1):=100; var_nums(2):=300; var_nums(3):=800; select salary into var_nums(4) from s_emp where id=1; /*访问table类型的变量*/ dbms_output.put_line(var_nums(var_ind)); var_ind:=var_ind+1; dbms_output.put_line(var_nums(var_ind)); var_ind:=var_ind+1; dbms_output.put_line(var_nums(var_ind)); var_ind:=var_ind+1; dbms_output.put_line(var_nums(var_ind));end;
/*下标不连续
迭代器思想
first() 得到第一个元素对应的下标
last() 最后一个元素对应的下标
next(n) 根据一个元素的下标得到下一个元素的
下标*/
declare /*定义一个table类型*/ type numstype is table of s_emp.id%type index by binary_integer; var_nums numstype; var_ind binary_integer:=1;begin var_nums(1):=100; var_nums(5):=300; var_nums(3):=800; select salary into var_nums(4) from s_emp where id=1; /*访问table类型的变量*/ 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.last(); dbms_output.put_line(var_nums(var_ind));end;
7 变量的作用域和 可见性(跟c语言完全一样)
二. 控制语句
1)分支语句
if a>b then
end if;
------------------
if a>b then
else
end if;
--------------------
if a<b then
elsif a<c then
elsif a<d then
end if;
--------------
2).循环语句
a.简单循环
1.语法
loop
/*循环代码*/
end loop;
一个例子
/*从1 输出到 10*/ declare var_i number; begin var_i:=1; loop dbms_output.put_line(var_i); /*退出循环*/ exit when var_i=10; var_i:=var_i+1; end loop; end;/*如何退出循环?*/
exit when 退出条件;
if 退出条件 then
exit;
end if;
------------------------
b.while 循环
.while 循环的语法
while 循环条件 loop
end loop;--------------------
c.for 循环 ----智能循环
1.for循环语法
for 变量 in a..b loop
end loop;
2.输出1到10
begin
for var_i in 1..10 loop
dbms_output.put_line(var_i);
end loop;
end;
3.for循环中的变量不允许修改
4.如何反向输出 输出10 到 1
begin
for var_i in reverse 1..10 loop
dbms_output.put_line(var_i);
exit when var_i=5;
end loop;
end;
----------------------------
d.循环的嵌套 --如何退出循环
1.使用类似c语言的goto 语句
declare var_x number:=1; var_y number:=1; begin loop var_y:=1; loop dbms_output.put_line(var_y); /*满足一个条件 退出外层循环*/ if var_y=3 then goto outerloop; end if; var_y:=var_y+1; end loop; exit when var_x=3; var_x:=var_x+1; end loop; <<outerloop>> NULL; end;
2.plsql中可以把标签放前面
declare var_x number:=1; var_y number:=1; begin <<outerloop>> loop var_y:=1; loop dbms_output.put_line(var_y); /*满足一个条件 退出外层循环*/ if var_y=3 then exit outerloop; end if; var_y:=var_y+1; end loop; exit when var_x=3; var_x:=var_x+1; end loop; end;
- PLSQL语言(一)
- PLSQL语言(一)
- plsql(一)
- PLSQL基础(一)
- 数据库-Oracle-plsql(一)
- PLSQL学习笔记(一)
- plsql(一)
- PLSQL Developer报错(一)
- PLSQL访问网页简单案例(一)
- PLSQL访问网页简单案例(一)
- PLSQL Developer11远程连接oracle11G(一)
- oracle之PLSql语言(一)
- oracle plsql学习一
- PLsql注册码一枚
- plsql 实战题目 一:
- PLSQL 基础教程 一 数据结构
- plsql程序设计详解(一)
- 『PLSQL』plsql编程 一 集合
- 2013.9.28微软笔试题-真题分析 链表大题 mircosoft
- Eclipse快捷键使用
- 记录配置cocos2dx android eclipse编译环境 in win7
- Leetcode: Letter Combinations of a Phone Number
- HRBUST 1351 欧拉路径及回路的判断~
- plsql(一)
- AboutServer
- Android Low Memory Killer
- Struts2与Spring结合的jar包
- 【NOIP 2010】 引水入城
- 使用Eclipse构建Maven项目 (step-by-step)
- AdMob demo code.
- POJ 2453二进制又一重要用法
- Mvc示例之六---bs软件的路径