0

我正在尝试为 pl/sql 分配的绑定变量分配一个数字值,它给了我错误:

Error report:  
ORA-01403: no data found
ORA-06512: at line 15
01403. 00000 -  "no data found"
Cause: 
Action:
b_emp_id
------
b_emp_id

和代码

VARIABLE b_emp_id NUMBER

DECLARE

v_emp_id employees.employee_id%TYPE;
v_FIRST_NAME employees.first_name%TYPE;
v_LAST_NAME employees.last_name%TYPE;
v_JOB_ID employees.job_id%TYPE;
v_HIRE_DATE employees.hire_date%TYPE;
v_message VARCHAR2(30);
v_difference NUMBER(3);

BEGIN

:b_emp_id:=110;

 SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, job_id, HIRE_DATE 
 INTO v_emp_id, v_FIRST_NAME, v_LAST_NAME, v_JOB_ID, v_HIRE_DATE
 FROM employees
 WHERE EMPLOYEE_ID = :b_emp_id;

谢谢大家!!!

4

3 回答 3

0

“ORA-01403: no data found”意味着您的 SELECT 没有返回任何行。表中很可能不存在 EMPLOYEE_ID 110。尝试这个:

SELECT COUNT(*) FROM Employees WHERE Employee_ID = 110;

它可能会返回零。

于 2013-02-25T00:51:29.863 回答
0

您的绑定变量可能未正确分配值。试试下面的代码: -

VARIABLE b_emp_id NUMBER;
EXEC :b_emp_id := 110;

DECLARE

v_emp_id employees.employee_id%TYPE;
v_FIRST_NAME employees.first_name%TYPE;
v_LAST_NAME employees.last_name%TYPE;
v_JOB_ID employees.job_id%TYPE;
v_HIRE_DATE employees.hire_date%TYPE;
v_message VARCHAR2(30);
v_difference NUMBER(3);

BEGIN

 SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, job_id, HIRE_DATE 
 INTO v_emp_id, v_FIRST_NAME, v_LAST_NAME, v_JOB_ID, v_HIRE_DATE
 FROM employees
 WHERE EMPLOYEE_ID = :b_emp_id;
END;
/

print b_emp_id

在 sqlplus 中尝试上述方法。

于 2013-02-25T04:54:02.323 回答
0

这似乎是 SQL Developer 的一个问题,我在最近的回答中注意到了这一点。您拥有的代码将在 SQL*Plus 中运行。这也说明了问题:

variable b_emp_id number
set serveroutput on
begin
    :b_emp_id := 110;
    if :b_emp_id is null then
        dbms_output.put_line('b_emp_id is null');
    else
        dbms_output.put_line('b_emp_id is not null: ' || :b_emp_id);
    end if;
end;
/
print b_emp_id;

anonymous block completed
b_emp_id is null

B_EMP_ID
---
110

在 SQL*Plus 中给出:

b_emp_id is not null: 110

PL/SQL procedure successfully completed.

B_EMP_ID
---
110

……正如你所料。这个select 110 into :b_emp_id from dual技巧在这里也不起作用。无论哪种方式,分配给绑定变量的值在块内均不可用,但在外部可见,这很奇怪。我认为这是一个 SQL Developer 错误,尽管我猜它可能只是未定义的行为。

似乎您唯一的选择是使用单独的exec块,因为当您击中实际块时,其中设置的绑定值在范围内(如 Max 建议的那样);或改用替换变量;或使用局部变量(在declare块中)而不是外部声明的variable- 取决于您为什么要这样做并首先使用显式绑定变量。

于 2013-02-25T10:19:50.980 回答