2013-02-25 19 views
0

我嘗試了一些值賦給一個PL/SQL分配的綁定變量,它給我的錯誤:Assinging一個號碼綁定變量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

「ORA-01403:找不到數據」意味着你的SELECT沒有返回任何行。表中最有可能的EMPLOYEE_ID 110不存在。試試這個:

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

它可能會返回零。

+0

Employee_ID = 110確實存在因爲如果我擺脫:b_emp_id:110並在select語句放在哪裏employee_id = 110;它工作正常 – 2013-02-25 01:21:11

+0

確實很奇怪。據我所知,ORA-01403總是意味着PL/SQL SELECT ... INTO沒有找到任何行。幾個問題:(1)Employees.Employee_ID的數據類型是什麼? (2)當你在SQL * Plus中運行你的代碼時會發生什麼? – 2013-02-25 02:36:45

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中試試上面的代碼。

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 - 取決於你爲什麼這樣做,並且首先使用顯式綁定變量。