PL编程基础
来源:互联网 发布:什么软件可以算命 编辑:程序博客网 时间:2024/06/06 16:43
1,块(编程):
存储过程 触发器 函数 包
2,命名规范:
定义变量:建议 v_ 作为前缀 如:v_name ;
定义常量:建议c_作为前缀 如:c_num;
定义游标:建议 _cursor最为后缀 如:emp_cursor;
定义例外:建议e_最为前缀 如:e_notData;
,3,块编程:
·定义部分
·执行部分
·异常处理部分
declare
--定义常量,变量,游标,复杂数据类型。。
begin
-- 执行部分
exception
-- 异常处理部分
end;
set serveroutput on ; -- 打开输出选项
才可以输出:dbms_output.put_line(.....);
4,复杂数据类型
|- %type --对于一个字段的类型
--%type的数据类型
declare
--定义类型和emp表中的ename字段的类型一样,
---这样就可以不需要知道ename的类型才来定义变量了
v_ename emp.ename%type;
begin
select ename into v_ename from emp where empno = 7788;
dbms_output.put_line(v_ename);
end;
|- %rowtype -- 对于一个表一条完整的记录的类型
--%rowtype的复杂数据类型
declare
--%rowtype是针对一张表的所有的字段
v_empInfo emp%rowtype;
begin
select * into v_empInfo from emp where empno=7788;
dbms_output.put_line('名字:'|| v_empInfo.ename|| ', 工作:' || v_empInfo.job);
end;
|- is record -- 类似于高级语言的结构体
--多个字段,并非一张表的全部字段
declare
--先要定义这种类型的数据包括哪几个字段信息, type .. is record ..
type v_emp_rcType is record(v_ename emp.ename%type , v_job emp.job%type);
--还要将这个类型赋值给一个变量
v_emp_info v_emp_rcType;
begin
select ename,job into v_emp_info from emp where empno=7788;
--要得到这种类型里面的某一个字段,就可以 "刚才被赋予这种类型的变量.定义时候的参数"
dbms_output.put_line('名字:'|| v_emp_info.v_ename|| ', 工作:' || v_emp_info.v_job);
end;
|- is table of -- 类似于数组
|- cursor --游标
declare
type v_emp_cursor is ref cursor; -- 定义一个游标
v_emps v_emp_cursor; -- 给游标赋值给变量
v_ename emp.ename%type;
begin
--打开游标
open v_emps for select ename from emp;
loop
fetch v_emps into v_ename; -- 取出右边的数据
exit when v_emps%notfound ; -- 退出循环的条件,当游标已经是最后一行了
dbms_output.put_line(v_ename);
end loop;
close v_emps;--关闭游标
end ;
注意:在PL编程中, = 是比较的意思 , 要给变量赋值 := 如: 赋值常量 c_num number:=5 ; 运算的时候赋值 v_n := v_n +1 ;
5,语法:
条件语句
|- if--then --- end if;
|- if-- then --else -- end if;
create or replace procedure sp_pcd_2(empname varchar2) is
v_comm emp.comm%type;
begin
select comm into v_comm from emp where ename = empname;
if nvl(v_comm,0)!=0 then-- 也可以是<>
update emp set comm = nvl(v_comm,0) + 100 where ename = empname;
else
update emp set comm = nvl(v_comm,0) + 150 where ename = empname;
end if;
end;
|- if-- then -- elsif -- then -- end if;
create or replace procedure sp_pcd_3(empname varchar2) is
v_comm emp.comm%type;
begin
select comm into v_comm from emp where ename = empname;
if nvl(v_comm,0) < 50 then
update emp set comm = nvl(v_comm,0) + 100 where ename = empname;
elsif nvl(v_comm,0) between 50 and 100 then
update emp set comm = nvl(v_comm,0) + 50 where ename = empname;
else
update emp set comm = nvl(v_comm,0) + 10 where ename = empname;
end if;
end;
|- case--when -- then --else--end case;
== 运用在sql 语句中
select ename,job,case
2 when sal > 2000 then '有钱'
3 when sal between 1000 and 2000 then '一般'
4 else '穷'
5 end case
6 from emp;
==过程语言中
declare
v_num number:= 10;
v_rs number(5);
begin
case mod(v_num,2) -- 这个表达式是可选的
when 0 then v_rs:=1; -- 后面要记得加个 ;
when 1 then v_rs:=5;
when 2 then v_rs:=8;
else
v_rs := 0 ;
end case;
dbms_output.put_line(v_rs);
end;
循环语句
|- loop -- exit when -- end loop;
declare
type v_emp_cursor is ref cursor; -- 定义一个游标
v_emps v_emp_cursor; -- 给游标赋值给变量
v_ename emp.ename%type;
begin
--打开游标
open v_emps for select ename from emp;
loop
fetch v_emps into v_ename; -- 取出右边的数据
exit when v_emps%notfound ; -- 退出循环的条件,当游标已经是最后一行了
dbms_output.put_line(v_ename);
end loop;
close v_emps;--关闭游标
end;
|- while -- loop -- end loop;
create or replace procedure sp_pcd_5(tname varchar2) is
v_n number:= 16;
v_name varchar(30);
begin
while v_n < 20 loop --条件
v_name:=tname||v_n;
insert into test values(test_id.nextval,v_name);
v_n := v_n+1;-- := 切记
end loop;
end;
|- for - in - loop -- end loop;
begin
for i in 1..5 loop
dbms_output.put_line(i);
end loop;
end;
控制语句
null :
goto :
create or replace procedure sp_pcd_6(deptnum number) is -- 声明变量在is 和begin中间
type test_cursor_type is ref cursor;
sals_cursor test_cursor_type;
v_sal emp.sal%type;
v_empno emp.empno%type;
begin
open sals_cursor for select sal,empno from emp where deptno = deptnum;
<<agin>>
loop
fetch sals_cursor into v_sal,v_empno;
if v_sal < 1000 then
update emp set sal = sal + 200 where empno = v_empno;
elsif v_sal between 1000 and 1500 then
null; -- 什么都不执行,提高代码的可读性
else
goto agin; -- 跳到上面<< agin>>上面去
end if;
exit when sals_cursor%notfound ;
end loop;
end;
- PL/SQL编程基础
- PL编程基础
- PL/SQL编程基础
- PL/SQL编程基础
- PL/SQL编程基础
- PL/sql编程基础
- pl/sql编程基础
- 2.PL/SQL 编程基础
- Oracle PL/SQL 编程基础
- oracle pl/sql 编程基础
- Oracle数据库编程:PL/SQL编程基础
- oracle之PL/SQL编程基础
- Oracle的pl/sql编程基础
- 《精通Oracle10gPLSQL编程》3、PL/SQL基础
- Oracle之PL/SQL编程基础
- Oracle PL/SQL 编程基础 实例
- Oracle PL/SQL 编程基础 实例 2
- PL/SQL编程基础(章节摘要)
- Ubuntu 下目录架构
- 快速排序
- 元素获得焦点focus()的问题
- io流中的输入,读取文件中的字节
- VS2010中实现命令响应函数的删除
- PL编程基础
- Java_使用内部类模拟闭包和回调
- 用setsockopt()来控制recv()与send()的超时
- select下拉框处理
- Android 4.0 事件输入(Event Input)系统
- 存储过程
- 如果spring中xml没有提示
- android 网络视频代码
- value innerText innerHtml的区别