SET SERVEROUTPUT ON
BEGIN
--打印输出
DBMS_OUTPUT.PUT_LINE('hello everyone!');
END;

DECLARE
v_name VARCHAR2(10);
v_sal NUMBER(7,2);
v_hiredate DATE;
c_tax_rate CONSTANT NUMBER(3,2) := 0.02;
v_tax_sal NUMBER(7,2);
v_valid BOOLEAN DEFAULT TRUE;
BEGIN
SELECT ename,sal,hiredate
INTO v_name,v_sal,v_hiredate
FROM emp
WHERE empno = 7369;
--计算所得税
v_tax_sal:= v_sal * c_tax_rate;
--打印输出
DBMS_OUTPUT.PUT_LINE(v_name||'的工资是:'||v_sal||' 雇员日期是:' || v_hiredate|| ' 所得税是:' || v_tax_sal);
IF v_valid THEN
DBMS_OUTPUT.PUT_LINE('已核实');
END IF;
END;

--引用型变量
DECLARE
v_name emp.ename%TYPE;
v_sal emp.sal%TYPE;
BEGIN
SELECT ename,sal
INTO v_name,v_sal
FROM emp
WHERE empno = 7788;
--打印输出
DBMS_OUTPUT.PUT_LINE(v_name||'的工资是:'||v_sal);
END;

--记录型变量
DECLARE
emp_record emp%ROWTYPE;
BEGIN
SELECT * INTO emp_record FROM emp WHERE empno = 7788;
--打印输出
DBMS_OUTPUT.PUT_LINE(emp_record.ename||'的工资是:'||emp_record.sal);
END;

--算术运算符
DECLARE
v_num1 NUMBER(3):=10;
v_num2 NUMBER(3):=2;
BEGIN
DBMS_OUTPUT.PUT_LINE(v_num1+v_num2);
DBMS_OUTPUT.PUT_LINE(v_num1-v_num2);
DBMS_OUTPUT.PUT_LINE(v_num1*v_num2);
DBMS_OUTPUT.PUT_LINE(v_num1/v_num2);
DBMS_OUTPUT.PUT_LINE(v_num1**v_num2);
END;

--关系运算符
DECLARE
v_num1 NUMBER(2) := &n1;
v_num2 NUMBER(2) := &n2;
BEGIN
IF (v_num1 = v_num2) THEN
DBMS_OUTPUT.PUT_LINE('num1等于num2');
ELSIF(v_num1 < v_num2) THEN
DBMS_OUTPUT.PUT_LINE('num1小于num2');
ELSIF(v_num1 > v_num2) THEN
DBMS_OUTPUT.PUT_LINE('num1大于num2');
END IF;

IF (v_num1 <> v_num2) THEN
DBMS_OUTPUT.PUT_LINE('num1不等于num2');
END IF;
END;

--比较运算符
DECLARE
--&n1是替代变量,在执行程序时会提示输入值
v_num1 NUMBER(2):= &n1;
BEGIN
IF(v_num1 BETWEEN 5 AND 10 )THEN
DBMS_OUTPUT.PUT_LINE('num1在5到10之间');
ELSE
DBMS_OUTPUT.PUT_LINE('num1不在5到10之间');
END IF;

IF(v_num1 IN(3,8,10) )THEN
DBMS_OUTPUT.PUT_LINE('num1等于3,8,10中的一个值');
ELSE
DBMS_OUTPUT.PUT_LINE('num1不等于3,8,10中的一个值');
END IF;

IF(v_num1 IS NULL)THEN
DBMS_OUTPUT.PUT_LINE('num1为空');
ELSE
DBMS_OUTPUT.PUT_LINE('num1不为空');
END IF;
END;

--逻辑运算符
DECLARE
v_b1 BOOLEAN := &n1;
v_b2 BOOLEAN := &n2;
BEGIN
IF(v_b1 AND v_b2)THEN
DBMS_OUTPUT.PUT_LINE('AND--TRUE');
END IF;

IF(v_b1 OR v_b2)THEN
DBMS_OUTPUT.PUT_LINE('OR--TRUE');
END IF;

IF(NOT v_b1)THEN
DBMS_OUTPUT.PUT_LINE('v_b1取反为TRUE');
END IF;
END;

--输入员工号,判断员工工资, 显示工资小于3000的员工姓名及工资。
--简单的IF语句
DECLARE
v_name emp.ename%TYPE;
v_sal emp.sal%TYPE;
BEGIN
SELECT ename,sal
INTO v_name,v_sal
FROM emp
WHERE empno = &no;
IF v_sal <3000 THEN
DBMS_OUTPUT.PUT_LINE(v_name||'的工资是:'||v_sal);
END IF;
END;

SELECT * FROM emp;

--输入员工号,判断员工工资,将工资小于3000的员工工资涨200,并显示涨工资的员工姓名,其他员工显示员工姓名及工资。
--二重分支语句
DECLARE
v_name empnew.ename%TYPE;
v_sal empnew.sal%TYPE;
v_empno empnew.empno%TYPE := &no;
BEGIN
SELECT ename,sal
INTO v_name,v_sal
FROM empnew
WHERE empno = v_empno;
IF v_sal <3000 THEN
UPDATE empnew set sal = sal + 200 where empno = v_empno;
COMMIT;
DBMS_OUTPUT.put_line(v_name||'涨工资了');
ELSE
DBMS_OUTPUT.put_line(v_name||'的工资是:'||v_sal);
END IF;
END;

select * from empnew;

--输入员工号,判断员工工资, 工资小于2000,显示低收入,工资小于6000,显示中等收入,其它显示高收入。
--多重分支语句
DECLARE
v_name empnew.ename%TYPE;
v_sal empnew.sal%TYPE;

BEGIN
SELECT ename,sal
INTO v_name,v_sal
FROM empnew
WHERE empno = &no;
IF v_sal<2000 THEN
DBMS_OUTPUT.PUT_LINE(v_name||'的工资是:'||v_sal||' 属于低收入');
ELSIF v_sal<6000 THEN
DBMS_OUTPUT.PUT_LINE(v_name||'的工资是:'||v_sal||' 属于中等收入');
ELSE
DBMS_OUTPUT.PUT_LINE(v_name||'的工资是:'||v_sal||' 属于高收入');
END IF;
END;

/*
--输入员工号,判断员工工资, 显示工资小于3000的员工姓名及工资。
--简单的IF语句
DECLARE
v_name emp.ename%TYPE;
v_sal emp.sal%TYPE;
BEGIN
SELECT ename,sal
INTO v_name,v_sal
FROM emp
WHERE empno = &no;
IF v_sal <3000 THEN
DBMS_OUTPUT.PUT_LINE(v_name||'的工资是:'||v_sal);
END IF;
END;

SELECT * FROM emp;

--输入员工号,判断员工工资,将工资小于3000的员工工资涨200,并显示涨工资的员工姓名,其他员工显示员工姓名及工资。
--二重分支语句
DECLARE
v_name empnew.ename%TYPE;
v_sal empnew.sal%TYPE;
v_empno empnew.empno%TYPE := &no;
BEGIN
SELECT ename,sal
INTO v_name,v_sal
FROM empnew
WHERE empno = v_empno;
IF v_sal <3000 THEN
UPDATE empnew set sal = sal + 200 where empno = v_empno;
COMMIT;
DBMS_OUTPUT.put_line(v_name||'涨工资了');
ELSE
DBMS_OUTPUT.put_line(v_name||'的工资是:'||v_sal);
END IF;
END;

select * from empnew;

--输入员工号,判断员工工资, 工资小于2000,显示低收入,工资小于6000,显示中等收入,其它显示高收入。
--多重分支语句
DECLARE
v_name empnew.ename%TYPE;
v_sal empnew.sal%TYPE;

BEGIN
SELECT ename,sal
INTO v_name,v_sal
FROM empnew
WHERE empno = &no;
IF v_sal<2000 THEN
DBMS_OUTPUT.PUT_LINE(v_name||'的工资是:'||v_sal||' 属于低收入');
ELSIF v_sal<6000 THEN
DBMS_OUTPUT.PUT_LINE(v_name||'的工资是:'||v_sal||' 属于中等收入');
ELSE
DBMS_OUTPUT.PUT_LINE(v_name||'的工资是:'||v_sal||' 属于高收入');
END IF;
END;
*/

--输入成级等级,判断属于哪个层次,并打印输出
--CASE 等值比较
DECLARE
v_grade char(1) := '&no';
BEGIN
CASE v_grade
WHEN 'A' THEN
DBMS_OUTPUT.PUT_LINE('优秀');
WHEN 'B' THEN
DBMS_OUTPUT.PUT_LINE('中等');
WHEN 'C' THEN
DBMS_OUTPUT.PUT_LINE('一般');
ELSE
DBMS_OUTPUT.PUT_LINE('输入有误');
END CASE;
END;

--输入员工号,获取员工工资,判断工资,如果工资小于1500,补助加100,如果工资小于2500,补助加80,如果工资小于5000,补助加50.
--CASE 非等值比较
DECLARE
v_sal empnew.sal%TYPE;
v_empno empnew.empno%TYPE := &no;
BEGIN
SELECT sal
INTO v_sal
FROM empnew
WHERE empno = &no;
CASE
WHEN v_sal<1500 THEN
UPDATE empnew set comm = nvl(comm,0)+100 WHERE empno = v_empno;
WHEN v_sal<2500 THEN
UPDATE empnew set comm = nvl(comm,0)+80 WHERE empno = v_empno;
WHEN v_sal<5000 THEN
UPDATE empnew set comm = nvl(comm,0)+50 WHERE empno = v_empno;
--COMMIT;
END CASE;
END;

select * from empnew;

--基本循环
DECLARE
v_cnt INT :=1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE(v_cnt);
EXIT WHEN v_cnt = 10;
v_cnt := v_cnt+1;
END LOOP;
END;

--while循环
DECLARE
v_cnt INT :=1;
BEGIN
WHILE v_cnt<=10 LOOP
DBMS_OUTPUT.PUT_LINE(v_cnt);
v_cnt := v_cnt+1;
END LOOP;
END;

--for循环
BEGIN
FOR i IN REVERSE 1..10 LOOP
DBMS_OUTPUT.PUT_LINE(i);
END LOOP;
END;

--嵌套循环
DECLARE
v_result INT;
BEGIN
<<outter>>
FOR i IN 1..5 LOOP
<<inter>>
FOR j IN 1..5 LOOP
v_result:=i;
EXIT outter WHEN i=4;
END LOOP inter;
DBMS_OUTPUT.PUT_LINE('内'||v_result);
END LOOP outter;
DBMS_OUTPUT.PUT_LINE('外'||v_result);
END;

--CONTINUE
DECLARE
v_cnt INT :=0;
BEGIN
LOOP
v_cnt := v_cnt+1;
CONTINUE WHEN v_cnt = 5;
DBMS_OUTPUT.PUT_LINE(v_cnt);
EXIT WHEN v_cnt = 10;
END LOOP;
END;

--GOTO语句
DECLARE
v_cnt INT := 1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE(v_cnt);
IF v_cnt=10 THEN
--EXIT;
GOTO end_loop;
END IF;
v_cnt := v_cnt + 1;
END LOOP;
<<end_loop>>
DBMS_OUTPUT.PUT_LINE('循环结束');
END;

--NULL语句
DECLARE
v_sal empnew.sal%TYPE;
v_name empnew.ename%TYPE;
BEGIN
SELECT ename,sal
INTO v_name,v_sal
FROM empnew
WHERE empno = &no;
IF v_sal<3000 THEN
UPDATE empnew set comm = nvl(comm,0)+sal*0.2 WHERE ename=v_name;
COMMIT;
DBMS_OUTPUT.PUT_LINE(v_name||'的奖金更新了');
ELSE
NULL;
END IF;
END;

select * from empnew;

Oracle数据库---PLSQL的更多相关文章

  1. 用Excel导入Oracle数据库plsql

    打开plsql之后,在工具栏点击[tools]--[ODBC Imoprter] 选择导入文件的类型,这里是excel文件,所以选择Excel Files 输入连接数据库的用户名和密码 点击Conne ...

  2. Oracle数据库PLSQL的中文乱码显示全是问号

    plsql连接数据库乱码问题 缘由: 小师妹周末叫我帮她重装数据库,这么大好的周末时光不出去玩儿,给她装数据库这不是很蛋疼么. 我问她为什么要重装,她说:数据存入数据库后,中文字符有乱码,一定是我上次 ...

  3. Oracle数据库PLSQL编程和存储过程

    一.PLSQL编程 1.1.使用PLSQL实现 Hello world! 1 -- Created on 2022/8/22 by ADMINISTRATOR 2 declare 3 -- 这是申明变 ...

  4. 2018.5.30 Oracle数据库PLSQL编程---游标的使用

    显示游标的步骤 /* 显示游标处理步骤 1.声明游标 语法结构:cursor 游标名称 is SQL 语句; 2.打开游标 语法结构:open游标名称; 3.提取数据 语法结构:fetch 4.关闭游 ...

  5. Oracle数据库基础知识

    oracle数据库plsql developer   目录(?)[-] 一     SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外 ...

  6. C#:Oracle数据库带参PLSQL语句的正确性验证

    在有Oracle数据库C#项目中,有一个这样的需求:在界面上配置了带参数的PLSQL语句,但是要通过程序验证其正确性,那么该如何实现?这就是本文要探讨的内容. 一:通过OracleCommand对象的 ...

  7. plsql无法连接64位oracle数据库的解决方法(图文解说)

    oracle11g下载页面:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html,找到适 ...

  8. oracle系列--第五篇 PLSQL连接本地的Oracle数据库

    这篇blog主要是针对新手,我也是个新手:) 我们把oracle成功的安装在了我们的计算机上面,那我们如何才能将PLSQL developer连 接到本地的oracle呢? 首先,我们必须有下面步准备 ...

  9. [原创]安装Oracle 11gR2,以及如何在win8下使用plsql develper连接Oracle数据库 ,在这里和大家分享下

    一,关于win8下安装Oracle 11gR2 1.我下载的是Oracle_11gR2_win64.其中有两个包: 注意:在解压了之后将:win64_11gR2_database_2of2\datab ...

随机推荐

  1. 前端PS常用切图技巧

    前言:前端涉及到的 ps 操作不算复杂,基本上就是切图,本文总结了常用的几种切图技巧. 工具:photoshop cs6 . photoshop cc 1. 传统切图 01 这是最笨的一种方法,核心就 ...

  2. Hutool 3.0.8 发布,Java 工具集

    Hutool 是一个Java工具包,提供了丰富的文件.日期.日志.正则.字符串.配置文件等工具方法,并封装了一套简单易用的ORM框架. 主页:http://hutool.cn/ 文档:http://h ...

  3. WPF下Itemscontrol分组 样式

    原文 WPF下Itemscontrol分组 样式 <ItemsControl Grid.Row="1" DataContext="{Binding Layouts} ...

  4. CentOS7下Docker安装

    Docker现在有CE和EE版本 , CE版本是免费版本 , 该文档安装的就是CE版本 1.删除旧版本docker 保险起见 , 走流程 yum remove docker \ docker-clie ...

  5. PopupWindow设置动画效果

    创建popupwindow的方法 Button menu; private void showPopupWindow() { //设置contentView float density = Densi ...

  6. PHP trait 特性在 Laravel 中的使用个人心得

    trait 是在PHP5.4中为了方便代码复用的一种实现方式,但目前我在看的的PHP项目中较少看的有程序员去主动使用这个实现方式,在laravel中有很多 trait 的使用,关于trait 在 la ...

  7. 使用Boost的DLL库管理动态链接库(类似于Qt中的QLibrary)

    Boost 1.61新增了一个DLL库,跟Qt中的QLibrary类似,提供了跨平台的动态库链接库加载.调用等功能.http://www.boost.org/users/history/version ...

  8. CopyMemory、FillMemory、MoveMemory、ZeroMemory

    CopyMemory 复制内存,第一个参数为目的地址,第二个参数为源地址,第三个参数为复制数据的大小,单位字节,源内存区域不能重叠,如果重叠,可以使用MoveMemory()函数.函数原型如下: vo ...

  9. 2019年5月23日 AY 程序员调侃语录

    我是AY,杨洋,做wpf开发的,最近得了一种病,程序员患得患失综合征.同事说,我年纪在变大,技术跟不上.业余之间,我原创了写了一些语录,给大家中午休息,累疲惫的时候,开心放松下. 1.有很多公司找我谈 ...

  10. java方法中Collection集合的基本使用与方法

    集合类的由来,对象用于封闭特有数据,对象多了需要存储,如果对象的个数不确定就使用集合容器进行存储. 集合特点:1.用于存储对象的容器.2.集合的长度是可变的.3.集合中不可以存储基本数据类型值. 集合 ...