Python 得到一个;nPLS-00306:参数的数量或类型错误'';错误。我应该如何着手修复它?

Python 得到一个;nPLS-00306:参数的数量或类型错误'';错误。我应该如何着手修复它?,python,cx-oracle,Python,Cx Oracle,我开始做一个项目,有一个bug,我正试图弄清楚该怎么处理 运行下面的代码时,我收到一个“ORA-06550:第1行第7列:\nPLS-00306:调用'some_DB_Process'时参数的数目或类型错误”\nORA-06550:第1行第7列:\nPL/SQL:语句被忽略”错误 我从后端调用的流程是客户数据库的一个内部流程,我们只有该流程的签名 这是我在请求期间运行的代码的一部分: cur=connection.cursor() ptID=检查用户身份验证() request\u data=j

我开始做一个项目,有一个bug,我正试图弄清楚该怎么处理

运行下面的代码时,我收到一个“ORA-06550:第1行第7列:\nPLS-00306:调用'some_DB_Process'时参数的数目或类型错误”\nORA-06550:第1行第7列:\nPL/SQL:语句被忽略”错误

我从后端调用的流程是客户数据库的一个内部流程,我们只有该流程的签名

这是我在请求期间运行的代码的一部分:

cur=connection.cursor()
ptID=检查用户身份验证()
request\u data=json.loads(request.data)
prId=请求\u数据.get('pr\u Id')
a='150'
b=当前变量(整数)
c=当前变量(str)
d=当前变量(str)
REQUID=克里特岛请求(ptID,prId)
请求数据['request\u id']=reqID.getvalue()
r_amf=无
r_amk=无
如果prId==“12345”:
尝试:
r_amf=next(如果item.get(54323))则请求数据中的项[data']的项[54323]
r_amk=next(如果item.get(54324))则请求_数据中的项[data']的项[54324]
除:
通过
''更多最终导致:''的代码
尝试:
cur.callproc('some_DB_Process',[requid.getvalue(),a,b,c,d,r_amf,r_amk])
commit()连接
例外情况除外,如e:
连接。回滚()
g、 池释放(连接)
返回json.dumps({'status':'0','msg':'DB Process Error:{})。格式(e),'Error\u data':'reqID:{},a:{},b:{},c:{},d:{},r_amf:{},r_amk:{}。格式(reqID.getvalue(),a,b,c,d,r_amf,r_amk)})
程序签字:

PROCEDURE一些\u DB\u过程(要求编号,
a在瓦查尔2,
b输入输出号码,
c输入输出VARCHAR2,
d IN OUT VARCHAR2,
r_b_日志在varchar2中默认为空,
varchar2中的r_r_num默认为null,
varchar2中的r_amk默认为空,
r_varchar2中的amf默认为空);
运行代码时,我在callproc部分期间收到一条错误消息,其中包含上述错误和以下数据:

 "error_data": 
 reqID:1234554321, 
 a: 150, 
 b: <cx_Oracle.Var of type DB_TYPE_NUMBER with value None>,
 c: <cx_Oracle.Var of type DB_TYPE_VARCHAR with value None>, 
 d: <cx_Oracle.Var of type DB_TYPE_VARCHAR with value None>,
 r_amf: None, 
 r_amk: None
“错误数据”:
需求编号:1234554321,
a:150,
乙:,,
c:,
d:,,
拉姆夫:没有,
拉姆克:没有
我不确定为什么会发生这种错误。 是因为某些值为Null/None,还是因为过程调用不正确? 我没有触及callproc调用,也没有触及其中的参数,有人告诉我,它在过去已经成功测试过了,但让我困惑的是,这些参数会像它们一样工作。我希望至少有一个使用键值对传递它们的要求,以便您知道哪个参数是哪个参数,或者至少以正确的顺序传递它们(例如,r_amf和r_amk的顺序相反,r_b_log和r_b_num根本不出现在流程调用中-被告知它曾经起作用,我假设应用了默认值,但顺序仍然让我有点困惑。)

我目前的思路是,我们可能需要一种方法来获取b、c和d变量的值,我们必须联系客户以获取这些信息的位置信息,因为这将解决无值问题,但这会解决问题吗?还是我也必须更改流程的调用方式?
如果我只是更改流程调用以包含2个缺少的变量并修复顺序,那么None值仍然是一个问题吗

非常感谢,
Bill

如果将一系列参数传递给callproc(),那么这些参数将按照提供的顺序传递给过程。因此,在上面的示例中,变量r_amf和r_amk中的值实际上将作为PL/SQL过程中的参数r_b_log和r_r_num传递

空值(None)是任何类型都完全可以接受的输入


快速扫描提供的数据和提供的过程定义不会显示任何明显的问题。我建议创建一个伪版本的过程,该过程具有相同的签名,但不做任何有用的事情,并创建一个独立的脚本,用硬编码数据调用此存储过程(如上面提供的)。如果独立脚本失败,请相应地更新您的问题,我将尝试提供进一步帮助。

尽管其中一些脚本是否具有默认值并不重要?哦,是的,没有注意到它们,但是您是否遵守
r\u amf
r\u amk
的顺序?它们分别位于第6和第7位,而应该位于第8和第9位。您认为呢“无”值会导致错误?是的,我确实遵守了顺序!我会更改它-只是之前有人告诉我这是正确的,我不想更改一些在它工作的前提下似乎不正常的内容。谢谢,我会尝试的!谢谢!我会在周二尝试这样做,到时我会重新工作并更新问题a这是必要的!