我正在尝试为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;
提前谢谢大家!!!
答案 0 :(得分:0)
“ORA-01403:未找到数据”表示SELECT没有返回任何行。表中不存在EMPLOYEE_ID 110。试试这个:
SELECT COUNT(*) FROM Employees WHERE Employee_ID = 110;
它可能会返回零。
答案 1 :(得分: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中尝试以上内容。
答案 2 :(得分:0)
这似乎是SQL Developer的一个问题,我注意到recent answer。您拥有的代码将在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
- 取决于你为什么这样做并且首先使用显式绑定变量。< / p>