Oracle SQL Developer字符串变量绑定
我正在行使Oracle SQL Developer 4.0.1.14并实行找出一些变量绑定.我从下面的查询开始: SELECT * FROM Ships WHERE UniqueId = 17; 和 SELECT * FROM Ships WHERE UniqueId = :variable; 这些都乐成执行.当您运行第二个时,Oracle SQL Developer会提醒您输入一个值,我输入了17.可是,当我实行行使字符串参数执行沟通操纵时,我不乐成(Query返回0行).譬喻: SELECT * FROM Ships WHERE ShipName = 'Atlantic Boat'; 和 SELECT * FROM Ships WHERE ShipName LIKE :variable; 只有第一个查询乐成.我试过进入弹出窗口 大西洋船 ‘大西洋船’ “大西洋船” 和其他变革没有乐成.我奈何才气做到这一点? 编辑:我实行行使相同的声明,并取得了一些乐成. SELECT * FROM Ships WHERE ShipName LIKE '%Atlantic Boat%'; 和 SELECT * FROM Ships WHERE ShipName LIKE :variable; 两者都有用.第二个必要%Atlantic Boat%,没有字符串引号(”).我如故无法让=一个事变,纵然%变革. 办理要领假如行使名称作为varchar2字段界说表,则它按预期事变:create table ships (uniqueid number,shipname varchar2(20)); insert into ships values (17,'Atlantic Boat'); SELECT * FROM Ships WHERE ShipName = 'Atlantic Boat'; UNIQUEID SHIPNAME ---------- ------------------------------ 17 Atlantic Boat var variable varchar2(20); anonymous block completed exec :variable := 'Atlantic Boat'; SELECT * FROM Ships WHERE ShipName LIKE :variable; UNIQUEID SHIPNAME ---------- ------------------------------ 17 Atlantic Boat 可是假如表有一个char列,那么它会表现你描写的举动: drop table ships; create table ships (uniqueid number,shipname char(20)); insert into ships values (17,'Atlantic Boat'); SELECT * FROM Ships WHERE ShipName = 'Atlantic Boat'; UNIQUEID SHIPNAME ---------- ------------------------------ 17 Atlantic Boat var variable varchar2(20); exec :variable := 'Atlantic Boat'; anonymous block completed SELECT * FROM Ships WHERE ShipName LIKE :variable; no rows selected 纵然bind变量也被声明为char(20),也会产生这种环境. char值以空缺添补存储到字段长度,因此在这种环境下,存储的值现实上是“Atlantic Boat”,最后有7个空格.凡是,当您举办WHERE ShipName =’Atlantic Boat’之类的较量时,字符串笔墨是您要较量的列范例的implicitly converted,而且在较量时代它们被视为相称.对付绑定变量好像没有产生这种环境,但我无法当即在文档中看到对该举动的任何引用. 当您行使LIKE’Atlantic Boat%’或转达Atlantic Boat%作为绑定变量时,特另外空间不再相干,由于完备的’Atlantic Boat’确实像Atlantic Boat%. 没有真正的来由行使char(有些像短符号或字段老是牢靠长度为char,但纵然这样也没什么区别).办理此题目的最佳要领是变动??表界说,使字段为varchar2. 假如你不能这样做,你可以在查询中逼迫转换绑定变量: SELECT * FROM Ships WHERE ShipName LIKE cast(:variable as char(20)); UNIQUEID SHIPNAME ---------- ------------------------------ 17 Atlantic Boat (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |