一.常见的访问oracle的技术
plsql 过程化(procedure)sql 存储过程
proc/proc++ 使用c或者c++ 来访问oracle
odbc/ado vc中访问数据库的技术
oci oracle提供的底层接口
sqlj/jdbc java 访问数据库的技术
二.plsql 的特点
结构化 模块化编程
良好的可维护性
良好的可移植性 (同类型)
不便于向异构数据库移植
提升系统性能
三.plsql 扩展了sql
变量和类型
控制语句
函数和过程
对象和方法
四.plsql 程序结构
declare
/* 申明区
声明变量 定义类型 */
begin
/* 执行区
执行sql 语句 或者 plsql语句 */
exception
/* 异常处理区
处理异常 */
end;
/
五.第一个plsql程序
begin
dbms_output.put_line('hello plsql!');
end;
/
设置输出为打开状态
set serveroutput on
开发工具:
命令行:sqlplus
图形化:windows plsqldeveloper
sqlprogramer
标示符:给变量 类型 游标 过程 函数 等命名的
六 变量
6.1 如何声明变量
declare
变量名 类型;
begin
/* 如果一个变量没有赋值 则值为NULL */
declare
var_id number;
var_name varchar2(30);
begin
DBMS_OUTPUT.PUT_LINE(var_id||':'
||var_name);
end;
/
6.2 plsql如何给变量赋值 和 初始化都是
用 :=
declare
var_id number:=0;
var_name varchar2(30):='a';
begin
var_id:=100;
var_name:='test';
DBMS_OUTPUT.PUT_LINE(var_id||':'
||var_name);
end;
/
6.3 变量的数据类型
标量类型: number char varchar2 date
binary_integer boolean
组合类型:record table cursor
参考类型:ref cursor
大类型:BLOB CLOB BFILE
(存储数据的位置 varchar2)
6.4 binary_integer boolean
declare
var_ind binary_integer;
var_f boolean;
begin
var_ind:=1000;
/* var_f:=false; */
var_f:=true;
if var_f then
dbms_output.put_line(var_ind);
end if;
end;
/
6.5 变量的修饰
constant 类型 not null
declare
var_name varchar2(30) not null:='gg';
var_salary constant number:=10000;
begin
var_name:='hello';
-- var_salary:=10001;
dbms_output.put_line(var_name||':'||
var_salary);
end;
/
6.6 写一个plsql 定义两个变量 分别和s_emp
表中 first_name 和salary字段的类型相同。然后
把id=1 的first_name 和 salary 分别赋值给这
两个变量。打印这两个变量的值。
declare
var_name varchar2(25);
var_sal number(11,2);
begin
var_name:='Carmen';
var_sal:=1600;
dbms_output.put_line(var_name||':'
||var_sal);
end;
/
6.7 表名.字段名%type 可以直接获取表的字段
对应的类型。
可以使用sql 语句 对变量进行赋值。
declare
var_name s_emp.first_name%type;
var_sal s_emp.salary%type;
begin
select first_name,salary
into var_name,var_sal
from s_emp
where id=25;
dbms_output.put_line(var_name||':'
||var_sal);
end;
/
6.8 类似于c语言 结构体的类型 record类型
6.8.1 语法
type 类型名 is record(
字段名 类型,
字段名 类型,
字段名 类型
);
变量名 类型名;
6.8.2 把s_emp 表的id,first_name,salary
包装成一个记录类型。然后把id=2 相关数据
放入这个记录类型的变量中。然后输出这个
变量的值。
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
select id,first_name,salary into var_emp
from s_emp
where id=2;
dbms_output.put_line(var_emp.id||':'||
var_emp.name||':'||var_emp.salary);
end;
/
6.8.3 记录类型之间的赋值
declare
/* 定义一个记录类型 */
type emptype is record(
id s_emp.id%type,
name s_emp.first_name%type,
salary s_emp.salary%type
);
var_emp emptype;
var_emp1 emptype;
begin
select id,first_name,salary into var_emp1
from s_emp
where id=2;
/* 整体赋值
var_emp:=var_emp1; */
/* 选择部分字段赋值 */
var_emp.name:=var_emp1.name;
var_emp.salary:=var_emp1.salary;
dbms_output.put_line(var_emp.id||':'||
var_emp.name||':'||var_emp.salary);
end;
/
6.8.4 如果查询字段数据 少于记录类型字段数
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
select first_name,salary
into var_emp.name,var_emp.salary
from s_emp
where id=2;
dbms_output.put_line(var_emp.id||':'||
var_emp.name||':'||var_emp.salary);
end;
/
6.9 思考如何把s_emp 表中 id=1 的所有信息放入
一个记录类型的变量中?
表名%rowtype 获得表的一行对应的类型
s_dept%rowtype
s_emp%rowtype
%rowtype 获取的类型 和 表头中字段名 和 字段
的顺序完全相同。
declare
var_emp s_emp%rowtype;
plsql 过程化(procedure)sql 存储过程
proc/proc++ 使用c或者c++ 来访问oracle
odbc/ado vc中访问数据库的技术
oci oracle提供的底层接口
sqlj/jdbc java 访问数据库的技术
二.plsql 的特点
结构化 模块化编程
良好的可维护性
良好的可移植性 (同类型)
不便于向异构数据库移植
提升系统性能
三.plsql 扩展了sql
变量和类型
控制语句
函数和过程
对象和方法
四.plsql 程序结构
declare
/* 申明区
声明变量 定义类型 */
begin
/* 执行区
执行sql 语句 或者 plsql语句 */
exception
/* 异常处理区
处理异常 */
end;
/
五.第一个plsql程序
begin
dbms_output.put_line('hello plsql!');
end;
/
设置输出为打开状态
set serveroutput on
开发工具:
命令行:sqlplus
图形化:windows plsqldeveloper
sqlprogramer
标示符:给变量 类型 游标 过程 函数 等命名的
六 变量
6.1 如何声明变量
declare
变量名 类型;
begin
/* 如果一个变量没有赋值 则值为NULL */
declare
var_id number;
var_name varchar2(30);
begin
DBMS_OUTPUT.PUT_LINE(var_id||':'
||var_name);
end;
/
6.2 plsql如何给变量赋值 和 初始化都是
用 :=
declare
var_id number:=0;
var_name varchar2(30):='a';
begin
var_id:=100;
var_name:='test';
DBMS_OUTPUT.PUT_LINE(var_id||':'
||var_name);
end;
/
6.3 变量的数据类型
标量类型: number char varchar2 date
binary_integer boolean
组合类型:record table cursor
参考类型:ref cursor
大类型:BLOB CLOB BFILE
(存储数据的位置 varchar2)
6.4 binary_integer boolean
declare
var_ind binary_integer;
var_f boolean;
begin
var_ind:=1000;
/* var_f:=false; */
var_f:=true;
if var_f then
dbms_output.put_line(var_ind);
end if;
end;
/
6.5 变量的修饰
constant 类型 not null
declare
var_name varchar2(30) not null:='gg';
var_salary constant number:=10000;
begin
var_name:='hello';
-- var_salary:=10001;
dbms_output.put_line(var_name||':'||
var_salary);
end;
/
6.6 写一个plsql 定义两个变量 分别和s_emp
表中 first_name 和salary字段的类型相同。然后
把id=1 的first_name 和 salary 分别赋值给这
两个变量。打印这两个变量的值。
declare
var_name varchar2(25);
var_sal number(11,2);
begin
var_name:='Carmen';
var_sal:=1600;
dbms_output.put_line(var_name||':'
||var_sal);
end;
/
6.7 表名.字段名%type 可以直接获取表的字段
对应的类型。
可以使用sql 语句 对变量进行赋值。
declare
var_name s_emp.first_name%type;
var_sal s_emp.salary%type;
begin
select first_name,salary
into var_name,var_sal
from s_emp
where id=25;
dbms_output.put_line(var_name||':'
||var_sal);
end;
/
6.8 类似于c语言 结构体的类型 record类型
6.8.1 语法
type 类型名 is record(
字段名 类型,
字段名 类型,
字段名 类型
);
变量名 类型名;
6.8.2 把s_emp 表的id,first_name,salary
包装成一个记录类型。然后把id=2 相关数据
放入这个记录类型的变量中。然后输出这个
变量的值。
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
select id,first_name,salary into var_emp
from s_emp
where id=2;
dbms_output.put_line(var_emp.id||':'||
var_emp.name||':'||var_emp.salary);
end;
/
6.8.3 记录类型之间的赋值
declare
/* 定义一个记录类型 */
type emptype is record(
id s_emp.id%type,
name s_emp.first_name%type,
salary s_emp.salary%type
);
var_emp emptype;
var_emp1 emptype;
begin
select id,first_name,salary into var_emp1
from s_emp
where id=2;
/* 整体赋值
var_emp:=var_emp1; */
/* 选择部分字段赋值 */
var_emp.name:=var_emp1.name;
var_emp.salary:=var_emp1.salary;
dbms_output.put_line(var_emp.id||':'||
var_emp.name||':'||var_emp.salary);
end;
/
6.8.4 如果查询字段数据 少于记录类型字段数
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
select first_name,salary
into var_emp.name,var_emp.salary
from s_emp
where id=2;
dbms_output.put_line(var_emp.id||':'||
var_emp.name||':'||var_emp.salary);
end;
/
6.9 思考如何把s_emp 表中 id=1 的所有信息放入
一个记录类型的变量中?
表名%rowtype 获得表的一行对应的类型
s_dept%rowtype
s_emp%rowtype
%rowtype 获取的类型 和 表头中字段名 和 字段
的顺序完全相同。
declare
var_emp s_emp%rowtype;