我有一個帶有 v_emp_id 和 v_in_term 變數的游標。我需要根據該人是否在特定查詢中為每條記錄分配是或否值。我無法將employees 表加入我的游標查詢。它的一般邏輯是這樣的:
if v_emp_id in (select emp_id from employees)
then v_in_term := 'Yes';
else v_in_term := 'No';
end if;
它說我不能在這里使用查詢。我怎么能改變這個?
[錯誤] 編譯 (906: 42): PLS-00405: 在此背景關系中不允許子查詢
uj5u.com熱心網友回復:
不能在 PL/SQL陳述句中IN與子查詢(或)一起使用。相反,您可以使用和您的查詢:EXISTSIFSELECT ... INTO
DECLARE
v_emp_id EMPLOYEES.EMP_ID%TYPE := 1;
v_in_term VARCHAR2(3);
BEGIN
SELECT CASE
WHEN v_emp_id in (select emp_id from employees)
THEN 'Yes'
ELSE 'No'
END
INTO v_in_term
FROM DUAL;
DBMS_OUTPUT.PUT_LINE(v_in_term);
END;
/
或EXISTS:
DECLARE
v_emp_id EMPLOYEES.EMP_ID%TYPE := 1;
v_in_term VARCHAR2(3);
BEGIN
SELECT CASE
WHEN EXISTS(SELECT 1 FROM employees WHERE emp_id = v_emp_id)
THEN 'Yes'
ELSE 'No'
END
INTO v_in_term
FROM DUAL;
DBMS_OUTPUT.PUT_LINE(v_in_term);
END;
/
db<>在這里擺弄
uj5u.com熱心網友回復:
更緊湊的方法是使用 count(*)
declare
v_emp_id EMP.EMP_ID%TYPE := 2;
v_in_term VARCHAR2(3);
begin
select decode(count(*),0,'no','yes') into v_in_term from emp
where emp_id = v_emp_id;
dbms_output.put_line(v_in_term);
end;
/
count(*)如果在表中未找到記錄,則回傳零,該表映射no到decode. 所有其他結果都映射到yes,因此即使在您不檢查主鍵的情況下也可以使用..
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/414326.html
標籤:
