Oracle函数为何传不进参数真相

发表于:2012-11-12 10:09

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  在我的Oracle数据库中有这样两张表,一张叫做emp(员工表),另一张叫做dept(部门表),表结构如下:

  Emp表如下:

  dept表如下:

  在emp表中有员工编号(empno)、员工姓名(ename)、员工工作(job)、员工薪水(salary)、

  员工奖金(bonus)、入职日期(hiredate)、员工领导(mgr)、部门编号(deptno)。

  在dept表中有部门编号(deptno)、部门名称(dname)、部门所在地(location)。

  写了这样一个函数,目的是为了传入部门名称(dname),返回该部门员工的平均薪水,需求虽很简单,但是写好后结果却非预期所想,返回值为null.函数及执行结果如下图:

  原因分析:

  1、没有developer这个部门吗?查询dept表结果如下,证明并非没有这个部门,如下图:

  2、由上图可知developer部门编号为10,那么是不是没有员工属于部门编号为10的developer部门呢?查询emp表结果如下,证明有4位员工属于developer部门并且他们的薪水分别为10000、8000、9000、5000,如下图:

  3、是不是函数中关键的SQL语句的错了呢?我将SQL语句单独执行,结果证明不仅SQL语句正确而且结果和实际一致为(10000+8000+9000+5000)/4=8000,如下图:

  经过查阅书籍,我发现书中的函数如果有传入参数,有这样一种写法,对该例而言可以改成v_dname dept.dname%type,意思是传入的参数名为v_dname,参数类型为dept表中dname字段的类型,而这次结果查出的也是8000,为正解。这回终于恍然大悟,之前之所以传入的参数没有获取到原因是参数的类型与dept表中dname不一致。由于自己凭借感觉认为部门名称属于字符串就将传入的参数定义为v_dname in varchar2,而自己建的表中dname字段的类型为char(20),类型不一致导致查出的结果为null.将传入参数类型改为 dept.dname%type便能得到正确结果。结果如下图:

  VISTA事前调整:

  换装Vista系统后无法查看到linux服务器上Samba共享的文件目录,这是因为Samba Server 只支持NTLM 认证,而Vista却强制使用NTLMv2认证,这时我们就需要通过一些设置来解决这一问题。

  解决方法如下:

  首先,单击[开始]---[运行] 输入 "secpol.msc"打开管理工具,展开"本地策略(Local Policies)".

  然后,单击"安全选项(Security Options)". 双击"网络安全:LAN Manager 身份验证级别(Network Security: LAN Manager authentication level)"

  最后,单击列表中:发送LM和NTLMv2,如果已协商,则使用NTLMv2协议(LM and NTLM – use NTLMV2 session security if negotiated) .

  通过以上设置,在对方不支持NTLMv2认证的时候,系统会自动采用NTLM认证方式进行验证。如果Vista系统不能同其它服务正常连接的时,也不妨试试这个方法。

  linux端要确认的事情:

  1、你共享的文件夹的samba用户要有相应的读取权限!

  2、确认你在samba服务里面指定了该用户发访问权限!

  3、确认你在samba服务里面勾选了"显示"!

  今天发现因为以前做过很多错误的配置,造成smbusers文件里面的用户映射混乱,然后删除所有不需要的用户映射,以前无法访问的共享文件夹现在也可以访问了,遇到相同问题的各位可以参考一下!

  文件位于/ETC/SAMBA

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号