SQL PL / SQL привязка динамической переменной - PullRequest
0 голосов
/ 11 октября 2018

Я хотел бы выполнить запрос ниже:

SELECT 
    * 
FROM 
    TABLE1
WHERE 
    COL1 = :DynamicValue1
    AND  COL2 = :DynamicValue2
USING 
    USERENTEREDVALUE1, USERENTEREDVALUE2;

Я не хочу использовать EXECUTE IMMEDIATE.

Как использовать ключевое слово using в запросе выбора?Когда я запускаю это, я всплываю, чтобы ввести значение, но выдает ошибку Ora-00933

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Я не уверен, что вы делаете pl/sql, но если вы это делаете, вы можете просто добавить переменные к вашему запросу:

declare
    USERENTEREDVALUE1 VARCHAR2(100) := 'value1';
    USERENTEREDVALUE2 VARCHAR2(100) := 'value2';
    RESULTVALUE VARCHAR2(100);
begin

    SELECT COL3
      INTO RESULTVALUE
      FROM  (
                SELECT 'value1' COL1, 'value2' COL2, 'Ok' COL3 FROM dual UNION ALL
                SELECT 'value3' COL1, 'value4' COL2, 'NOK' COL3 FROM dual
            ) TABLE1
    WHERE COL1 = USERENTEREDVALUE1
      AND COL2 = USERENTEREDVALUE2;

    dbms_output.put_line('RESULTVALUE: ' || RESULTVALUE); 
end;
0 голосов
/ 11 октября 2018

Вы можете использовать переменные подстановки

DEFINE lname = 'Rogers'
DEFINE mgrid = 122

SELECT *
FROM employees
WHERE last_name = '&lname'
AND manager_id  = '&mgrid';

Когда вы запускаете это в SQL-разработчике или SQL * Plus, вы получаете

old:SELECT *
FROM employees
WHERE last_name = '&lname'
AND manager_id  = &mgrid
new:SELECT *
FROM employees
WHERE last_name = 'Rogers'
AND manager_id  = 122

EMPLOYEE_ID FIRST_NAME           LAST_NAME                 EMAIL                     PHONE_NUMBER         HIRE_DAT JOB_ID         SALARY COMMISSION_PCT MANAGER_ID DEPARTMENT_ID
----------- -------------------- ------------------------- ------------------------- -------------------- -------- ---------- ---------- -------------- ---------- -------------
        134 Michael              Rogers                    MROGERS                   650.127.1834         26-08-06 ST_CLERK         2900                       122            50

Или используете переменные связывания

VARIABLE   lname VARCHAR2(40) 
VARIABLE  mgrid NUMBER 
EXEC :lname := 'Rogers'
EXEC :mgrid := 122
VARIABLE x REFCURSOR


BEGIN
     OPEN :x FOR SELECT *
                 FROM employees
                 WHERE last_name =:lname 
                 AND manager_id =:mgrid;
END;
/

    PRINT x

Результат

PL/SQL procedure successfully completed.


PL/SQL procedure successfully completed.


PL/SQL procedure successfully completed.



EMPLOYEE_ID FIRST_NAME           LAST_NAME                 EMAIL                     PHONE_NUMBER         HIRE_DAT JOB_ID         SALARY COMMISSION_PCT MANAGER_ID DEPARTMENT_ID
----------- -------------------- ------------------------- ------------------------- -------------------- -------- ---------- ---------- -------------- ---------- -------------
        134 Michael              Rogers                    MROGERS                   650.127.1834         26-08-06 ST_CLERK         2900                       122            50
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...