1、使用参数化传参

先看一段sql

  select TABLE_COLUMN_NAME
from CSV_PARA_MAPPING
where TABLE_NAME = ':v_tabName'
and CSV_PARA_NAME = ':v_date'
union
select TABLE_COLUMN_NAME
from CSV_PARA_MAPPING
where TABLE_NAME = ':v_tabName'
and CSV_PARA_NAME = ':v_time'

这个写法是错误的,不应该使用单引号。字段TABLE_NAME、CSV_PARA_NAME均是VARCHAR2类型的,但是不要使用单引号。我的理解是传入的参数本身就是带有类型的,没有必要加上单引号以表明这是一个字符串。也就是传入参数的方式不是简单的字符串拼接,而是带有数据类型的。所以正确的写法如下

  select TABLE_COLUMN_NAME
from CSV_PARA_MAPPING
where TABLE_NAME = :v_tabName
and CSV_PARA_NAME = :v_date
union
select TABLE_COLUMN_NAME
from CSV_PARA_MAPPING
where TABLE_NAME = :v_tabName
and CSV_PARA_NAME = :v_time

再看一下代码

cmd.Parameters.Add(new OracleParameter("v_tabName", tableName));
cmd.Parameters.Add(new OracleParameter("v_date", dateParaName));
cmd.Parameters.Add(new OracleParameter("v_time", timeParaName));

报错:ORA-01008: not all variables bound,看起来像是没有给参数赋足够的值。有4个参数,但是有2个是重复使用的参数,所以实际上只有3个参数。这里有一个很坑的地方就是,并不会去辨析参数的名字,也就是说2个:v_tabName被认为是不同的参数,给参数赋值时是按照这样的规则,第n个赋的值给第n个参数,根本不看参数的名字。所以当然会报错了。如果想按照参数的名字来赋值的话,需要加上以下语句

cmd.BindByName = true;

最新文章

  1. my SQL下载安装,环境配置,以及密码忘记的解决,以及navicat for mysql下载,安装,测试连接
  2. [转]Java连接各种数据库的方法
  3. [Android Pro] 临时关闭selinux模式 setenforce 0
  4. 使用soureTree删除分支
  5. SSL、TLS协议格式、HTTPS通信过程、RDP SSL通信过程
  6. Dan计划:重新定义人生的10000个小时
  7. OpenJudge/Poj 2027 No Brainer
  8. MySQL注入与防御(排版清晰内容有条理)
  9. Linux查找和筛选工具
  10. bzoj 4918: 回文数对
  11. QT中的相对位置,绝对位置之间的转换(maptoglobal,mapfromglobal)
  12. vue动态绑定background:url绑不上的问题
  13. Windows 命令行
  14. SQLSERVER sa 用户密码修改的方法
  15. laravel框架基础(2)---laravel项目加载机制
  16. mysql行转列(多行转一列)
  17. 关于新加坡IT薪酬和找工作网站
  18. word 2013 自动保存太慢,下面读条起码3分钟
  19. layui——上传图片,并实现放大预览
  20. MDN搜索结果自动跳转中文地址

热门文章

  1. 在stm32中使用printf
  2. sqlserver 通过.mdf 和.ldf 恢复数据库
  3. Software_programming_EnterpriseArch_ServiceWithSingleTonFactory
  4. nginx转发tomcat之https不生效
  5. 【Java】BigDecimal
  6. springboot ElasticsearchRepository date_histogram 聚合查询
  7. zzul1073_Java
  8. SQL server自动创建日历表。
  9. 一、100ASK_IMX6ULL嵌入式裸板学习_LED实验(中)
  10. vue路由中 Navigating to current location ("/xxx") is not allowed