CREATE TABLE EMP AS
SELECT * FROM SCOTT.EMP;
CREATE TABLE DEPT AS
SELECT * FROM SCOTT.DEPT;
DECLARE
V_SHUIJIN NUMBER;
V_SAL SCOTT.EMP.SAL%TYPE;
C_QIZHENDIAN CONSTANT NUMBER :=3500;
BEGIN
SELECT SAL INTO V_SAL FROM SCOTT.EMP WHERE ENAME='KING';
IF (V_SAL-C_QIZHENDIAN)<=1500 THEN
V_SHUIJIN:=(V_SAL-C_QIZHENDIAN)*0.03-0;
ELSIF (V_SAL-C_QIZHENDIAN)>1500 AND (V_SAL-C_QIZHENDIAN)<=4500 THEN
V_SHUIJIN:=(V_SAL-C_QIZHENDIAN)*0.1-105;
ELSIF (V_SAL-C_QIZHENDIAN)>4500 AND (V_SAL-C_QIZHENDIAN)<=9000 THEN
V_SHUIJIN:=(V_SAL-C_QIZHENDIAN)*0.2-555;
ELSIF (V_SAL-C_QIZHENDIAN)>9000 AND (V_SAL-C_QIZHENDIAN)<=35000 THEN
V_SHUIJIN:=(V_SAL-C_QIZHENDIAN)*0.25-1005;
ELSIF (V_SAL-C_QIZHENDIAN)>35000 AND (V_SAL-C_QIZHENDIAN)<=55000 THEN
V_SHUIJIN:=(V_SAL-C_QIZHENDIAN)*0.3-2755;
ELSIF (V_SAL-C_QIZHENDIAN)>55000 AND (V_SAL-C_QIZHENDIAN)<=80000 THEN
V_SHUIJIN:=(V_SAL-C_QIZHENDIAN)*0.35-5505;
ELSIF (V_SAL-C_QIZHENDIAN)>80000 THEN
V_SHUIJIN:=(V_SAL-C_QIZHENDIAN)*0.45-13505;
END IF;
DBMS_OUTPUT.PUT_LINE('KING所交的税金是:'||V_SHUIJIN);
END;
DECLARE
V_SCOTT_HIREDATE EMP.HIREDATE%TYPE;
V_COMM NUMBER;
BEGIN
SELECT HIREDATE INTO V_SCOTT_HIREDATE FROM EMP WHERE ENAME='SCOTT';
IF (SYSDATE-V_SCOTT_HIREDATE)>=365*6 THEN
V_COMM:=2000;
ELSE
V_COMM:=1500;
END IF;
UPDATE EMP SET COMM=V_COMM WHERE ENAME='SCOTT';
IF SQL%ROWCOUNT>0 THEN
DBMS_OUTPUT.PUT_LINE('修改成功!');
ELSE
DBMS_OUTPUT.PUT_LINE('修改失败!');
END IF;
END;
DECLARE
V_SCOTT_SAL EMP.SAL%TYPE;
V_JIBIE NUMBER;
V_DEPTNAME DEPT.DNAME%TYPE;
BEGIN
SELECT SAL,DNAME INTO V_SCOTT_SAL,V_DEPTNAME FROM EMP E JOIN DEPT D
ON E.DEPTNO=D.DEPTNO
WHERE ENAME='SCOTT';
IF V_SCOTT_SAL>700 AND V_SCOTT_SAL<=3200 THEN
V_JIBIE:=1;
ELSIF V_SCOTT_SAL>3200 AND V_SCOTT_SAL<=4400 THEN
V_JIBIE:=2;
ELSIF V_SCOTT_SAL>4400 AND V_SCOTT_SAL<=5000 THEN
V_JIBIE:=3;
ELSIF V_SCOTT_SAL>5000 AND V_SCOTT_SAL<=7000 THEN
V_JIBIE:=4;
ELSIF V_SCOTT_SAL>7000 AND V_SCOTT_SAL<=10000 THEN
V_JIBIE:=5;
END IF;
DBMS_OUTPUT.PUT_LINE('SCOTT所在的部门是:'||V_DEPTNAME||',薪水是:'||V_SCOTT_SAL||',所在的级别是:第'||V_JIBIE||'级别');
END;
DECLARE
V_SCOTT_SAL EMP.SAL%TYPE;
BEGIN
SELECT SAL INTO V_SCOTT_SAL FROM EMP WHERE ENAME='SCOTT';
LOOP
V_SCOTT_SAL:=V_SCOTT_SAL+100;
EXIT WHEN V_SCOTT_SAL>=10000;
END LOOP;
UPDATE EMP SET SAL=V_SCOTT_SAL WHERE ENAME='SCOTT';
IF SQL%ROWCOUNT>0 THEN
DBMS_OUTPUT.PUT_LINE('增加成功!');
ELSE
DBMS_OUTPUT.PUT_LINE('增加失败!');
END IF;
END;
DECLARE
V_ENAME VARCHAR2(4);
BEGIN
SELECT ENAME INTO V_ENAME FROM EMP WHERE EMPNO=&EMPNO;
DBMS_OUTPUT.PUT_LINE('已找到'||V_ENAME);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('对不起,没有该职员!');
WHEN VALUE_ERROR THEN
DBMS_OUTPUT.PUT_LINE('职员名称太长!');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('出现其他的异常!');
END;
DECLARE
V_EMPNO EMP.EMPNO%TYPE;
V_DEPTNO EMP.DEPTNO%TYPE;
V_SAL EMP.SAL%TYPE;
V_ENAME EMP.ENAME%TYPE;
V_V_EMPNO EMP.EMPNO%TYPE;
V_V_DEPTNO EMP.DEPTNO%TYPE;
V_V_SAL EMP.SAL%TYPE;
E_ERROR_DEPTNO EXCEPTION;
E_ERROR_EMPNO EXCEPTION;
V_COUNT NUMBER;
BEGIN
V_EMPNO:=&V_V_EMPNO;
V_SAL:=&V_VSAL;
V_DEPTNO:=&V_V_DEPTNO;
IF V_DEPTNO=10 THEN
IF V_SAL<10000 THEN
SELECT COUNT(*) INTO V_COUNT FROM EMP WHERE EMPNO=V_DEPTNO;
IF V_COUNT!=1 THEN
RAISE E_ERROR_EMPNO;
ELSE
UPDATE EMP SET SAL=10000 WHERE EMPNO=V_EMPNO;
IF SQL%ROWCOUNT>0 THEN
DBMS_OUTPUT.PUT_LINE('更新成功!!!');
ELSE
DBMS_OUTPUT.PUT_LINE('更新失败!!!');
END IF;
END IF;
ELSIF V_SAL>10000 THEN
DBMS_OUTPUT.PUT_LINE('工资不低于10000!!');
END IF;
ELSE
RAISE E_ERROR_DEPTNO;
END IF;
EXCEPTION
WHEN E_ERROR_DEPTNO THEN
DBMS_OUTPUT.PUT_LINE('部门代码不是10!!');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('出现其他异常,请自行解决!!!');
END;
SELECT * FROM EMP;
DECLARE
V_NAME EMP.ENAME%TYPE;
E_ERROR EXCEPTION;
V_COUNT NUMBER;
BEGIN
SELECT COUNT(*) INTO V_COUNT FROM EMP WHERE EMPNO=7901;
IF (V_COUNT=1) THEN
DBMS_OUTPUT.PUT_LINE(V_NAME);
ELSE
RAISE E_ERROR;
END IF;
EXCEPTION
WHEN E_ERROR THEN
DBMS_OUTPUT.PUT_LINE('没有记录!');
END;
DECLARE
V_NAME VARCHAR2(10);
E_ERROR EXCEPTION;
BEGIN
IF V_NAME IS NULL THEN
RAISE E_ERROR;
ELSE
DBMS_OUTPUT.PUT_LINE(V_NAME);
END IF;
EXCEPTION
WHEN E_ERROR THEN
DBMS_OUTPUT.PUT_LINE('没有记录!');
END;
DECLARE
V_SHUIJIN NUMBER;
V_SAL SCOTT.EMP.SAL%TYPE;
V_SUM NUMBER(10):=0;
C_QIZHENDIAN CONSTANT NUMBER :=3500;
CURSOR CURSOR_SAL IS
SELECT SAL FROM EMP;
BEGIN
OPEN CURSOR_SAL;
LOOP
FETCH CURSOR_SAL INTO V_SAL;
EXIT WHEN CURSOR_SAL%NOTFOUND;
IF (V_SAL-C_QIZHENDIAN)<=1500 THEN
V_SHUIJIN:=(V_SAL-C_QIZHENDIAN)*0.03-0;
ELSIF (V_SAL-C_QIZHENDIAN)>1500 AND (V_SAL-C_QIZHENDIAN)<=4500 THEN
V_SHUIJIN:=(V_SAL-C_QIZHENDIAN)*0.1-105;
ELSIF (V_SAL-C_QIZHENDIAN)>4500 AND (V_SAL-C_QIZHENDIAN)<=9000 THEN
V_SHUIJIN:=(V_SAL-C_QIZHENDIAN)*0.2-555;
ELSIF (V_SAL-C_QIZHENDIAN)>9000 AND (V_SAL-C_QIZHENDIAN)<=35000 THEN
V_SHUIJIN:=(V_SAL-C_QIZHENDIAN)*0.25-1005;
ELSIF (V_SAL-C_QIZHENDIAN)>35000 AND (V_SAL-C_QIZHENDIAN)<=55000 THEN
V_SHUIJIN:=(V_SAL-C_QIZHENDIAN)*0.3-2755;
ELSIF (V_SAL-C_QIZHENDIAN)>55000 AND (V_SAL-C_QIZHENDIAN)<=80000 THEN
V_SHUIJIN:=(V_SAL-C_QIZHENDIAN)*0.35-5505;
ELSIF (V_SAL-C_QIZHENDIAN)>80000 THEN
V_SHUIJIN:=(V_SAL-C_QIZHENDIAN)*0.45-13505;
END IF;
V_SUM:=V_SUM+V_SHUIJIN;
END LOOP;
CLOSE CURSOR_SAL;
DBMS_OUTPUT.PUT_LINE(V_SUM);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('出现异常!');
END;
DECLARE
V_COMM EMP.COMM%TYPE;
CURSOR CURSOR_EMP_COMM IS
SELECT HIREDATE FROM EMP FOR UPDATE;
BEGIN
FOR CUR1 IN CURSOR_EMP_COMM LOOP
IF (SYSDATE-CUR1.HIREDATE)>=365*6 THEN
V_COMM:=2000;
ELSE
V_COMM:=1500;
END IF;
UPDATE EMP SET COMM=V_COMM WHERE CURRENT OF CURSOR_EMP_COMM;
IF SQL%ROWCOUNT>0 THEN
DBMS_OUTPUT.PUT_LINE('更新成功!!!');
ELSE
DBMS_OUTPUT.PUT_LINE('更新失败!!!');
END IF;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('出现异常!');
END;
DECLARE
C_DNAME CONSTANT VARCHAR2(20):='SALES';
V_JIBIE NUMBER;
CURSOR CURSOR_EMP IS
SELECT ENAME,DNAME,SAL FROM EMP E
JOIN DEPT D ON E.DEPTNO=D.DEPTNO
WHERE DNAME=C_DNAME;
BEGIN
FOR C1 IN CURSOR_EMP LOOP
IF C1.SAL>700 AND C1.SAL<=3200 THEN
V_JIBIE:=1;
ELSIF C1.SAL>3200 AND C1.SAL<=4400 THEN
V_JIBIE:=2;
ELSIF C1.SAL>4400 AND C1.SAL<=5000 THEN
V_JIBIE:=3;
ELSIF C1.SAL>5000 AND C1.SAL<=7000 THEN
V_JIBIE:=4;
ELSIF C1.SAL>7000 AND C1.SAL<=10000 THEN
V_JIBIE:=5;
ELSE
V_JIBIE:=0;
END IF;
DBMS_OUTPUT.put_line(C1.ENAME||'在'||C1.DNAME||'部门,'||'薪水是'||C1.SAL||'在第'||V_JIBIE||'级别');
END LOOP;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('出现异常!');
END;
CREATE OR REPLACE PROCEDURE DEL_EMPNAME
(
ENO EMP.EMPNO%TYPE,
ON_FLAG OUT NUMBER,
ON_MSG OUT VARCHAR
)
IS
E_ERROR EXCEPTION;
BEGIN
DELETE FROM EMP WHERE EMPNO=ENO;
IF SQL%NOTFOUND THEN
RAISE E_ERROR;
ELSE
ON_FLAG:=1;
ON_MSG:='删除成功!';
END IF;
EXCEPTION
WHEN E_ERROR THEN
ON_FLAG:=0;
ON_MSG:='删除失败!';
WHEN OTHERS THEN
ON_FLAG:=0;
ON_MSG:='出现异常!';
END;
DROP PROCEDURE DEL_EMPNAME;
DECLARE
V_EMPNO NUMBER;
ENO NUMBER(5);
ON_FLAG NUMBER(1);
ON_MSG VARCHAR(20);
BEGIN
ENO:=&EMPNO;
DEL_EMPNAME(ENO,ON_FLAG,ON_MSG);
DBMS_OUTPUT.PUT_LINE(ON_FLAG);
DBMS_OUTPUT.PUT_LINE(ON_MSG);
END;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架