目录
3)查询JAMES的工资,如果大于1500元,则发放奖金100元,如果工资大于900元,则发奖金800元,否则发奖金400元。
5)求1..100之间的所有素数(质数:只能被1和本身整除,1除外)
6)求100..999之间的所有水仙花数(个位数的3次方 + 十位数的3次方 + 百位数的三次方 = 这个数值本身)
一、PL/SQL语法结构:
1)PL/SQL语法结构
PL/SQL语法结构:
DECLARE
--declaration statements] --声明部分:变量 常量 游标 如果不需要声明 可以省略
BEGIN
--executable statements --增删改查
END;
2)输出一个 HELLO WORLD
BEGIN
DBMS_OUTPUT.put_line('HELLO WORLD');
END;
DECLARE
V_SQL VARCHAR2(200):='HELLO WORLD';
BEGIN
DBMS_OUTPUT.put_line(V_SQL);
END;
3)输入一个员工编号,打印出其姓名
SELECT ... INTO ... FROM 表 ---单行查询
--输入一个员工编号,打印出其姓名
DECLARE
V_ENAME EMP.ENAME%TYPE;--复制表中某个字段的数据类型
BEGIN
SELECT ENAME INTO V_ENAME FROM EMP WHERE EMPNO=7369;
DBMS_OUTPUT.put_line(V_ENAME);
END;
DECLARE
V_ENAME EMP.ENAME%TYPE;--复制表中某个字段的数据类型
BEGIN
SELECT ENAME INTO V_ENAME FROM EMP WHERE DEPTNO=10;--报错 ,返回多行
DBMS_OUTPUT.put_line(V_ENAME);
END;
注释:返回多行时需使用游标。
DECLARE
V_ENAME EMP.ENAME%TYPE;--复制表中某个字段的数据类型
BEGIN
SELECT ENAME INTO V_ENAME FROM EMP WHERE EMPNO=&输入一个员工编号;
DBMS_OUTPUT.put_line(V_ENAME);
END;
注释:&符号可以输入数据
4)给定一个员工编号,输出其姓名和职位
DECLARE
V_ENAME EMP.ENAME%TYPE;
V_JOB EMP.JOB%TYPE;
BEGIN
SELECT ENAME,JOB INTO V_ENAME,V_JOB FROM EMP WHERE EMPNO=7369;
DBMS_OUTPUT.put_line(V_ENAME||'--'||V_JOB);
END;
注释:DBMS_OUTPUT.put_line只能put一个变量,put多个需要用拼接符连接 ||
DECLARE
V_EMP EMP%ROWTYPE;--把整张表的字段和数量类型复制给变量
BEGIN
SELECT ENAME,JOB INTO V_EMP.ENAME,V_EMP.JOB FROM EMP WHERE EMPNO=7369;
DBMS_OUTPUT.put_line(V_EMP.ENAME||'--'||V_EMP.JOB);
END;
5)求一个半径位10的圆的面积
DECLARE
PI CONSTANT NUMBER(10,2):=3.14;
R NUMBER(10):=3;
S NUMBER(10,2);
BEGIN
R:=10;
S:=PI*R*R;
DBMS_OUTPUT.put_line(S);
END;
DECLARE
PI CONSTANT NUMBER(10,2):=3.14;
R NUMBER(10):=3;
S NUMBER(10,2);
BEGIN
PI:=10;--错误,常量不可以被重新赋值
R:=10;
S:=PI*R*R;
DBMS_OUTPUT.put_line(S);
END;
二、判断
1)判断语法格式
IF 条件 THEN
--条件结构体
END IF;
---------------------
IF 条件 THEN
--条件成立结构体
ELSE
--条件不成立结构体
END IF;
---------
IF 条件1 THEN
....
ELSIF 条件2 THEN
....
ELSIF 条件3 THEN
....
ELSE-- 如果前面都列举完了,可以不写ELSE
...
END IF;
2)给定两个数 输出其最大值
DECLARE
V_NUM1 NUMBER(10):=1;
V_NUM2 NUMBER(10):=2;
BEGIN
IF V_NUM1 > V_NUM2 THEN
DBMS_OUTPUT.put_line(V_NUM1);
ELSE
DBMS_OUTPUT.put_line(V_NUM2);
END IF;
END;