我从过去 2 小时开始调试这个问题,但我无法找到解决方案,请帮助我......
问题来了...
我创建了 1 个名为“EMPP”的表
`CREATE TABLE EMPP(
EMPNO NUMBER PRIMARY KEY,
ENAME VARCHAR2(15),
JOB VARCHAR2(15),
SAL NUMBER(7,2)
)`
现在我已在其中插入 1 条记录...
INSERT INTO EMPP VALUES(1, 'A','B',2850);
如果我获取的所有记录比预期的多,我只会得到 1 条记录...
现在我需要解决这个问题, ” 创建一个 PL/SQL 块来打印给定的员工详细信息 员工工资。如果有多名员工的工资相似 在终止块之前打印适当的用户定义消息。 ”
这是我对这个问题的解决方案
`DECLARE
same_sal EXCEPTION;
sal EMPP.SAL%TYPE := :Enter_Salary;
no EMPP.EMPNO%TYPE;
ename EMPP.ENAME%TYPE;
job EMPP.JOB%TYPE;
total_row NUMBER;
BEGIN
SELECT COUNT(*) INTO total_row FROM EMPP WHERE SAL = sal;
dbms_output.put_line(sal);
IF (total_row > 1) THEN
raise same_sal;
ELSE
SELECT EMPNO, ENAME, JOB INTO no, ename, job FROM EMPP WHERE SAL = sal;
dbms_output.put_line('No : ' || no);
dbms_output.put_line('Emp Name : ' || ename);
dbms_output.put_line('Job : ' || job);
END IF;
EXCEPTION
WHEN same_sal THEN
dbms_output.put_line('There are more than 1 employee with same salary');
END;`
现在从这里开始主要问题,无论我在绑定变量“sal”中插入什么,它都会返回记录,就像我在sal变量中添加“100”仍然会返回2850薪水的记录。
我不知道我做错了什么,我尝试直接执行查询...
`SELECT COUNT(*) FROM EMPP WHERE SAL = 2850; -- returns 1
SELECT COUNT(*) FROM EMPP WHERE SAL = 100; -- returns 0
SELECT COUNT(*) FROM EMPP WHERE SAL = 1000; -- returns 0`
P.S:我正在使用 Oracle 10g
请勿将变量命名为与列相同的名称。
DECLARE
v_same_sal EXCEPTION;
v_sal EMPP.SAL%TYPE := :Enter_Salary;
v_no EMPP.EMPNO%TYPE;
v_ename EMPP.ENAME%TYPE;
v_job EMPP.JOB%TYPE;
v_total_row NUMBER;
BEGIN
SELECT COUNT(*)
INTO v_total_row
FROM EMPP
WHERE SAL = v_sal;
dbms_output.put_line(v_sal);
IF (v_total_row > 1) THEN
raise v_same_sal;
ELSE
SELECT EMPNO, ENAME, JOB
INTO v_no, v_ename, v_job
FROM EMPP
WHERE SAL = v_sal;
dbms_output.put_line('No : ' || v_no);
dbms_output.put_line('Emp Name : ' || v_ename);
dbms_output.put_line('Job : ' || v_job);
END IF;
EXCEPTION
WHEN v_same_sal THEN
dbms_output.put_line('There are more than 1 employee with same salary');
END;
/