为绑定变量pl / sql分配一个数字

时间:2013-02-25 00:42:07

标签: oracle plsql plsqldeveloper

我正在尝试为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;

提前谢谢大家!!!

3 个答案:

答案 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>