PL/SQL 块内的 SQL 查询无法正常工作,获取所有数据并忽略 WHERE 子句

问题描述 投票:0回答:1

我从过去 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 条记录...

OUTPUT

现在我需要解决这个问题, ” 创建一个 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薪水的记录。

Inserting value in variable

Output

我不知道我做错了什么,我尝试直接执行查询...

`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

plsql oracle10g oracle-apex
1个回答
0
投票

请勿将变量命名为与列相同的名称。

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;
/
© www.soinside.com 2019 - 2024. All rights reserved.