【发布时间】:2014-02-18 00:50:45
【问题描述】:
我有以下包含错误代码和相关错误消息的表结构:
ERR_CODE ERR_MESSAGE
CN001 Invalid Username :USERNM
CN002 Invalid Password :PWD
在我的 PLSQL 代码中,我想动态替换用户名和密码的值。
我知道 EXECUTE IMMEDIATE 可以通过 USING 子句进行替换,但在这种情况下查询必须是静态的。
我正在寻找一种类似于 execute immediate 的风格,其中可以做到这一点:
SIMILAR_EXECUTE_IMMDIATE q'{select ERR_MESSAGE from ERROR_MESSAGES where ERR_CODE = 'CN001'}' INTO l_err_msg USING l_curr_user;
或者我可以将其分解为 2 个步骤:
select ERR_MESSAGE into err_msg_var from ERROR_MESSAGES where ERR_CODE='CN001';
EXECUTE_IMMDIATE err_msg_var INTO l_err_msg USING l_curr_user;
基本上,我正在尝试减少所涉及的步骤数量,或者获得性能更好的查询或方法。
提前致谢!
【问题讨论】:
-
不确定我是否希望任何系统在任何情况下都以明文形式报告用户密码。您的系统应处理密码,然后将其丢弃,而不会将其记录或在错误消息中公开。
标签: oracle plsql oracle11g substitution execute-immediate