--基本结构
DECLARE
--变量声明部分:在此声明PL/SQL用到的变量,类型,游标,以及局部的存储过程和函数
BEGIN
--执行部分:过程及SQL语句,即程序的主要部分
EXCEPTION
--执行异常部分:异常处理
END;
--PL/SQL基本规范:全部的保留字,roacle的内置函数,程序包以及用户自定义的数据类型都用大写
--PL/SQL基本规范::每行只写一条语句,逗号后以及运算符的前后都应加空格
--PL/SQL基本规范::要使用有意义的名称命名:
--PL/SQL基本规范:使用"_"的连接方式,而不是使用大小写混合的方式
--PL/SQL基本规范:变量前最好加上前缀,以表示方变量的数据类型,作用范围等
--1.定义变量时,建议用v_作为前缀:v_ename
--2.定义常量时,建议用c_作为前缀:c_rate
--3.定义异常时,建议用e_作为前缀:e_error

--根据用户输入的商品ID来查商品库存

DECLARE
V_ID NUMBER := &V_ID; --用户输入商品ID
V_STOCKCOUNT NUMBER; ---库存量
BEGIN
SELECT STOCKCOUNT INTO V_STOCKCOUNT FROM ES_PRODUCT WHERE ID = V_ID;
DBMS_OUTPUT.PUT_LINE('库存量:' || V_STOCKCOUNT); END;

------升级变量的类型和表中的字段类型相同 变量名 名表.字段名%TYPE 来声明

DECLARE
V_ID ES_PRODUCT.ID%TYPE := &ID; --用户输入商品编号
V_NAME ES_PRODUCT.NAME%TYPE; --变量名称与商品表的名称字段类型相同
V_PRICE ES_PRODUCT.PRICE%TYPE; --变量价格与商品表的价格字段类型相同
V_SALEDATE ES_PRODUCT.SALEDATE%TYPE; --变量上架日期与商品表的上架日期字段类型相同
V_STOCKCOUNT ES_PRODUCT.STOCKCOUNT%TYPE; --变量库存量与商品表的库存量字段类型相同
BEGIN
SELECT NAME, PRICE, SALEDATE, STOCKCOUNT
INTO V_NAME, V_PRICE, V_SALEDATE, V_STOCKCOUNT
FROM ES_PRODUCT
WHERE ID = V_ID;
DBMS_OUTPUT.PUT_LINE('商品名称 :' || V_NAME || ' 商品价格 :' || V_PRICe || ' 商品上架时间 :' ||
V_SALEDATE || ' 商品库存 :' || V_STOCKCOUNT); END;

--升级使用一个变量来代表一个表中的一行字段 变量名  表名%ROWTYPE

--调用时使用 变量名.字段 来用 

DECLARE
v_es_pro es_product%ROWTYPE ; --声明一个变量,表示表中完整行字段变量
v_id es_product.id%TYPE:=&ID; -----用户输入商品编号
BEGIN
SELECT NAME,price,saledate,stockcount INTO
v_es_pro.name,v_es_pro.price,v_es_pro.saledate,v_es_pro.stockcount
FROM es_product
WHERE ID=v_id;
DBMS_OUTPUT.PUT_LINE('商品名称 :' || v_es_pro.name || ' 商品价格 :' ||v_es_pro.price || ' 商品上架时间 :' ||
v_es_pro.saledate|| ' 商品库存 :' || v_es_pro.stockcount);
END;

--控制语句
IF <布尔表达式> THEN
PL/SQL 语句
END IF

IF <布尔表达式> THEN
PL/SQL 语句
ELSE
其他语句
END IF
IF <布尔表达式> THEN
PL/SQL 语句
ELSIF<布尔表达式> THEN
其他语句
ELSIF<布尔表达式> THEN
其他语句
ELSE
其他语句
END IF
--根据用户输入的商品ID来查商品库存

DECLARE
V_ID ES_PRODUCT.ID%TYPE := &V_ID; --用户输入商品ID
V_STOCKCOUNT ES_PRODUCT.STOCKCOUNT%TYPE; ---库存量
BEGIN
SELECT STOCKCOUNT INTO V_STOCKCOUNT FROM ES_PRODUCT WHERE ID = V_ID;
DBMS_OUTPUT.PUT_LINE('库存量:'||V_STOCKCOUNT);
--判断库存量是否正常
IF V_STOCKCOUNT > 0 THEN
--更新库存,一次买一个减掉一个
UPDATE ES_PRODUCT SET STOCKCOUNT = STOCKCOUNT - 1
--更新指定的,不然会全部更新
WHERE ID=v_id;
--提出数据操作
COMMIT;
DBMS_OUTPUT.PUT_LINE('库存更新成功');
ELSIF V_STOCKCOUNT = 0 THEN
DBMS_OUTPUT.PUT_LINE('库存量是0,没有库存了');
ELSE
DBMS_OUTPUT.PUT_LINE('库存异常');
END IF;
END;

--根据订单的状态输出对应状态

SELECT * FROM es_order;
DECLARE
V_ID ES_ORDER.ID%TYPE := &ID; --用户输入查询的订单编号
V_STATUS ES_ORDER.STATUS%TYPE; --订单状态
V_STANTUSNAME VARCHAR2(20);
BEGIN
SELECT STATUS INTO V_STATUS FROM ES_ORDER WHERE ID = V_ID;
IF V_STATUS = 1 THEN
V_STANTUSNAME := '已提交';
ELSIF V_STATUS = 2 THEN
V_STANTUSNAME := '已付款';
ELSIF V_STATUS = 3 THEN
V_STANTUSNAME := '已发货';
ELSIF V_STATUS = 4 THEN
V_STANTUSNAME := '已完成';
ELSE
V_STANTUSNAME := '未知状态';
END IF;
DBMS_OUTPUT.PUT_LINE(V_STANTUSNAME);
END;

CASE语法:
格式一:
CASE 条件表达式
WHEN 条件表达式结果1 THEN
语句段1
WHEN 条件表达式结果2 THEN
语句段2
....
[ELSE 语句段]
END CASE;
格式二:
CASE
WHEN 条件表达式1 THEN
语句段1
WHEN 条件表达式2 THEN
语句段2
....
[ELSE 语句段]
END CASE;
--根据用户输入的商品ID来查商品库存用CASE来完成
--格式一

DECLARE
V_ID ES_ORDER.ID%TYPE := &ID; --用户输入查询的订单编号
V_STATUS ES_ORDER.STATUS%TYPE; --订单状态
V_STANTUSNAME VARCHAR2(20);
BEGIN
SELECT STATUS INTO V_STATUS FROM ES_ORDER WHERE ID = V_ID;
CASE V_STATUS
WHEN 1 THEN
V_STANTUSNAME := '已提交';
WHEN 2 THEN
V_STANTUSNAME := '已付款';
WHEN 3 THEN
V_STANTUSNAME := '已发货';
WHEN 4 THEN
V_STANTUSNAME := '已完成';
ELSE
V_STANTUSNAME := '未知状态';
END CASE;
DBMS_OUTPUT.PUT_LINE(V_STANTUSNAME);
END;

--格式二

DECLARE
V_ID ES_ORDER.ID%TYPE := &ID; --用户输入查询的订单编号
V_STATUS ES_ORDER.STATUS%TYPE; --订单状态
V_STANTUSNAME VARCHAR2(20);
BEGIN
SELECT STATUS INTO V_STATUS FROM ES_ORDER WHERE ID = V_ID;
CASE
WHEN V_STATUS=1 THEN
V_STANTUSNAME := '已提交';
WHEN V_STATUS=2 THEN
V_STANTUSNAME := '已付款';
WHEN V_STATUS=3 THEN
V_STANTUSNAME := '已发货';
WHEN V_STATUS=4 THEN
V_STANTUSNAME := '已完成';
ELSE
V_STANTUSNAME := '未知状态';
END CASE;
DBMS_OUTPUT.PUT_LINE(V_STANTUSNAME);
END;

--循环共有3种
LOOP语法:
LOOP
要执行的语句;
EXIT WHEN <条件语句>---条件满足,退出循环语句
END LOOP;

WHILE循环语法:
WHILE<布尔表达式>LOOP
要执行的语句;
END LOOP;

FOR循环语法;
FOR 循环计数器 IN [REVERSE]下限...上限LOOP
要执行的语句;
END LOOP;
在FOR循环中循环一次,变量自动加1,使用REVERSE,循环变量自动减1,也可以使用EXIT来退出循环

SELECT * FROM es_sort;
ID,sortname,fatherid三个字段
--使用LOOP来添加3条记录

DECLARE
V_ID ES_SORT.ID%TYPE := 5; --为变量赋初始值
V_SORTNAME ES_SORT.SORTNAME%TYPE := '类别'; --指定变量类型并赋初始值
V_FATHERID ES_SORT.FATHERID%TYPE := 0;
BEGIN
LOOP
INSERT INTO ES_SORT VALUES (V_ID, V_SORTNAME || V_ID, V_FATHERID);
V_ID := V_ID + 1;
--退出条件
EXIT WHEN V_ID = 9;
END LOOP;
COMMIT;
dbms_output.put_line('插入成功');
END;

--使用FOR循环来完成,知道循环次数时用FOR

DECLARE
V_ID ES_SORT.ID%TYPE ; --为变量赋类型
V_SORTNAME ES_SORT.SORTNAME%TYPE := '类别'; --指定变量类型并赋初始值
V_FATHERID ES_SORT.FATHERID%TYPE := 0;
BEGIN
FOR v_id IN 9..13 LOOP
INSERT INTO ES_SORT VALUES (V_ID, V_SORTNAME || V_ID, V_FATHERID);
END LOOP;
COMMIT;
dbms_output.put_line('插入成功');
END;

SELECT * FROM es_sort;
--使用WHILE来完成,不知道循次数时用

DECLARE
V_ID ES_SORT.ID%TYPE:=14 ; --为变量赋类型和初值
V_SORTNAME ES_SORT.SORTNAME%TYPE := '类别'; --指定变量类型并赋初始值
V_FATHERID ES_SORT.FATHERID%TYPE := 0;
BEGIN
WHILE v_id>= 14 AND v_id<=20 LOOP
INSERT INTO ES_SORT VALUES (V_ID, V_SORTNAME || V_ID, V_FATHERID);
--变量增加
v_id:=v_id+1;
END LOOP;
COMMIT;
dbms_output.put_line('插入成功');
END;
SELECT * FROM es_sort;

--输出1-100之间能被3整除的数字

DECLARE
V_I NUMBER;
BEGIN
FOR V_I IN 1 .. 100 LOOP
IF (MOD(V_I, 3) = 0) THEN
DBMS_OUTPUT.PUT_LINE(V_I);
END IF;
END LOOP;
END;

PL/SQL基础1(笔记)的更多相关文章

  1. Oracle PL/SQL随堂笔记总结

    1.pl/sql编程 2.存储过程 3.函数 4.触发器 5.包 6.pl/sql基础 -定义并使用变量 7.pl/sql的进阶 8.oracle的视图 1.pl/sql编程 1.理解oracle的p ...

  2. Oracle实战笔记(第六天)之PL/SQL基础

    一.PL/SQL介绍 1.概念 PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL).PL/SQL是Oracle数据库对SQL语句的扩展.在普通SQL语 ...

  3. PL/SQL基础2(笔记)

    1 第一个PL/SQL的程序 DECLARE BEGIN DBMS_OUTPUT.PUT_LINE('Hello World!'); END; / --2一个简单的PL/SQL程序 DECLARE v ...

  4. 慕课网笔记之oracle开发利器-PL/SQL基础

    实例1--if语句 /* 慕课网Oracle数据库开发必备之PL/SQL_2-3 判断用户从键盘输入的数字 1.如何使用if语句 2.接收一个键盘的输入(字符串) */ set serveroutpu ...

  5. Oracle442个应用场景---------PL/SQL基础

    ----------------------------------------------------------------------------------- 备份和恢复数据库略过.在后面解说 ...

  6. Oracle数据库之PL/SQL基础

    介绍PL/SQL之前,先介绍一个图像化工具:Oracle SQL Developer 在oracle的开发过程中, 我们难免会使用第三方开发的软件来辅助我们书写SQL, pl/sql是一个不错的sql ...

  7. PL\SQL 随学笔记

    一.在PL\SQL语句块begin...end;中,不能直接使用select,必须与into结合查询. 例如: declare aa:=22; id2 integer; begin select * ...

  8. PL SQL 基础

    Oracle之PL/SQL学习笔记   自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整 ...

  9. PL/SQL基础知识

    Oracle之PL/SQL学习笔记 自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了 ...

随机推荐

  1. Linux 时钟与计时器

    对 Linux 系统来说,时钟和计时器是两个十分重要的概念.时钟反应的是绝对时间,也可认为是实时时间.计时器反应的则是相对时间,即相对于系统启动后的计时.操作系统内核需要管理运行时间(uptime)和 ...

  2. 你或许不了解的C++函数调用(1)

    这篇博客名字起得可能太自大了,搞得自己像C++大牛一样,其实并非如此.C++有很多隐藏在语法之下的特性,使得用户可以在不是特别了解的情况下简单使用,这是非常好的一件事情.但是有时我们可能会突然间发现一 ...

  3. 编译Libgdiplus遇到的问题

    https://github.com/mono/libgdiplus/releases 下载最新版本 解压并执行  ./autogen.sh,在执行此步时遇到如下问题,并帖出解决办法   问题:执行  ...

  4. 转载--CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡

    源地址:http://www.cnblogs.com/mchina/archive/2012/08/27/2644391.html 一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台: ...

  5. [Node.js] Cluster,把多核用起来

    原文地址: http://www.moye.me/?p=496 引子 众所周知,虽然Node的底层有一个IO线程池,但其应用层默认是单线程运行的,对于多核CPU环境来说,是一种资源的浪费. 所幸Nod ...

  6. NodeJS+Mongodb+Express做CMS博客系统

    楼主正在用业余时间开发中-- ,目前的版本仅支持会员系统,尝鲜一下吧~ hi-blog 一个 nodejs+express+mongodb 的 cms 系统 怎么启动 默认你已经安装了 mongodb ...

  7. [Tool] Visual Studio必备插件 + 技能

    总结自己常用的VS插件,其中部分需要注册. 在该链接http://www.cnblogs.com/neverc/p/4591501.html中提供 1.Web Essentials(测试支持2010, ...

  8. 在MVC视图的代码块中,直接输出文本,有几种方式?

    @{ <div>我爱IT,我是程序员,我骄傲---</div> <!--在C#代码块中,输出文本--> <!--1.0 使用Razor内置标签text--&g ...

  9. JavaScript执行顺序分析

    之前从JavaScript引擎的解析机制来探索JavaScript的工作原理,下面我们以更形象的示例来说明JavaScript代码在页面中的执行顺序.如果说,JavaScript引擎的工作机制比较深奥 ...

  10. CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\helloiis\ceb8cab3\4db603d8\App_global.asax.gr73hi-k.dll”--“拒绝访问。 ”

    我的报错页面: 我是使用的第一种方法解决的. 转至http://blog.csdn.net/zyzlywq/article/details/17916799 解决方法: 1,通常的解决方法:原因是由于 ...