学习资料

学习的笔记


10替代变量

<h1>替代变量</h1> <h2>替代变量的基本概念</h2> <p><strong>替代变量:</strong>某些数据由用户输入,前面用&amp;标记。 示例:</p> <pre><code>select ename,job,sal,hiredate from emp where sal&gt;&amp;inputsal; select empno,ename,job,hiredate,sal from emp where ename=&amp;inputname;</code></pre> <p><strong>问题:</strong>用户输入是不会考虑单引号与大小写问题的,优化:</p> <pre><code>select empno,ename,job,hiredate,sal from emp where ename=upper('&amp;inputname'); select empno,ename,job,hiredate,sal from emp where ename like upper('%&amp;inputname%'); select empno,ename,job,hiredate,sal from emp where hiredate &lt;to_date('&amp;inputhiredate','yyyy-mm-dd'); select empno,ename,job,hiredate,sal from emp where hiredate &lt;'&amp;inputhiredate'; select ename,job,hiredate,sal from emp where job=upper('&amp;inputjob') and sal&gt;&amp;inputsal;--输入两个值</code></pre> <h2>替代变量的详细说明</h2> <ul> <li>输入两个值</li> <li>在select、from、order by、group by 中使用替代变量</li> </ul> <pre><code>select &amp;inputColumnName from emp where deptno=&amp;inputDeptno ; select * from &amp;inputTabel ; select * from emp where deptno=20 order by &amp;inputOrderByColumn &amp;inputtype ; select &amp;inputGroupByColumn,sum(sal),avg(sal) from emp group by &amp;inputGroupByColumn ;--在SQLPlus中是要输入两次的,使用下一个方法就可以只输入一次 select &amp;&amp;inputGroupByColumn,sum(sal),avg(sal) from emp group by &amp;inputGroupByColumn ;--这样就只输入一次,但是上一次输入会保存,要清除</code></pre> <ul> <li>清除前面存储的替代变量的值有两种方法 关闭SQLPlus窗口 调用UNDEFINE命令,`UNDEFINE inputGroupByColumn</li> </ul> <h2>定义替代变量</h2> <ul> <li>利用<code>DEFINE 替代变量名=替代变量值</code>定义一个变量</li> <li>变量一经定义,一直保存到SESSION结束或者遇到UNDEFINE清除变量。</li> </ul> <pre><code>define inputdname='FORD' --定义替代变量 select * from emp where ename='&amp;inputdname';--直接使用定义的替代变量,无须再手动输入 define inputdname --查询定义的替代变量值 undefine inputdname --清除定义的替代变量值</code></pre> <h2>ACCEPT命令</h2> <ul> <li>用于指定输入变量值的提示语</li> <li>accept的语句比较复杂,p237</li> <li>相关内容要在文件中才能实现</li> <li>使用accept命令定义替代变量不区分大小写</li> </ul> <p><strong>创建文件:</strong> 创建文件<code>vi /tmp/testaccept/mldn.sql</code>,内容如下</p> <pre><code>accept inputename prompt '请输入要查询信息的雇员姓名:' select * from emp where ename=upper('&amp;inputenamd');</code></pre> <p><strong>执行文件:</strong></p> <pre><code>SQL&gt; @/tmp/testaccept/mldn.sql --输出内容如下,疑问是中文提示后要回车再输入内容 请输入要查询信息的雇员姓名: Enter value for inputenamd: ford old 1: select * from emp where ename=upper('&amp;inputenamd') new 1: select * from emp where ename=upper('ford') --后输入查询的记录</code></pre> <ul> <li>跟上面方法一样的执行,即可看到效果,这是明文显示,下面看隐藏显示</li> </ul> <pre><code>accept inputGroupByColumn prompt '请输入分组的字段:' select &amp;&amp;inputGroupByColumn,sum(sal),avg(sal) from emp group by &amp;inputGroupByCol umn ;</code></pre> <ul> <li>只是输入的时候看不到输入的值</li> </ul> <pre><code>accept inputGroupByColumn prompt '请输入分组的字段:' hide select &amp;&amp;inputGroupByColumn,sum(sal),avg(sal) from emp group by &amp;inputGroupByCol umn ;</code></pre> <ul> <li>限定输入的值,指定最多只能输入10个字符</li> </ul> <pre><code>accept inputGroupByColumn prompt '请输入分组的字段:' format A10 select &amp;&amp;inputGroupByColumn,sum(sal),avg(sal) from emp group by &amp;inputGroupByCol umn ;</code></pre> <ul> <li>输入字符不符合,重新输入</li> </ul> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/4748729e62892ab289b614d656ed6596?showdoc=.jpg" alt="" /></p> <ul> <li>指定输入的格式</li> </ul> <pre><code>accept inputDate date format 'yyyy-mm-dd' prompt '请输入符合格式的日期:' select ename,job,hiredate,sal from emp where hiredate&gt;to_date('&amp;inputDate','yyyy -mm-dd');</code></pre> <ul> <li>示例:</li> </ul> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/47d6b02f421548bb4be5334f91699cc8?showdoc=.jpg" alt="" /></p> <h2>小结</h2> <ul> <li>执行查询或者更新操作,想要让用户输入值,可以使用替代变量,用<code>&amp;</code>标记.</li> <li>使用<code>DEFINE</code>自定义替代变量的值,用<code>UNDEFINE</code>可以清除自定义的变量。</li> <li>使用<code>ACCEPT</code>可以定义输入变量的提示信息。但是要使用执行脚本去实现。</li> </ul>

页面列表

ITEM_HTML