Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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
Jython zxJDBC/Python cx#u oracle调用oracle';s存储过程_Python_Django_Oracle_Jython - Fatal编程技术网

Jython zxJDBC/Python cx#u oracle调用oracle';s存储过程

Jython zxJDBC/Python cx#u oracle调用oracle';s存储过程,python,django,oracle,jython,Python,Django,Oracle,Jython,尝试制作一个django测试应用程序,该应用程序将使用存储的oracle过程来插入/获取数据 将jython与zxJDBC一起使用,但同样的错误也适用于python和cx_oracle 以下是一些代码: models.py from django.db import models from django.db import connection class ALEX_TEST_PKG(): def get_data(self, inparam1): cursor = c

尝试制作一个django测试应用程序,该应用程序将使用存储的oracle过程来插入/获取数据

将jython与zxJDBC一起使用,但同样的错误也适用于python和cx_oracle

以下是一些代码:

models.py

from django.db import models
from django.db import connection

class ALEX_TEST_PKG():
    def get_data(self, inparam1):
        cursor = connection.cursor()
        ret = cursor.callproc("ALEX_TEST_PKG.test0", inparam1)
        cursor.close
        return ret
views.py

class TestForm(forms.Form):
    inparam1 = forms.CharField(max_length=500)


def message(request):
    if request.method == 'POST':
        form = TestForm(request.POST)
    else:
        form = TestForm()
    if form.is_valid():
        my_util = ALEX_TEST_PKG()
        ret = my_util.get_data(request.POST['inparam1'])
        return HttpResponse(ret)
    return render_to_response('form.html', {'form':form}, context_instance=RequestContext(request))
oracle的程序:

CREATE OR REPLACE PACKAGE BODY ALEX.alex_test_pkg
IS
   PROCEDURE test0 (inparam1 IN integer)
   IS
   BEGIN
      insert into alex_debug(col1) values(inparam1); 
   END test0;
END alex_test_pkg;
/
Django错误日志:

Environment:


Request Method: POST
Request URL: http://localhost:8000/form/

Django Version: 1.3.1
Python Version: 2.7.0
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'dbtest']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "C:\Python27\lib\site-packages\django-1.3.1-py2.7.egg\django\core\handlers\base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "E:\WatchTower\workspace3\erwtwe\erwtwe\dbtest\views.py" in message
  19.         ret = my_util.get_data(request.POST['inparam1'])
File "E:\WatchTower\workspace3\erwtwe\erwtwe\dbtest\models.py" in get_data
  7.         ret = cursor.callproc("ALEX_TEST_PKG.test0", inparam1)

Exception Type: DatabaseError at /form/
Exception Value: ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'TEST0'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

任何帮助都是值得的。这已经让我头疼了3天。

您正在传递来自
request.POST
的值,它始终是一个字符串,但您的存储过程需要一个整数


使用
form.cleaned_data['inparam1']
代替-表单将其转换为正确的类型,即整数。

callproc的参数应通过列表传入。你好像在传递一个字符串。我的间接猜测是Django或cx_Oracle将该字符串解释为一个序列,并将一系列1个字符的字符串传递给Oracle

[inparam1]
而不仅仅是
inparam1
传递到cursor.callproc