PL/SQL编程基本概念

/*
=============================================================================pl/sql编程
=============================================================================*/--pl/sql块的结构
declare --声明部门:在此声明pl/sql用到的变量、类型以及游标,以及局部的存储过程和函数
begin--执行部分:过程及sql语句,即程序的组成部分
exception --异常处理部分:错误处理
end;--例子
create table toys
(
id number(20),
name varchar2(50),
price number(5,2),
sal_date date
)
insert into toys values(1,'张三',525,sysdate)
insert into toys values(2,'李四',525,'2016-05-06');
select * from toys;declare v_name varchar2(20);v_price number;
beginselect name,price into v_name,v_price from toys where id=1;dbms_output.put_line('名字:'||v_name||',价格'||v_price);
end;
10/*
type和rowtype
-------------------------------------------------
*/
declare -- v_name varchar2(25);-- v_name1 toys.name%type;   --返回一个v_name1 toys%rowtype;  --返回多个e_ronull exception;--声明异常
begin select * into v_name1 from toys where id=1;dbms_output.put_line('名字:'||v_name1.name);
exception when dlp_val_on_index thendbms_output.put_line('将重复键插入id列');
end;--税点
declare 
v_start constant number:=3500;   --声明常量
begin
--sql语句
end--常量和变量的声明变量名称 pl/sql的数据类型(大小):=init_value;
eg:variable_name constant data_type:=value;--应用实例
declare v_ename varchar2(20);v_rate number(7,2);c_rate_incr constant number(7,2):=1.10;
begin--方法一:通过select into 赋值select ename,sal* c_rate_incr into v_ename,v_rate from employee where empno='7788';--方法二:通过赋值操作符“:=”给变量赋值v_ename:='scott';
end;--使用序列赋值v_no:=emp_seq.nextval;----------------------实例2---------------------------------
--根据员工编号查询员工信息
declare v_empno employee.empno%type:=4;v_rec employee%rowtype;
beginselect * into v_rec from employee where empno=v_empno;dbms_output.put_line('姓名:'||v_rec.ename||'工资:'||v_rec.sal||'工作时间:'||v_rec.hiredate);end;
--==执行成功之后,输出:姓名:张四工资:10000工作时间:2017-02-02 00:00:00/*
----------------------pl/sql控制语句--------------------------------
*/
--if的语法
if <布尔表达式> thenpl/sql和sql语句
end if;
------------------------
if<布尔表达式> thenpl/sql和sql语句
else其他语句
end if;
-------------------------
if <布尔表达式> thenpl/sql语句和sql语句
elsif <其他布尔表达式> then其他语句
elsif <其他布尔表达式> then其他语句
else其他语句
end if;----注意:是elsif  不是elseif------------------------------case的语法--------------------------
-------格式一------
case 条件表达式when 条件表达式结果1 then语句段1when 条件表达式结果2 then语句段2when 条件表达式结果n then语句段n[else语句段]
end case;
-------格式二------
casewhen 条件表达式1 then语句段1when 条件表达式2 then语句段2when 条件表达式n then语句段n   
else 语句段
end case;------------------------------循环控制--------------------------
loop 要执行的语句;exit when <条件语句>  --条件满足时,退出循环语句
end loop;---while循环语句的语法
while <布尔表达式> loop 要执行的语句;
end loop;
--for循环语句的语法
for 循环计数器 in [reverse] 下限 ...上限 loop要执行的语句
end loop;------------------------------实例3-------------------------
declare v_counter number:=5;
begindbms_output.put_line('v_counter的当前值为:'||v_counter);if v_counter>=10 thennull;--为了使语法变得有意义,去掉null会报语法错误elsev_counter:=v_counter+10;dbms_output.put_line('v_counter 的改变值为:'||v_counter);end if;end;--========执行成功之后输出:v_counter的当前值为:5   v_counter 的改变值为:15/*=======================异常处理机制===============================
*/--语法
begin sequence_of_statements;
exception when <exception_name> thensequence_of_statements;when others thensequence_of_statements;
end;----------------------------实例4------------------------------------
--查询编号为7788的雇员的福利补助(comm列)
declare v_comm employee.comm%type;e_comm_is_null exception ;--定义异常类型变量
begin select comm into v_comm from employee where empno=7788;if v_comm is null thenraise e_comm_is_null;end if;
exception when no_data_found thendbms_output.put_line('雇员不存在!错误为:'||sqlcode||sqlerrm);when e_comm_is_null thendbms_output.put_line('该雇员无补助');when others then dbms_output.put_line('出现其他异常!');end;
----================测试运行结果:雇员不存在!错误为:100ORA-01403: 未找到任何数据--自定义异常
raise_application_error(error_number,error_message);--实例
declare ....begin ....if v_com is null thenraise_application_error(-20001,'该雇员无补助');end if;
end;/*
====================================显示游标================================
*/
--1.声明游标
cursor cursor_name [(parameter [,parameter]...)]
[return return_type] is select_statement;
--2.打开游标
open cursor_name[(parameters)];
--3.提取游标
fetch cursor_name into variables;
--4.关闭游标
close cursor_name;--------------------实例6------------------------
declare name employee.ename%type;sal employee.sal%type;   --定义两个变量来存放ename和sal的内容cursor emp_cursor is select ename,sal from employee;
beginopen emp_cursor;loopfetch emp_cursor into name,sal;exit when emp_cursor%notfound;dbms_output.put_line('第'||emp_cursor%rowcount||'个雇员:'||name|| 'oooo' || sal);end loop;close emp_cursor;
end;--===执行成功输出:
/*
第1个雇员:张一3000
第2个雇员:张二5000
第3个雇员:张三8000
第4个雇员:张四10000
第5个雇员:张五6300*/--使用显示游标删除或者更新
cursor cursor_name id select_statement for update [of columns];
--在使用for update 子句声明游标时,可以使用下面语法更新行
update table_name set column_name=column_value where current of cursor_name;--根据编号查询雇员的姓名
declare v_ename varchar2(20);
beginselect ename into v_ename from employee where empno=&empno;dbms_output.put_line('雇员的名字是:'||v_ename);
end;select * from employee;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328048.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue.js2.0开发环境搭建(三)

转载自 Vue.js2.0从入门到放弃---入门实例&#xff08;三&#xff09;今天就来简单说一下vue-resource&#xff0c;这是vue的一个与服务器端通信的HTTP插件&#xff0c;用来从服务器端请求数据。话不多说&#xff0c;直接上干货吧。这里PS一下&#xff0c;有人反映之前的代码下…

controller如何保证当前只有一个线程执行_聊聊Spring线程安全,读完之后,大部分程序员收藏了......

Spring作为一个IOC/DI容器&#xff0c;帮助我们管理了许许多多的“bean”。但其实&#xff0c;Spring并没有保证这些对象的线程安全&#xff0c;需要由开发者自己编写解决线程安全问题的代码。Spring对每个bean提供了一个scope属性来表示该bean的作用域。它是bean的生命周期。例…

.NET Core 使用 grpc 实现微服务

GRPC 是Google发布的一个开源、高性能、通用RPC&#xff08;Remote Procedure Call&#xff09;框架。提供跨语言、跨平台支持。以下以一个.NET Core Console项目演示如何使用GRPC框架。 一、定义服务 通过proto定义一个数学计算服务&#xff0c;其中包括两个服务方法&#xff…

范式 第一 第二 第三范式

第一范式&#xff08;每个数据项不可分&#xff09; 如果一个关系模式R的所有属性都是不可分的基本数据项&#xff0c;则R∈1NF&#xff08;即R符合第一范式&#xff09;。 第二范式 &#xff08;没有部分依赖&#xff09; 若关系模式R∈1NF&#xff08;即R符合第一范式&a…

Vue.js2.0开发环境搭建(四)

转载自 vuejs2.0从入门到放弃--入门实例&#xff08;四&#xff09;最近&#xff0c;很多小伙伴有疑惑&#xff0c;想学vuejs必须先了解复杂的构建工具和命令行操作吗&#xff01;&#xff01;答案是否定的&#xff01; 对于很多做前端的同学&#xff0c;涉及到命令行和构建工…

微信小程序父级之间的传值_微信小程序自定义组件封装及父子间组件传值的方法...

首先在我们可以直接写到需要的 page 中&#xff0c;然后再进行抽取组件&#xff0c;自定义组件建议wxzx-xxx命名例如&#xff0c;我们封装的组件名为 **wxzx-loadmorewxzx-loadmore.wxml正在加载{{tip}}这里就是把index.wxml中的需要封装成组件的代码原样copy过来wxzx-loadmore…

[公测]微信小程序设计指南文档

微信小程序开放了。不要在意名额&#xff0c;一定要加大专注度。并保持良好的想法以及意识&#xff0c;扩大认知范围&#xff0c;这样才能占得先机。程序上的事我不懂&#xff0c;设计文档还是有必要看一看。文档并没有讲如何更漂亮。只是从人性化的角度去讲&#xff0c;如何让…

多线程----join插队

package com.kuang.demo05; public class TestJoin implements Runnable {Overridepublic void run() {for (int i 0; i <10 ; i) {System.out.println("VIP线程来插队了&#xff01;&#xff01;&#xff01;"i);}}public static void main(String[] args) thro…

联通 培训 c班还 20190814

看我的ppt是没有很多文字的 文字都在心里 电脑比较旧 可以装一个Linux 还能用 还是装xp把 电脑旧可以在咸鱼上买一个ssd&#xff0c;还能用很久。 Linux 目录每个用户都一样 不可以修改 ps -ef | sudo service sudo 授权 一般都是普通用户 docker 启动就类似模拟…

Vue开源项目库汇总

转载自 Vue开源项目库汇总最近做了一个Vue开源项目库汇总&#xff0c;里面集合了OpenDigg 上的优质的Vue开源项目库&#xff0c;方便移动开发人员便捷的找到自己需要的项目工具等&#xff0c;感兴趣的可以到GitHub上给个star。 UI组件 element ★9305 - 饿了么出品的Vue2的web…

PL/SQL经典练习

/* PL/SQL编程*/--先把scott里面的表弄到test表空间里面来 CREATE TABLE EMP ASSELECT * FROM SCOTT.EMP; CREATE TABLE DEPT ASSELECT * FROM SCOTT.DEPT; /* 上机1 */ --&#xff08;1&#xff09;计算King所交税金DECLARE V_SHUIJIN NUMBER; --应交税金V_SA…

alertmanager 告警恢复_Prometheus配置企业微信告警

kubernetes operator安装的&#xff0c;如果不会可看上一篇文章前提&#xff1a;创建企业微信&#xff0c;创建应用然后配置altermanager.yamlglobal:resolve_timeout: 5m receivers: - name: wechatwechat_configs:- agent_id: "100000x"api_secret: Nm7PRrxxxxG8Ep…

IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API

IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API。 使用IdentityServer4 来实现使用客户端凭据保护ASP.NET Core Web API 访问。 IdentityServer4 GitHub: https://github.com/IdentityServer/IdentityServer4 IdentityServer 框架支持以下功能&…

JAVA多线程总结(笔记)

线程的特点 线程就是独立的执行路径&#xff1b;在线程运行时&#xff0c;即使没有自己创建线程&#xff0c;后台也会有多个线程&#xff0c;如主线程&#xff0c;gc线程&#xff1b;main()称之为主线程&#xff0c;为系统的入口&#xff0c;用于执行整个程序&#xff1b;在一…

很有道理的内容

男生选女朋友最看重的是什么? 病毒营销陈轩 被赞同30万&#xff0c;被收藏24万&#xff0c;顶级病毒营销专家&#xff0c;加个人微信送书 12,540 人也赞同了该回答 有女孩给我发私信&#xff1a; “我是个很好的女孩&#xff0c;漂亮身材好&#xff0c;白领一枚&#xff0c…

学python后做什么工作好_学习完Python课程后可以做什么工作?

Python作为人工智能、大数据的首选编程语言&#xff0c;也是进入编程世界的理想选择&#xff0c;已经成为了大家都在追求学习的语言&#xff0c;那么学习Python之后到底可以做什么呢?为您详细的介绍一下。什么是Python?Python是一种面向对象解释型计算机程序设计语言。而且Py…

vue-beauty 的v-data-table数据单元不换行

原因由于css样式 .ant-table-tbody>tr>td, .ant-table-thead>tr>th {padding: 16px 8px;word-break: keep-all;white-space: nowrap; /*强制不换行*/ } 只需覆盖white-space的值就可以 如&#xff1a; .ant-table-tbody>tr>td {white-space:normal } 补…

用Middleware给ASP.NET Core Web API添加自己的授权验证

Web API&#xff0c;是一个能让前后端分离、解放前后端生产力的好东西。不过大部分公司应该都没能做到完全的前后端分离。API的实现方式有很 多&#xff0c;可以用ASP.NET Core、也可以用ASP.NET Web API、ASP.NET MVC、NancyFx等。说到Web API&#xff0c;不同的人有不同的做法…

公司电脑重装经验 ThinkPad E480 win7重装 电脑重装

***************************下面是20200813更新的****************************** 1.电脑的机械盘老是掉线 要重启才能找到 不用了 还是用自己的移动硬盘代替公司的D盘吧 拷贝也很慢 2.公司的c盘菜120G太小 就只安装必须使用的软件 外接移动硬盘代替电脑的D盘 可以用…

Java 内存泄露以及避免方法

转载自 Java 内存泄露以及避免方法 内存泄露: 是指在程序运行过程中会不断的分配内存空间&#xff0c;那些不再使用的内存空间应该即时回收它们&#xff0c;从而保证可以保证系统可以再次使用这些内存。如果存在无用的内存没有被收回来&#xff0c;那就是内存泄露。 说明…