我有一个甲骨文表,我试图从csv插入大量数据(大部分是长字符串)。
我发现我的字符串需要使用CLOB数据类型,因为它们通常超过4000个字符。我还发现我需要使用“setinputsizes()”函数,否则我会遇到“ValueError:字符串数据太大”。
但不知何故,使用“setinputsizes()”打破了我的insert查询,我得到了“ORA-01036:非法变量名/编号”?
示例:
create_query = "CREATE TABLE sequences (myid varchar(10), allele varchar(50), seq clob)"
cursor.execute (create_query)
cursor.setinputsizes(seq = cx_Oracle.CLOB)
insert_query = "INSERT INTO sequences (myid, allele, seq) VALUES ('00001;', 'HLA-A*01:01:01:01', 'CGCTGACCTGTG')" # seq truncated; in truth it's much longer hence the CLOB type
cursor.execute(insert_query)
没有“setinputsizes()”行,上面的查询执行得很好-但是当我使用seq的实际值时,超过4000个字符,它会失败
DatabaseError: ORA-01704: string literal too long
但是使用“setinputsizes()”行,我得到
DatabaseError: ORA-01036: illegal variable name/number
(注意:我知道对大容量插入来说,执行程序更好。但是我在那里得到了同样的错误,所以我想先解决这个问题。)
有谁能告诉我我哪里出了问题以及如何解决?非常感谢。
数据库错误: ORA-01036:非法变量名称/数字
的原因是在错误的调用setinputsize()
。
正确的线应该是
cursor.setinputsizes(None, None, cx_Oracle.CLOB)
因为setinputsizes()
需要一次为所有绑定变量设置(按正确的顺序!),而不是单独设置。
这需要与要输入的值的位置绑定相结合,否则会出现数据库错误:ORA-01036:非法变量名称/编号
。
工作代码如下所示:
create_query = "CREATE TABLE sequences (myid varchar(10), allele varchar(50), seq clob)"
cursor.execute (create_query)
cursor.setinputsizes(None, None, cx_Oracle.CLOB)
insert_query = "INSERT INTO sequences (myid, allele, seq) VALUES (:1, :2, :3)" # seq truncated; in truth it's much longer hence the CLOB type
cursor.execute(insert_query, ['HLA00001;', 'HLA-A*01:01:01:01', seq])
conn.commit()
ORA-01704:string literal过长
表示无法正确解析发送到数据库的查询,因为存在过长的标识符。该标识符可以是表名、列名、函数名(最大长度为30字节)。
还要确保您的seq
列没有转义问题(一个'
出现在没有转义的字符串中)。
当使用超过4000个字符(或字节)的字符串文本插入或更新CLOB
时,需要将该字符串文本分配给PL/SQL变量,然后在PL/SQL块中插入或更新该表。
示例:
DECLARE
l_seq CLOB;
BEGIN
l_seq := 'CGCTGACCTGTG.....CGCTGACCTGTG';
INSERT INTO sequences (myid, allele, seq) VALUES ('00001;', 'HLA-A*01:01:01:01', l_seq);
END;
/
你好,美丽的人们。 我正在尝试使用连接到OracleDB的node.js创建RESTAPI,但我正在竭尽全力让这些愚蠢的绑定变量正常工作。 这是我的代码: 由于某种原因,我得到了错误 如果我删除bind变量,分配一个静态值,并删除sql语句后的“req.params.ScheMA”,并将括号留空,它就可以工作。 我知道我拉绑定变量的方式一定很简单,但是我把头发拔出来了。 请帮帮我欧比万克诺比。。。
请帮帮我 获取日期范围的数据时出错 错误 ora-01036非法变量名称/编号
为什么在Oracle DB中出现此错误? cx_Oracle。ORA-01036:非法变量名称/数字
我已经创建了一个API,希望将数据插入oracle数据库。但我收到一条错误消息“error:ORA-01036:非法变量名/编号”。我不知道我犯了什么错误。希望能帮我解决这个问题。先谢谢你。 [错误:ORA-01036:非法变量名/编号]{errorNum:1036,偏移量:0}
我想更新gridview中的行的单元格。但我得到的错误是 ORA-01036:非法变量名称/编号 在 下面是我的代码:-
我面临的问题,在更新表单视图值使用sqldatasSource绑定与Oracle数据库。 我的选择和插入事件工作正常,所有列和参数都正确。 但当我点击下面的更新按钮时,出现了错误: "ORA-01036:非法变量名称/数字" 以下是我在sqldatasource(与oracle绑定)中使用的更新命令: 我的问题解决了,因为我没有使用主键来匹配在哪里条件,当我用主键更改在哪里条件时,它开始工作。 在