ORACLE:写Function时,传入参数变量名的注意事项
2013-02-04 14:51
351 查看
oracle中开发人员写自己的sql function时,入口参数名不要与select中table的字段名重复,否则虽然编译能正常通过,但运行的结果往往是错误的。
示例:
代码很简单,通过员工号EMPNO,得到员工姓名ENAME。
测试代码如下:
SELECT S_GET_EMP_NAME(7654) FROM DUAL;
返回结果:SMITH
但是这不是期望的值,EMP中的数据如下:
SELECT EMPNO,ENAME FROM EMP;
----------------------------------------------------
7369 SMITH
7499 ALLEN
7521 WARD
7566 JONES
7654 MARTIN
7698 BLAKE
7782 CLARK
7788 SCOTT
7839 KING
7844 TURNER
7876 ADAMS
7900 JAMES
7902 FORD
7934 MILLER
----------------------------------------------------
显然,7654对应不是SMITH,问题在哪呢?
WHERE E.EMPNO = EMPNO
这一行条件中,因为变量名EMPNO与表中的字段EMPNO重名了,sql在执行时,认为是 EMPNO这一列在跟自身比较,所以永远是TRUE,最终只有ROWNUM=1起了作用,仅返回了第一行。
解决办法:
把function中的入口参数改名,比如加个前缀 “IN_”,变成"IN_EMPNO"就行了
示例:
CREATE OR REPLACE FUNCTION S_GET_EMP_NAME(EMPNO nvarchar2) return nvarchar2 is ENAME nvarchar2(100); begin SELECT E.ENAME INTO ENAME FROM EMP E WHERE E.EMPNO = EMPNO AND ROWNUM = 1; RETURN ENAME; end;
代码很简单,通过员工号EMPNO,得到员工姓名ENAME。
测试代码如下:
SELECT S_GET_EMP_NAME(7654) FROM DUAL;
返回结果:SMITH
但是这不是期望的值,EMP中的数据如下:
SELECT EMPNO,ENAME FROM EMP;
----------------------------------------------------
7369 SMITH
7499 ALLEN
7521 WARD
7566 JONES
7654 MARTIN
7698 BLAKE
7782 CLARK
7788 SCOTT
7839 KING
7844 TURNER
7876 ADAMS
7900 JAMES
7902 FORD
7934 MILLER
----------------------------------------------------
显然,7654对应不是SMITH,问题在哪呢?
WHERE E.EMPNO = EMPNO
这一行条件中,因为变量名EMPNO与表中的字段EMPNO重名了,sql在执行时,认为是 EMPNO这一列在跟自身比较,所以永远是TRUE,最终只有ROWNUM=1起了作用,仅返回了第一行。
解决办法:
把function中的入口参数改名,比如加个前缀 “IN_”,变成"IN_EMPNO"就行了
相关文章推荐
- 5.1 Python 函数-默认参数,*args,**kwargs的使用;作用域-局部空间使用全局变量需要注意的事项等
- Oracle8的OCI函数中参数使用的注意事项
- ORACLE安装参数说明及注意事项!
- SQLPLUS中,多次调用需传入参数的SQL文件时,要注意变量赋值的问题
- ORACLE安装参数说明及注意事项!
- 迭代器作为函数参数传入时的注意事项
- datastage序列job参数传入内部嵌套的job注意事项
- 执行字符串SQL语句--带有参数的存储过程以及 int类型的字符串变量注意事项
- gx +java 日期型类型的变量在oracle中的注意事项
- Oracle EBS在编码方式为AL32UTF8时的注意事项
- jquery变量注意事项
- WebAPI接收JSON参数注意事项
- 用C++编写Oracle OCI的接口库的一个注意事项
- 程序从MYSQL迁移ORACLE注意事项之二
- oracle(sql优化)- 第二部分 常用sql用法和注意事项
- sql server table类型的变量使用注意事项
- JDBC执行Oracle传入参数为集合对象的存储过程
- Oracle翻译注意事项
- 参数innodb_data_file_path修改注意事项
- ORACLE库中 大数据量的表 中索引建立的注意事项