나는 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
그리고 코드를
미리 감사드립니다.
나는 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
그리고 코드를
미리 감사드립니다.
"ORA-01403 : 데이터 없음"은 SELECT가 행을 반환하지 않았 음을 의미합니다. EMPLOYEE_ID 110이 테이블에 존재하지 않을 가능성이 큽니다. 시도해보십시오.
SELECT COUNT(*) FROM Employees WHERE Employee_ID = 110;
아마도 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를 시도하십시오.
이 부분은 recent answer에서 발견 된 SQL Developer의 문제인 것 같습니다. 가지고있는 코드는 SQL * Plus에서 작동합니다. 이 역시 문제를 보여줍니다 : SQL에서
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
* 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 개발자 버그라고 가정합니다. 다만 정의되지 않은 동작 일 수 있습니다.
exec
블록을 사용하는 유일한 방법은 그 블록 내에 설정된 바인드 값이 실제 블록을 공격 할 때 범위에 있기 때문입니다 (최대 권장 값). 또는 대신 대체 변수를 사용하십시오. 또는 외부에서 선언 된 variable
이 아닌 지역 변수 (declare
블록)를 사용하는 것이 가장 중요합니다. 이유는 왜 이렇게하고, 처음부터 명시 적 바인드 변수를 사용하는지에 달려 있습니다.
Employee_ID = 110은 존재하지 않습니다 : b_emp_id : 110을 제거하고 select 문에 employee_id = 110; 그것은 잘 작동 –
참으로 이상한. 내가 아는 한, ORA-01403은 항상 PL/SQL SELECT ... INTO가 행을 찾지 못했음을 의미합니다. 몇 가지 질문 : (1) Employees.Employee_ID의 데이터 유형은 무엇입니까? (2) SQL * Plus에서 위 코드를 실행하면 어떻게됩니까? –