Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python的DCOracle2 Oracle数据库绑定中的分段错误_Python_Oracle - Fatal编程技术网

Python的DCOracle2 Oracle数据库绑定中的分段错误

Python的DCOracle2 Oracle数据库绑定中的分段错误,python,oracle,Python,Oracle,目前,我们正在使用针对Python的Oracle绑定 DCOracle2不再维护,但由于传统的限制,我们正在使用它。 每当我试图创建具有更大数据量的“SQLT_CLOB”时,它就会崩溃(分段错误) 使用此Python代码分段可以重现错误: from DCOracle2 import DCOracle2,dbi connection = DCOracle2.connect(user='username', password='password',database='DBname') lob_lo

目前,我们正在使用针对Python的Oracle绑定

DCOracle2不再维护,但由于传统的限制,我们正在使用它。 每当我试图创建具有更大数据量的“SQLT_CLOB”时,它就会崩溃(分段错误)

使用此Python代码分段可以重现错误:

from DCOracle2 import DCOracle2,dbi

connection = DCOracle2.connect(user='username', password='password',database='DBname')
lob_locator = connection.LobLocator('SQLT_CLOB')
data = '1' * 90000
lob_locator.write(data)
connection.procedures.your_schema_name.your_procedure_name(lob_locator) # This line causes segmentation fault
connection.close()
这是我创建的简单过程:

create or replace function proceclob(i_clob clob) return clob as
l_tmp clob;
begin
  l_tmp := i_clob;
  return l_tmp;
end;
这是我在segfault之后看到的回溯:

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff69f5d80 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
(gdb) where
#0  0x00007ffff69f5d80 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#1  0x0000000000462e51 in PyString_FromStringAndSize ()
#2  0x00007ffff5da612f in listDescriptors (self=0x7ffff7e898f0, parmh=0x7ffff00ec768, entry=0x7ffff5fb0fa0, current=<optimized out>) at src/dco2.c:2293
#3  0x00007ffff5da69ea in ServerContext_describe (self=0x7ffff7e898f0, args=<optimized out>) at src/dco2.c:2425
#4  0x000000000056d4a4 in PyEval_EvalFrameEx ()
#5  0x000000000056dc92 in PyEval_EvalFrameEx ()
#6  0x000000000056dc92 in PyEval_EvalFrameEx ()
#7  0x00000000005747c0 in PyEval_EvalCodeEx ()
#8  0x00000000005697b0 in ?? ()
#9  0x000000000043a8b6 in PyObject_Call ()
#10 0x000000000043b626 in PyEval_CallObjectWithKeywords ()
#11 0x00000000004fdc2a in ?? ()
#12 0x000000000056d54e in PyEval_EvalFrameEx ()
#13 0x00000000005747c0 in PyEval_EvalCodeEx ()
#14 0x0000000000569ee1 in PyRun_FileExFlags ()
#15 0x000000000056a6b3 in PyRun_SimpleFileExFlags ()
#16 0x000000000056ba75 in Py_Main ()
#17 0x00007ffff68cd76d in __libc_start_main () from /lib/x86_64-linux-gnu/libc.so.6
#18 0x000000000041bb11 in _start ()
程序接收信号SIGSEGV,分段故障。
0x00007ffff69f5d80英寸??()来自/lib/x86_64-linux-gnu/libc.so.6
(gdb)在哪里
#0 0x00007FF69F5D80英寸??()来自/lib/x86_64-linux-gnu/libc.so.6
#1 0x0000000000462e51在PyString_中来自StringAndSize()
#src/dco2.c处的列表描述符中有2个0x00007ffff5da612f(self=0x7ffff7e898f0,parmh=0x7ffff00ec768,entry=0x7ffff5fb0fa0,current=)
#在src/dco2.c:2425处描述ServerContext中的3 0x00007ffff5da69ea(self=0x7ffff7e898f0,args=)
#PyEval_EvalFrameEx()中的4 0x000000000056d4a4
#PyEval_EvalFrameEx()中的5 0x000000000056dc92
#PyEval_EvalFrameEx()中的6 0x000000000056dc92
#PyEval_evalcodex()中的7 0x00000000005747c0
#8 0x00000000005697b0英寸??()
#PyObject_调用()中的9 0x000000000043a8b6
#PyEval_CallObjectWithKeywords()中的10 0x000000000043b626
#11 0x00000000004fdc2a英寸??()
#PyEval_EvalFrameEx()中的12 0x000000000056d54e
#PyEval_evalcodex()中的13 0x00000000005747c0
#PyRun_FileExFlags()中的14 0x0000000000569ee1
#15 0x000000000056a6b3在PyRun_SimpleFileExFlags()中
#Py_干管中的16 0x000000000056ba75()
#17 0x00007ffff68cd76d,位于/lib/x86\u 64-linux-gnu/libc.so.6中的
#18 0x000000000041bb11英寸(U开始)
PS:这段代码与Python2.6完美配合,但在Python2.7及以上版本中崩溃

我尝试过用GDB调试python,但找不到任何具体原因。我们使用的DCOracle2版本是1.3(最新版本)

如果可能,请提供任何提示。

我可以解决这个问题。 问题是: Oracle标头在某些平台上将typedef“ub4”定义为“unsigned int”,在某些平台上将“unsigned long int”。 在我的平台上,它将“ub4”定义为“unsigned int”,这导致指针指向较大数据块时出现“越界”异常