我有3個輸入參數,基於每個輸入參數的值,我必須動態地在過程中準備SQL。我正在做下面的方式,但它是失敗的,如果參數值爲空,那麼我必須從where子句中排除。在oracle存儲過程中動態地準備sql
IN參數:
EMPID在VARCHAR2 || empname IN varchar2 || empsal IN VARCHAR2
SELECT
EMP_NAME
INTO
V_EMP_NAME
FROM
EMPLOYEE
WHERE
(EMP_ID = EMPID
OR (EMP_ID IS NULL
AND EMPID IS NULL))
AND (EMP_NAME = EMPNAME
OR (EMP_NAME IS NULL
AND EMPNAME IS NULL))
AND (EMP_SAL = EMPSAL
OR (EMP_SAL IS NULL
AND EMPSAL IS NULL));
後更新我修改查詢類似下面,它被編譯,但給人運行時錯誤說ORA-00933:SQL命令不能正確地結束上只執行立即之前
V_SQL :='SELECT EMP_NAME INTO V_empname FROM employee WHERE ';
BEGIN
IF(EMPID IS NOT NULL) THEN
V_SQL := V_SQL || ' emp_id='||EMPID;
END IF;
IF(EMPNAME IS NOT NULL) THEN
V_SQL := V_SQL || ' AND emp_name='||EMPNAME;
END IF;
IF(V_empsalIS NOT NULL) THEN
V_SQL := V_SQL || ' AND emp_sal='||empsal;
V_SQL := V_SQL ||' AND ACTIVE =''Y''' ;
END IF;
EXECUTE IMMEDIATE V_SQL;
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_check:= '' ;
END;
只是一個信息,這是一個小問題。你需要在每個whaere子句輸入參數之間添加單引號 – rajputhch