我从过去 2 个小时开始调试这个问题,但我无法找到解决方案,请帮帮我......
问题就在这里...
我已经创建了一个名为“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`
注:我正在使用 Oracle 10g
不要使用与列相同的名称来命名变量。
当您在比较的两边都使用
WHERE SAL = sal
then 时SAL
,比较结果取自本地 SQL 范围,而不是取自外部 PL/SQL 范围。您需要确保 PL/SQL 变量具有不同的名称,以便可以从外部范围读取它。小提琴