加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Oracle SQL Developer字符串变量绑定

发布时间:2021-01-19 21:56:21 所属栏目:站长百科 来源:网络整理
导读:我正在行使Oracle SQL Developer 4.0.1.14并实行找出一些变量绑定.我从下面的查询开始: SELECT *FROM ShipsWHERE UniqueId = 17; 和 SELECT *FROM ShipsWHERE UniqueId = :variable; 这些都乐成执行.当您运行第二个时,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

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读