43,数据库(05)

/*
达内学习 Oracle day41 2013-10-30
*/
常见的访问oracle的技术
1.prosql   过程化SQL
2.proc/c++ 使用C语言或者C++反问Oracle数据库
3.odbc /ADO VC中访问数据库的技术
4.JDBC/SQLJ JAVA访问数据库技术
5.OCI     oracle底层连接接口
PL/SQL(procedural language/Sql)是在标准SQL的基础上增加了过程化处理的语言
oracle客户端工具访问oracle的操作语言
oracle对sql的扩充

plsql扩展了sql
变量和数据类型、控制语句(if 、for、go)、过程(procedure)和函数(function)、对象和方法 。

plsql的程序结构:
declare
    /*申明区:*/
begin
    /*执行区*/
exception
    /*异常处理区*/
end;
--------------------------------
c语言的定义和申明
int   a;//定义
extern  int a;//申明 外部变量
--------------------------------
申明区:用来定义变量 或者 类型。  (不区分定义和申明)
执行区:用来执行sql语句或者plsql语句
异常处理区:当sql语句出错以后  自动转到异常处理区 做错误处理
图形界面:sqldeveloper

begin
 dbms_output.put_line('hello plsql!');
end;
打开输出:
set serveroutput on
------------------------------------------
变量的定义:
1,一定要在申明区
变量名   类型;
2,举例
  declare
    var_id number:=111;
    var_name varchar2(30):='wocao';
  begin
  dbms_output.put_line(var_id||':'||var_name);
   var_id := 1234;
   var_name := 'wozaicao';
   dbms_output.put_line(var_id||'@'||var_name);
  end;
3,变量的修饰
变量名 constant  类型;
变量名  类型 not null; 
var_id  constant number:=111; --不允许修改
var_name varchar2(30) not null:='wocao'; --必须初始化
4,变量的数据类型
标量类型:
number(数字)、binary_integer(二进制整数)、char(定长字符串)
varchar2(变长字符串)、date(日期类型)、boolean(布尔类型 true false null)

复合类型:
record(记录 对应结构)
table (表类型)

参考类型
ref   参考类型
ref cursor 参考游标

大类型:
blob   大二进制 0-4g
clog   大字符类型  0-4g
bfile  文件类型    0-4g

declare
 flag boolean := true;
 jobno binary_integer :=123;
begin
 if flag then
  dbms_output.put_line(jobno);
 end if;
end;
-------------------------------------------------
5,取得表中字段对应的类型
表名.字段名%type   取得对应的类型
定义两个变量  分别和s_emp 表中的 id 和first_name 的类型相同 然后把id = 1的first_name 赋值给定义的变量
declare
myid s_emp.id%type :=1;  /*通过%type定义类型*/
myname s_emp.first_name%type;
begin   /*通过select into语句赋值*/
   select first_name into myname from s_emp where id = myid;
   dbms_output.put_line(myid||'           '||myname);
end;

declare
myid s_emp.id%type := 3;
myname s_emp.first_name%type;
mysalary  s_emp.salary%type ;
begin
  select id,first_name,salary into myid,myname,mysalary from s_emp where id = 3;
  dbms_output.put_line(myid||myname||mysalary);
end;

6,类似于C语言结构体的类型
 record 类型
定义record类型
type record_name is record (
 字段名  类型,
    字段名  类型
);
变量名  记录类型的名字;

declare
type myrecord is record(/*定义记录*/
  myid s_emp.id%type,
  myname s_emp.first_name%type,
  mysalary s_emp.salary%type
);
my3 myrecord;  /*定义记录变量*/
my2 myrecord;
begin
 select id,first_name,salary into my3 from s_emp where id = 3;
  dbms_output.put_line(my3.myid||' '||my3.myname||' '||my3.mysalary);
/*记录类型之间的赋值*/
my2:= my3;/*字符串赋值  my2.name = my3.name  */
end;
----------------------------------
把s_emp 表中id =1的所有数据记录在变量中
s_emp%rowtype
s_dept%rowtype

/*  使用表的一行的类型 定义一个变量 */
declare
 var_emp s_emp%rowtype;
begin
   select * into var_emp from s_emp where id = 1;
   dbms_output.put_line(var_emp.id||':'||var_emp.first_name||':'||var_emp.salary);
end;
/*把id= 50的部门信息仿如一个rowtype类型的变量中并输出*/
declare
type var_dept s_dept%rowtype;
begin
 select * into var_dept from s_dept where id = 50 ;
 dbms_output.put_line(var_dept.id||var_dept.name||var_dept.region_id);
end;
--------------------------------------------------------------------------
8,table 类型
 相当于c中的数组类型
定义 table 类型
type table_name is table of 表中的数据类型 index by binary_integer;

declare
/*定义表类型*/
 type numstype is table of number index by binary_integer;
/*使用类型定义变量*/
 var_nums numstype;
/*定义一个下标变量*/
 var_ind binary_integer;
begin
--向table类型变量中放入数据
 var_nums(-1):= 234;
 var_nums(1):= 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));
end;

/*迭代器思想 根据一个元素的信息 可以得到下一个元素的信息*/
first()可以返回第一个元素对于的下标
next(n) 根据一个元素的下标得到下一个元素的下标
last()得到最后一个元素对应的下标

把s_emp表中idd=1 或 id= 5 或 id= 11 的所有数据放入一个table类型的变量中,然后用迭代器打印 id first_name salary
----   老师写的
declare
  type empstype is table of s_emp%rowtype index by binary_integer;
  var_emps empstype;
  var_ind binary_integer:=1;
begin
 select * into var_emps(var_ind) from s_emp where id=var_ind;
 var_ind:=5;
 select * into var_emps(var_ind) from s_emp where id=var_ind;
 var_ind:=11;
 select * into var_emps(var_ind) from s_emp where id=var_ind;
 var_ind:=var_emps.first();
 dbms_output.put_line(var_emps(var_ind).id||':'||var_emps(var_ind).salary);
 var_ind:=var_emps.next(var_ind);
 dbms_output.put_line(var_emps(var_ind).id||':'||var_emps(var_ind).salary);
 var_ind:=var_emps.last();
 dbms_output.put_line(var_emps(var_ind).id||':'||var_emps(var_ind).salary);
end;
----

------------------------------------------------------------
变量的作用域 和 可见行
plsql块 嵌套
<<abc>> --标签
declare
 var_m number:= 1;
begin
 declare
    var_n number:=100;
     begin
        /*
               局部  可以访问全局  局部优先     
            */
      end;
      /* 全局不能访问局部*/
end;
---------------------------------------------------------
plsql中的控制语句
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;

if a<b then
elsif a<c then
elsif a<d then
else
end if;
----------------------------------------------------------
循环
a,简单循环
loop
……循环条件
end loop;
终止循环:exit when 条件;
          if  条件  then  exit;
b,while 循环
 while 循环条件 loop
……循环语句
  end loop;
declare
i number :=1;
begin
while i<11 loop
dbms_output.put_line(i);
i:=i+1;
end loop;
end;

c,for 循环  ------智能循环
 for 变量 in 区间 loop
  /* 循环语句  */
 end loop;
整数区间1..10 1到10
begin
for i in 1..10 loop
dbms_output.put_line(i);
end loop;
end;

begin
for i in reverse 1..10 loop
dbms_output.put_line(i);
exit when i=5;
end loop;
end;

for循环中的变量不能被修改
-----------------------------------------------------
多重循环的退出
declar
  var_m number;
  var_n number;
begin
  while var_m < 4 loop
  end loop;
end;


    有一个人他有一个小狗,有一天他突然想养一只小猫,小狗就是不同意,但是他就是非要想养一只小猫,小狗就是不同意,那肿么办呢?于是他就和小狗商量说,咱家再养一只小狗好不好,小狗非常开心,因为他每天那么寂寞其实早就想有一个小伙伴了,晚上的时候小狗很高兴很高兴,一晚上都没有睡觉,第二天早晨的时候,主人告诉小狗说咱家要不不养小狗了好吗?小狗当然很失望,很生气,很不愿意,主人趁机说,养小狗可以那养小猫为什么不可以啊,要不这样吧,养一只小狗也养一只小猫好不好,小狗太孤独了只好答应了,虽然它不想多一只小猫,可是最起码也多了一只小狗啊。后来公主和王子过上了幸福的生活。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值