首页 新闻 会员 周边

oracle隐式转换问题

0
悬赏园豆:200 [待解决问题]

Update M_QX_CZY Set LoginPass = @@LoginPass Where OperID = @@OperID

问题已经找到了,执行这句就报无效字符,因为loginpass是MD5加密后形成的字符串,所以oracle执行的时候隐式转换to_number所以报错,但是不知道怎么改,不知道有没有好方法

nickma的主页 nickma | 初学一级 | 园豆:2
提问于:2013-07-04 11:15
< >
分享
所有回答(4)
0

LoginPass 这个字段是number型的?

webaspx | 园豆:1973 (小虾三级) | 2013-07-04 11:20

NVARCHAR2(200)

支持(0) 反对(0) nickma | 园豆:2 (初学一级) | 2013-07-04 11:24

@nickma: 那怎么会存在隐式转换呢,而且oracle参数化SQL语句用的是“:”号。

支持(1) 反对(0) webaspx | 园豆:1973 (小虾三级) | 2013-07-04 11:28

@webaspx: 哎别人写的,这个是直接写在

Dictionary<string, IDbDataParameter> paras = new Dictionary<string, IDbDataParameter>
{
{"OperID",DBAccessPubFunc.GetDbParameter("OperID", DbType.Decimal)},
{"LoginPass",DBAccessPubFunc.GetDbParameter("LoginPass", DbType.String)}
};

然后用@@取那个传进来的参数

 

支持(0) 反对(0) nickma | 园豆:2 (初学一级) | 2013-07-04 14:46

@nickma: SQLServer才用的是@,改成“:”试试吧。

支持(0) 反对(0) webaspx | 园豆:1973 (小虾三级) | 2013-07-04 14:49

@webaspx: 试了一下,还是无效字符ora-01722

支持(0) 反对(0) nickma | 园豆:2 (初学一级) | 2013-07-04 14:55

@nickma: 你直接执行SQL语句会报错吗? Update M_QX_CZY Set LoginPass =‘’ Where OperID =1;

支持(0) 反对(0) webaspx | 园豆:1973 (小虾三级) | 2013-07-04 15:18

@webaspx: 这个直接update的时候set loginpass=‘@@loginpass’ 就没问题,就是引号,可是这样改之后数据库里的密码就变成@@loginpass,其实要是变相解决也行,就是吧数取出来拼接字符串,可是我想知道有没有能根本解决的,因为同事也有别的地方和这块一个毛病

支持(0) 反对(0) nickma | 园豆:2 (初学一级) | 2013-07-05 10:38

@nickma: 需要你把代码贴出来,才能找到根本问题。

支持(0) 反对(0) webaspx | 园豆:1973 (小虾三级) | 2013-07-05 12:03

@webaspx: 

public DBAccessSQLObject UpdatePass()
{
Dictionary<string, IDbDataParameter> paras = new Dictionary<string, IDbDataParameter>
{
{"OperID",DBAccessPubFunc.GetDbParameter("OperID", DbType.Decimal)},
{"LoginPass",DBAccessPubFunc.GetDbParameter("LoginPass", DbType.String)}
};
return new DBAccessSQLObject(HandlePlaceHolderChar(_UpdateLoginPassSQL), paras);
}

private static readonly string _UpdateLoginPassSQL =
"Update M_QX_CZY " +
" Set LoginPass = @@LoginPass " +
" Where OperID = @@OperID " + //操作员编号
"";

支持(0) 反对(0) nickma | 园豆:2 (初学一级) | 2013-07-05 13:06

@nickma: 改成如下试过了?

private static readonly string _UpdateLoginPassSQL =
"Update M_QX_CZY " +
" Set LoginPass = :LoginPass " +
" Where OperID = :OperID " + //操作员编号
;

OperID这个参数值确定是数值型吗?

支持(0) 反对(0) webaspx | 园豆:1973 (小虾三级) | 2013-07-05 13:25

@webaspx: 试过了,不行 number(8)

支持(0) 反对(0) nickma | 园豆:2 (初学一级) | 2013-07-05 13:34

@nickma: 那就不知道什么问题了。不好意思,没帮上忙。

支持(0) 反对(0) webaspx | 园豆:1973 (小虾三级) | 2013-07-05 13:46

@webaspx: 没事,问题都是讨论出来的嘛,我再找找看

支持(0) 反对(0) nickma | 园豆:2 (初学一级) | 2013-07-05 14:25
0

加密后的语句中是不是含有数字,你讲赋的值to_char试试

ice&sww | 园豆:223 (菜鸟二级) | 2013-07-04 11:40

加密后字母数字都有,还有符号

支持(0) 反对(0) nickma | 园豆:2 (初学一级) | 2013-07-04 13:36

你试试Update M_QX_CZY Set LoginPass = to_char('加密后数据') Where OperID = OperID

支持(0) 反对(0) ice&sww | 园豆:223 (菜鸟二级) | 2013-07-04 14:17

@ice&ww: 这个也试了,不过我写的是to_char(@@loginpass)不行,你的意思是先取出来?

支持(0) 反对(0) nickma | 园豆:2 (初学一级) | 2013-07-04 14:58

@nickma: 你是在程序中写的还是在数据库中写的呢?

支持(0) 反对(0) ice&sww | 园豆:223 (菜鸟二级) | 2013-07-04 15:02

@ice&ww: 程序啊

支持(0) 反对(0) nickma | 园豆:2 (初学一级) | 2013-07-04 15:18
0

oracle执行的时候隐式转换to_number,这句话有问题把,应该是@@LoginPass传递的类型转换为NVARCHAR2(200)。

而且loginPass应该设置成varchar2(200)

smart-liu | 园豆:194 (初学一级) | 2013-07-04 11:40

晕,和varchar2没关系,你先上网看看隐式查询这个问题再说吧

支持(0) 反对(0) nickma | 园豆:2 (初学一级) | 2013-07-04 13:40
0

Update M_QX_CZY Set LoginPass = @@LoginPass Where OperID = @@OperID

 

这行代码里面@@是你们自己的代码用这个符号获取变量值的吗?

还有,能不能给一个完整的样例,就是把你的@@LoginPass和@@OperID替换成真实的数据,同时把M_QX_CZY的建表语句贴出来?当然你可以改下某些关键字段的名字。

bitbug | 园豆:470 (菜鸟二级) | 2013-12-18 09:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册