PL/SQL函数的传入参数名称要规范,不能和函数内使用到的表的字段名称一样,否则会出错(带例子)
来源:互联网 发布:sql中select语句 编辑:程序博客网 时间:2024/06/05 17:36
CREATE OR REPLACE FUNCTION pf_limit_ldlc_test(companyid IN NUMBER ,doctype IN NUMBER) RETURN NUMBER IScnt NUMBER;BEGINcnt := 0;IF doctype = 1 THEN SELECT COUNT(l.companyid) INTO cnt FROM zx_limit_ldlc_company l WHERE l.companyid = companyid AND l.companytype = 1; IF cnt > 0 THEN RETURN 1; ELSE RETURN 0; END IF;END IF;RETURN 1;END;
函数pf_limit_ldlc_test用了两个传入参数,用于判断传入的单位ID(companyid)是否存在于表zx_limit_ldlc_company中,存在返回1,否则返回0。
但是问题出现了,即使传入的companyid的值(12345)不存在于表zx_limit_ldlc_company的companyid列中,函数都返回1。
SQL> SELECT pf_limit_ldlc_test(12345,1) FROM dual ; PF_LIMIT_LDLC_TEST(12345,1)--------------------------- 1经调试函数发现,无论传入的companyid的值怎么变化,变量cnt获取的值(记录数)都>0,且为17。
刚好等于SELECT COUNT(l.companyid) FROM zx_limit_ldlc_company l WHERE l.companytype = 1的记录数,
也就是select的限定条件l.companyid = companyid没有发挥作用。推测可能是传入参数companyid与表zx_limit_ldlc_company的字段companyid同名,导致PLSQL无法识别companyid是表的字段还是传入参数导致的。
表zx_limit_ldlc_company的结构:
SQL> desc zx_limit_ldlc_company;Name Type Nullable Default Comments ------------- ------------- -------- ------- ------------ COMPANYID NUMBER(10) COMPANYNAME VARCHAR2(100) Y COMPANYTYPE NUMBER(1) Y 1代表客户 2代表供应商 COMPANYOPCODE VARCHAR2(40) Y
下面修改了传入参数的名称函数就正确实现了。
CREATE OR REPLACE FUNCTION pf_limit_ldlc_test(l_companyid IN NUMBER ,doctype IN NUMBER) RETURN NUMBER IScnt NUMBER;BEGINCNT := 0;IF doctype = 1 THEN SELECT COUNT(l.companyid) INTO cnt FROM zx_limit_ldlc_company l WHERE l.companyid = l_companyid AND l.companytype = 1; IF cnt > 0 THEN RETURN 1; ELSE RETURN 0; END IF;END IF;RETURN 1;END;
测试新的函数:
SQL> SELECT pf_limit_ldlc_test(12345,1) FROM dual ; PF_LIMIT_LDLC_TEST(12345,1)--------------------------- 0输出正确了。
结论:函数的传入参数名称一定不能和函数中引用过的表的字段重名,否则会出错。
0 0
- PL/SQL函数的传入参数名称要规范,不能和函数内使用到的表的字段名称一样,否则会出错(带例子)
- Oracle的字段名不能和变量名一样,否则会无效
- JavaScript中的setTimeout和setInterval传入的函数不能带参数的解决方法
- swift函数的参数标签和参数名称
- 常见数据库查询表名称,字段名称的sql
- 根据字段名称找到数据库和表的sql
- 关于函数名称和库函数名称冲突的故事
- thinkphp3.2 join操作时,两个表中字段名称不能重名,否则只显示这个重名字段的一个值
- PL/SQL的函数定义和使用
- pl/sql--带参数游标的使用
- linker所使用的函数名称
- sql server2005过系统表查出数据表的字段名称字段类型和字段长度
- 使用汇编取得PE文件导入的DLL名称和函数名称
- MSTAR 常用函数的名称和定义!
- pl/sql中使用table()函数的例子
- 函数的传入和传出参数
- javascript获取函数名称、函数参数、对象属性名称的代码实例
- mysql存储过程的参数名不能和表字段名一样,否则不执行条件
- 玩转Intel Edison物联网开发套件
- 校内训练20161025
- Cookie/Session机制详解
- 基本算法题练习二
- [LeetCode] 396. Rotate Function
- PL/SQL函数的传入参数名称要规范,不能和函数内使用到的表的字段名称一样,否则会出错(带例子)
- Gradle使用Maven仓库
- mysql-for-visualstudio
- 自定义Volley的GsonRequest使用
- 小码哥杯java程序比赛复习(七)异常与断言(中)
- Laravel5.2 手动分页以及自定义样式
- linux基本操作
- ELK大规模日志实时处理系统应用简介
- 二叉树中序遍历的迭代实现