一、完成以下PL/SQL
1. 求半径2米,高3米的圆柱体体积。
2. 求字符串‘abcdefg’的长度。
3. 显示pubs数据库中所有作家的au_lname的开头两个字母,大写显示。(字符函数)
4. 取字符串‘abcdefg’的第2到第5个字母。(字符函数)
5. 计算2001年9月11日到今天已经多少天了。(日期函数)
6. 查询emp表,找出编号为7395的记录,如果名字为SCOTT显示“找到了”否则显示“没找到”。(if语句)
7.编写一个程序,用以接受用户输入的数字。将该数左右反转,然后显示反转后的数
提示:使用循环控制结构.
8.编写一个程序,在emp表中根据empno查询职员信息。如果代码引发NO_DATA_FOUND异常,则显示一则消息.
9.编写一个程序,用以接受用户输入的DEPTCODE,并从employee表中检索该雇员的EMPNO。如果代码引发TOO_MANY_ROWS异常,则显示消息“返回多行”.
--1. 求半径2米,高3米的圆柱体体积。
DECLARE
V NUMBER(4):=3*3.14*2*2;
BEGIN
dbms_output.put_line(V);
END;
--2. 求字符串‘abcdefg’的长度。
DECLARE
V NUMBER(4);
BEGIN
SELECT "LENGTH"('ABCDEFG') INTO V FROM DUAL;
dbms_output.put_line(V);
END;
--3. 显示pubs数据库中所有作家的au_lname的开头两个字母,大写显示。(字符函数)
emp表里的所有员工名字改成第一个字母大写其他小写的形式
declare
name emp.ename%type;
maxv number;
i number :=1;
rr number;
begin
select count(*) into maxv from emp ;
for i in 1..maxv
loop
select m.v_name into name
from
(select rownum rn ,INITCAP(ENAME) v_name from emp ) m
where m.rn=i;
dbms_output.put_line(name);
end loop;
end;
4. 取字符串‘abcdefg’的第2到第5个字母。(字符函数)
DECLARE
V VARCHAR2(20);
BEGIN
SELECT "SUBSTR"('ABCDEFG',2,4) INTO V FROM DUAL;
dbms_output.put_line(V);
END;
5. 计算2001年9月11日到今天已经多少天了。(日期函数)
DECLARE
V NUMBER(20);
BEGIN
SELECT SYSDATE-TO_DATE('2001-09-11','yyyy-mm-dd')
INTO V FROM DUAL;
dbms_output.put_line(V);
END;
6. 查询emp表,找出编号为7395的记录,如果名字为SCOTT 显示“找到了”否则显示“没找到”。(if语句)
第一种方法:先查名字
DECLARE
V EMP.EMPNO%type;
BEGIN
SELECT EMPNO INTO V FROM EMP
WHERE ENAME='SCOTT';
IF(V=7395) THEN
dbms_output.put_line('找到了');
ELSE
dbms_output.put_line('没找到');
END IF;
END;
第二种方法:报异常
DECLARE
V EMP.EMPNO%type;
BEGIN
SELECT EMPNO INTO V FROM EMP
WHERE ENAME='SCOTT';
IF(V=7395) THEN
dbms_output.put_line('找到了');
ELSE
dbms_output.put_line('没找到');
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('没找到');
END;
7.编写一个程序,用以接受用户输入的数字。将该数左右反转,然后显示反转后的数
提示:使用循环控制结构.
DECLARE
V VARCHAR2(20);
M VARCHAR2(20);
BEGIN
M:='&NUM';
SELECT REVERSE(M) INTO V FROM DUAL;
dbms_output.put_line(V);
END;
8.编写一个程序,在emp表中根据empno查询职员信息。
如果代码引发NO_DATA_FOUND异常,则显示一则消息.
DECLARE
V EMP%ROWTYPE;
BEGIN
SELECT * INTOV FROM EMP
WHERE EMPNO=7369;--'&EMPNO';
dbms_output.put_line('编号:' || V.empno || ' 姓名:' || V.ename ||
' 职位:' || V.job || ' 上级领导编号:' ||
V.mgr || ' 雇佣日期:' || V.hiredate ||
' 工资:' ||V.sal || ' 奖金:' ||
V.comm || ' 部门:' || V.deptno);
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('数据异常');
END;
9.编写一个程序,用以接受用户输入的DEPTCODE,并从employee表中检索该雇员的EMPNO。
如果代码引发TOO_MANY_ROWS异常,则显示消息“返回多行”.
DECLARE
V EMP.EMPNO%TYPE;
M VARCHAR2(20);
BEGIN
SELECT EMPNO INTO V FROM EMP
WHERE DEPTNO='&DEPTNO';
EXCEPTION
WHEN TOO_MANY_ROWS THEN
dbms_output.put_line('返回多行');
END;
注:以上答案是自己做得,结果正确,但是并不是按照正确答案写的。