[英]SQL PL/SQL dynamic variable binding
I would like to run below query: 我想在查询下面运行:
SELECT
*
FROM
TABLE1
WHERE
COL1 = :DynamicValue1
AND COL2 = :DynamicValue2
USING
USERENTEREDVALUE1, USERENTEREDVALUE2;
I don't want to use EXECUTE IMMEDIATE
. 我不想使用EXECUTE IMMEDIATE
。
How can I use using
keyword in select query? 如何在选择查询中使用using
关键字? When I run this I get pop up to enter value but it gives error Ora-00933 当我运行此命令时,我会弹出输入值,但它给出错误Ora-00933
You may use substitution variables 您可以使用替代变量
DEFINE lname = 'Rogers'
DEFINE mgrid = 122
SELECT *
FROM employees
WHERE last_name = '&lname'
AND manager_id = '&mgrid';
When you run this in SQL developer or SQL* Plus, you get 在SQL Developer或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
Or use Bind variables 或使用绑定变量
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
Result 结果
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
I'm not sure if you're doing pl/sql
, but if you do, you can simply add variables to you query: 我不确定您是否正在执行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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.