今天我们来聊一下Oracle的$$符号,大家知道这个符号的作用吗?其实它主要用来进行占位符的替换,例如在动态SQL语句中使用。
下面我们来看一个简单的例子:
SELECT * FROM employees WHERE department_id=$$;
这里的$$表示一个占位符,当我们执行SQL语句时,它会被具体的参数值替换掉。
例如我们执行以下语句:
EXECUTE IMMEDIATE 'SELECT * FROM employees WHERE department_id=$$' USING 20;
这里的USING 20就是将$$替换为具体的值20,最终执行的SQL语句是:
SELECT * FROM employees WHERE department_id=20;
这种方式可以很大程度上避免SQL注入的问题,因为传入的参数都会被Oracle进行转义处理。
$$符号也可以用在PL/SQL中,例如:
DECLARE
v_dept_id NUMBER := $$;
BEGIN
-- 这里可以使用v_dept_id变量进行逻辑处理
END;
这里的$$也是一个占位符,当我们执行PL/SQL代码时,它会被具体的参数值替换掉。这种方式比较适合于需要动态执行的PL/SQL代码,可以避免硬编码的问题。
除了使用通用的$$占位符外,我们还可以自定义占位符符号,例如:
SELECT * FROM employees WHERE department_id=:dept_id;
这里的:dept_id就是一个自定义的占位符,可以在执行SQL时使用EXECUTE IMMEDIATE ... USING ...的方式替换掉。
综上所述,Oracle的$$符号是一个很实用的占位符,可以避免硬编码和SQL注入的问题,大家可以在实际开发中尝试使用。