如果使用日期或数值连接到SQL或PL/SQL的文本中,并且不能使用绑定变量来传递它们,
则可以使用显式的格式化模型来把它们转换成文本,这是独立于运行的会话的NLS参数设置的。
可以确保转换后的值具有日期或数字的字面量的格式。
建议使用显式的独立于本地的格式化模型来构造SQL语句,不仅仅是出于安全的考虑,
也可以确保动态SQL语句可以在任何全局环境中正常运行。
|
--11g12_07_14.prc,针对11g12_07_11.prc的解决方法 CREATE OR REPLACE PROCEDURE get_recent_record ( user_name IN VARCHAR2, service_type IN VARCHAR2, rec OUT VARCHAR2) IS query VARCHAR2(4000); BEGIN
query := 'SELECT value FROM secret_records WHERE user_name=''' || user_name || ''' AND service_type=''' || service_type || ''' AND date_created> DATE ''' || TO_CHAR(SYSDATE - 30,'YYYY-MM-DD') || '''';
DBMS_OUTPUT.PUT_LINE('查询: ' || query); EXECUTE IMMEDIATE query INTO rec; DBMS_OUTPUT.PUT_LINE('结果: ' || rec); END;
-- 11g12_07_14.tst -- 运行之前先设置会话变量 -- ALTER SESSION SET NLS_DATE_FORMAT='"'' OR service_type=''Merger"'; DECLARE record_value VARCHAR2(4000); BEGIN get_recent_record('Anybody', 'Anything', record_value); END;
|
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17013648/viewspace-1082077/ ,如需转载,请注明出处,否则将追究法律责任。