`
这些年
  • 浏览: 402259 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

plsql 学习入门实例

 
阅读更多

函数大全:http://lib.iteye.com/blog/140210

 

命名规范

  标识符    命名规则        例子
  程序变量  V_name          V_name  
  程序常量  C_Name          C_company_name 
  游标变量  Name_cursor     Emp_cursor 
  异常标识  E_name          E_too_many  
  表类型    Name_table_type Emp_record_type 
  表        Name_table      Emp  
  记录类型  Name_record     Emp_record 
  SQL*Plus  替代变量        P_name P_sal  
  绑定变量  G_name          G_year_sal

创建表:

create table person (
username varchar2(20) not null,
age number not null,
money number
)

insert into person values('gbz',24,0);

 

1:数据类型

 

declare 
 --基本数据类型  变量
 v_uaername varchar2(20) not null :='gbz';
 --常量
 c_pi constant  number(6,3):=3.1414926 ;
 --声明记录类型
 type person_record is record(
    name varchar2(20) ,
    age number
 );
 --使用记录类型
 v_person person_record;
 --表类型  与map类似 key只能为数字
 type user_table_type is table of varchar2(20) index by pls_integer;  --可以是long  pls  binary  
 v_users user_table_type;
 type person_table is table of person%rowtype index by long;
 v_persontable person_table; 
 --使用表的字段类型   类型会跟着表一起变 
 v_person_age person.age%type;
 --使用表的所有字段类型   同上  
 v_person_gbz person%rowtype;
 --游标
 cursor person_cursor(p_username varchar2) is select * from person where username=p_username ;
 begin
  dbms_output.put_line('普通变量 username:'||v_uaername);--||是字符连接语句
  dbms_output.put_line('常量 age:'||c_pi);
  v_person.name:='gbz';
  v_person.age:=24;
  dbms_output.put_line('记录变量 person_name:'||v_person.name||'  age:'||v_person.age);
  v_users(1):='gbz';
  v_users(2):='张三';
  dbms_output.put_line('表类型1 '||v_users(2));
  select * into v_persontable(1) from person where username='gbz';
  dbms_output.put_line('表类型2 '||v_persontable(1).username||' money '||v_persontable(1).money);
  v_person_age:=12;
  dbms_output.put_line('使用与表字段相同的类型:'||v_person_age);
  select * into v_person_gbz from person where username='gbz';
  dbms_output.put_line('使用与表记录相同的类型:'||v_person_gbz.username);
  --游标
  open person_cursor('gbz');
  fetch person_cursor into v_person_gbz;
  close person_cursor;
  dbms_output.put_line('游标 '||v_person_gbz.username);
  --for 遍历邮标   无须打开与关闭  
  for v_person_gbz in person_cursor('gbz')
  loop 
  dbms_output.put_line(v_person_gbz.age);
  end loop;
end;

 

2:控制语句

declare    
 v_b boolean := false;   --可以是空值
    
 v_i number :=0;   
begin  
 if v_b then    
  dbms_output.put_line('ok');   
 elsif not v_b then  
  dbms_output.put_line('on');   
 else  
  dbms_output.put_line('null');   
 end if;     
    
 loop   
   --EXIT WHEN( i > 5 );    
   if v_i<15 then  
      dbms_output.put_line(to_char(v_i));   
      v_i:=v_i+1;   
   else  
      exit;   
   end if;   
 end loop;   
    
 while v_i<10 loop   
    dbms_output.put_line(to_char(v_i));   
    v_i:=v_i+1;   
 end loop;   
    
 for v_i in 0..10 loop   
    dbms_output.put_line(to_char(v_i));   
 end loop;   
    
end;  

 

 3:异常处理

     预定义异常

            

declare    
v_person person%rowtype  ;  
begin 
 select * into v_person from person where username='张三';

exception
  --预定义异常处理  无须声明
   when NO_DATA_FOUND then
       dbms_output.put_line('没有这个记录');
       dbms_output.put_line(sqlerrm);  --完整的错误信息
end;  

非预定义的异常处理

declare    
v_person person%rowtype  ;
--声明异常名 
e_notfound exception;
--与错误码关联
pragma exception_init(e_notfound,100);   --错误码即SQLCODE 
begin 
 select * into v_person from person where username='张三';

exception
   when e_notfound then
       dbms_output.put_line('没有这个记录');
       dbms_output.put_line(sqlerrm);
   when others then
       dbms_output.put_line(SQLCODE);
end;  

自定义异常

declare    
v_person person%rowtype  ;
--声明异常名 
e_found exception;

begin 
 update person set money=10 where username='gbz';
 if sql%found then
    raise e_found;
 end if;
exception
   when e_found then
       dbms_output.put_line('记录已经更新');
       dbms_output.put_line(sqlerrm);
   when others then
       dbms_output.put_line(SQLCODE);
end; 

   

declare 
 e_myException exception; --自定义异常
begin
 dbms_output.put_line('hello');
 raise e_myException;
 dbms_output.put_line('world');  --不会执行
 exception
     when e_myException then
          dbms_output.put_line(sqlcode); --当前会话执行状态,错误编码
          dbms_output.put_line(sqlerrm); --当前错误信息
          dbms_output.put_line('my error');

     when others then
          dbms_output.put_line('error');
end;

4:goto(代码逻辑混乱少用)

declare
  i number:=0;
 begin
   if i=0 then 
     goto hello;
   end if;
   <<hello>> --goto 
   begin
     dbms_output.put_line('hello');
     goto over;
   end;
   <<world>>
   begin
     dbms_output.put_line('world');
     goto over;
   end;
   <<over>>
   dbms_output.put_line('over');
 end;

5:存储过程

create or replace procedure selectperson(
p_money in number,
p_username out varchar2,
p_age in out varchar2 
)
is
v_money number :=p_money;
begin
p_username:='没有这个人';
select username into p_username from person where money>v_money;  
exception
  when others then
     p_age:=sqlerrm;
end selectperson;

 函数

CREATE OR REPLACE FUNCTION selperson(p_money in number)  
RETURN varchar2   
AS  
v_name varchar2(20) :='查无此人';  
BEGIN   
select username into v_name from person where money>p_money;
RETURN v_name   ;
exception
  when others then
    return sqlerrm; 
END selperson; 

 

补充

1:使用pl/sql调试存储过程

           1)右击存储过程名----》edit

            2)直接单击行号 或  右击行号---》 set Breakpoint

            3)右击存储过程名---》test

            4)在打开的窗口中可以输入参数值(窗口下方)  然后f9开始调试

2:在pl/sql命令行中运行

           edit   编辑         

           /        运行

分享到:
评论

相关推荐

    模具状态监测行业发展趋势:预计到2030年市场规模为5.06亿美元

    模具状态监测市场:6.8%的年复合增长率引领制造业智能化升级 在快速发展的制造业中,模具作为生产过程中的核心部件,其状态直接影响到产品的质量和生产效率。然而,模具的损耗和故障往往难以预测,给企业带来不小的损失。如今,随着模具状态监测技术的兴起,这一切正在发生改变。这项创新技术不仅能够帮助企业提前发现模具的潜在问题,还能显著延长模具的使用寿命,提升生产效率。但你真的了解这个市场的潜力和现状吗?让我们一同揭开模具状态监测市场的神秘面纱。 市场概况: 根据QYR(恒州博智)的统计,2023年全球模具状态监测市场的销售额已经达到了3.2亿美元,预计到2030年,这一数字将攀升至5.06亿美元,年复合增长率高达6.8%。这一显著的增长背后,是制造业对智能化、自动化生产需求的不断提升,以及模具状态监测技术在提高生产效率、降低维护成本方面的显著优势。 技术创新与趋势: 模具状态监测技术主要依赖于传感器、数据分析和处理等技术手段,能够实时采集模具的温度、振动、压力等指标,并通过与预设参数的比对,及时识别模具的异常情况。随着物联网、大数据和人工智能等技术的不断发展,模具状态监测技术将更加智能化,能够提供

    Kubernetes DevOps实践工作坊-从理论到实战操作脚本集(含源码).zip

    Kubernetes DevOps实践工作坊-从理论到实战操作脚本集(含源码).zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!

    基于springboot+vue3+uniapp的点餐小程序源代码+数据库+文档说明(高分毕设)

    基于springboot+vue3+uniapp的点餐小程序源代码+数据库+文档说明(高分毕设),个人经导师指导并认可通过的毕业设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于springboot+vue3+uniapp的点餐小程序源代码+数据库+文档说明(高分毕设)基于springboot+vue3+uniapp的点餐小程序源代码+数据库+文档说明(高分毕设)基于springboot+vue3+uniapp的点餐小程序源代码+数据库+文档说明(高分毕设)基于springboot+vue3+uniapp的点餐小程序源代码+数据库+文档说明(高分毕设)基于springboot+vue3+uniapp的点餐小程序源代码+数据库+文档说明(高分毕设)基于springboot+vue3+uniapp的点餐小程序源代码+数据库+文档说明(高分毕设)基于springb

    欧姆龙NX1P2系列总线plc程序 自动检测机,plc程序,无触摸屏程序 1.多工位DDR马达转盘控制,多工位同时加工 2.多产品配方功能程序 3.各种实用型自制功能块程序,可重复调用,成熟设备

    欧姆龙NX1P2系列总线plc程序 自动检测机,plc程序,无触摸屏程序 1.多工位DDR马达转盘控制,多工位同时加工。 2.多产品配方功能程序。 3.各种实用型自制功能块程序,可重复调用,成熟设备

    企业微信最全养号、防封、加人机制.pdf

    企业微信最全养号、防封、加人机制.pdf

    LLM 友好的异步爬虫框架

    这是一款用 Python 开发的异步爬虫框架,能够将网站上的数据转化成 Markdown、JSON 等 LLM 友好的输出格式。它完全开源且免费,极大地简化了异步爬虫的编写。相比于付费的 Firecrawl,它具有更快的爬取速度,支持同时抓取多个 URL、页面截图、关键字优化提取(基于 LLM)和复杂的多页面会话管理等功能。

    毕设Python春节电影信息爬取与可视化分析源码+项目说明+全部资料.zip

    毕设Python春节电影信息爬取与可视化分析源码+项目说明+全部资料.zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!

    2019厦门国际银行数创金融杯源码+竞赛策略报告文档.zip

    2019厦门国际银行数创金融杯源码+竞赛策略报告文档.zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!

    基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)

    基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业),个人经导师指导并认可通过的毕业设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开

    基于java的小区智能卡管理系统设计与实现.docx

    基于java的小区智能卡管理系统设计与实现.docx

    NLP中文垃圾短信分类系统源码+设计全部资料+文档报告(自然语言处理课设).zip

    NLP中文垃圾短信分类系统源码+设计全部资料+文档报告(自然语言处理课设).zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!

    电源滤波器车辆状态估计,扩展卡尔曼滤波EKF,无迹卡尔曼滤波UKF车辆状态估计,扩展卡尔曼滤波EKF,无迹卡尔曼滤波UKF 角阶跃输入+整车7自由度模型+UKF状态估计模型+附送EKF状态估计模型,针

    电源滤波器车辆状态估计,扩展卡尔曼滤波EKF,无迹卡尔曼滤波UKF车辆状态估计,扩展卡尔曼滤波EKF,无迹卡尔曼滤波UKF 角阶跃输入+整车7自由度模型+UKF状态估计模型+附送EKF状态估计模型,针对于轮毂电机分布式驱动车辆,进行车速,质心侧偏角,横摆角速度估计。 模型输入:方向盘转角delta,车辆纵向加速度ax 模型输出:横摆角速度wz,纵向车速vx,质心侧偏角β

Global site tag (gtag.js) - Google Analytics