首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过ODBC 5.2将MySQL插入到第(1)位列

问通过ODBC 5.2将MySQL插入到第(1)位列
EN

Stack Overflow用户
提问于 2013-05-28 01:11:41
回答 1查看 492关注 0票数 2

我找过了,但似乎找不到我要找的东西。我正在Oracle中运行PL/SQL脚本,并尝试使用MySQL ODBC 5.2Unicode驱动程序通过数据库链接将记录插入到MySQL中的表中。

这个链接工作得很好,我可以使用它在Oracle中执行复杂的查询,并在那里对记录进行各种插入和更新。

失败的地方是尝试将一条记录插入到具有bit(1)类型的列的MySQL表中。

它基本上是一个游标for循环,insert语句类似于:

代码语言:javascript
复制
INSERT INTO "app_user"@mobileapi (USERNAME, VERSION, ACCOUNT_EXPIRED, ACCOUNT_LOCKED, PASSWD, PASSWORD_EXPIRED)
VALUES  (CU_rec.USERNAME, CU_rec.VERSION, CU_rec.ACCOUNT_EXPIRED, CU_rec.ACCOUNT_LOCKED, CU_rec.PASSWD, CU_rec.PASSWORD_EXPIRED)

一些目标列,如ACCOUNT_EXPIRED、ACCOUNT_LOCKED等,是MySQL中的bit(1)列。假设我可以将游标CU_rec中的数据类型转换为几乎任何我想在Oracle中使用的类型,那么如何将它们插入到目标中呢?我试过了我能想到的所有方法,我就是一直在想:

错误报告:

代码语言:javascript
复制
ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
[MySQL][ODBC 5.2(w) Driver][mysqld-5.6.10]Data too long for column 'ACCOUNT_EXPIRED' at row 1 {HY000,NativeErr = 1406}
ORA-02063: preceding 2 lines from MOBILEAPI
ORA-06512: at line 44
28500. 00000 -  "connection from ORACLE to a non-Oracle system returned this message:"
*Cause:    The cause is explained in the forwarded message.
*Action:   See the non-Oracle system's documentation of the forwarded
           message.

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2013-05-28 07:03:03

哈哈!我找到了一个解决方案。把它丢在这里以防它能帮到别人。它不是很漂亮,但它是有效的。

我使用了古老的立即执行技巧。

基本上,我创建了一个变量sql_stmt varchar2(4000),并编写了如下代码:

代码语言:javascript
复制
sql_stmt := 'insert into "app_user"@mobileapi (USERNAME, VERSION, ACCOUNT_EXPIRED, ACCOUNT_LOCKED, CIPHER_PASSPHRASE, ENABLED, PASSWD, PASSWORD_EXPIRED) 
values ('''||CU_rec.USERNAME||'','||CU_rec.VERSION||', '||CU_rec.ACCOUNT_EXPIRED||', '||CU_rec.ACCOUNT_LOCKED||', '''||CU_rec.CIPHER_PASSPHRASE||''', '|| 
           CU_rec.ENABLED||', '''||CU_rec.PASSWD||''', '||CU_rec.PASSWORD_EXPIRED||')';
EXECUTE IMMEDIATE sql_stmt;

像这样的东西(引号可能不对齐,因为我从实际代码中删减了一点)。查看sql_stmt的内容,我得到了:

代码语言:javascript
复制
insert into "app_user"@mobileapi (USERNAME, VERSION, ACCOUNT_EXPIRED, ACCOUNT_LOCKED, CIPHER_PASSPHRASE, ENABLED, PASSWD,PASSWORD_EXPIRED) 
values ('user@email.com', 0, 0, 0, 'asdfastrwaebawavgansdhnsgjsjsh', 1, 'awercbcakwjerhcawuerawieubkahbewvkruh', 0)

EXECUTE IMMEDIATE完成,检查目标表,值就在那里。

这可能是一个糟糕的解决方案,但总比什么都没有好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16777708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档