当前位置: 首页 > 知识库问答 >
问题:

python - SQLAlchmey调用存储过程获取出参报错ORA-00936: missing expression,该如何解决?

谢和颂
2023-09-19

Oracle存储过程代码如下:

create procedure test_procedure(id_in in number,del_num out number) as begin  select count(*) into del_num from test t where t.id = id_in ;  delete from test t where t.id = id_in ;  commit;end;/

python调用代码如下:

from sqlalchemy import create_engine , textfrom sqlalchemy.orm import sessionmakerfrom configs import url# 创建数据库连接engine = create_engine(url)# 创建会话Session = sessionmaker(bind=engine)session = Session()# 调用存储过程result = session.execute(text("CALL test_procedure(:param1, @out_param)"),                         {'param1': 3})# 获取输出参数的值out_param_value = session.execute("SELECT @out_param").scalar()# 打印输出参数的值print(out_param_value)

执行python报错信息:
DatabaseError: (cx_Oracle.DatabaseError) ORA-00936: missing expression

咨询了GPT给了如下的代码:

from sqlalchemy import create_enginefrom sqlalchemy.orm import sessionmakerfrom sqlalchemy import outparamfrom configs import url# 创建数据库连接engine = create_engine(url)# 创建会话Session = sessionmaker(bind=engine)session = Session()# 调用存储过程result = session.execute("BEGIN test_procedure(:alarmid, :del_num); END;",                         {'alarmid': 123, 'del_num': outparam.Parameter(int)})# 获取输出参数的值out_param_value = result.fetchone()['del_num']# 打印输出参数的值print(out_param_value)

结果报错:
AttributeError: 'function' object has no attribute 'Parameter'

所以究竟怎么才能通过SQLAlchmey调用存储过程正常获取出参呢?

共有1个答案

范稳
2023-09-19

用outparam方法:

from sqlalchemy import create_enginefrom sqlalchemy.orm import sessionmakerfrom sqlalchemy.sql import outparamfrom configs import url# 创建数据库连接engine = create_engine(url)# 创建会话Session = sessionmaker(bind=engine)session = Session()# 调用存储过程result = session.execute(    "BEGIN test_procedure(:param1, :out_param); END;",    {'param1': 123, 'out_param': outparam('out_param', int)})# 获取输出参数的值out_param_value = result.out_parameters['out_param']# 打印输出参数的值print(out_param_value)
 类似资料:
  • 问题内容: 与PHP中的mysql中的存储过程无关,文档完全缺乏。我目前有一个通过PHP调用的存储过程,如何获取out参数的值? 问题答案: 它看起来像在这篇文章中回答: http://forums.mysql.com/read.php?52,198596,198717#msg-198717 使用mysqli PHP API: 假设sproc myproc(IN i int,OUT j int):

  • 问题内容: 我正在将MyBAtis-3与MyBAtis- Spring一起使用。当我尝试调用使用MyBatis批注返回多个参数的存储过程时。我什么也没得到,我可以看到输入参数已传递到日志中的SP,并且挂在那里,没有进度,也没有抛出异常。 PFB我试图从MyBAtis访问的Oracle存储过程, PFB映射器接口方法, Test对象包含在存储过程调用语句中作为输入传递的参数。 当我执行此操作时,它会

  • 问题内容: 我使用的是SQL Server2005。我创建了一个大多数时候都可以使用的存储过程,但是我发现了一个实例,它无法满足我的要求。 目前,代码执行的操作是这样的 输出变量在哪里。 因此,我可以得到一个数字,但我真正想要的只是SQL错误。 像 Hey之类的 东西 ,我不能这样做,因为在此列上有fk约束 或其他 约束 。我在msdn http://msdn.microsoft.com/zh-

  • 问题内容: 我有一个需要很多参数的插入存储过程-其中2个是@ FirstName,@ LastName。我还有一个更新存储过程,该过程需要许多参数-其中2个是@ FirstName,@ LastName。 我想做的是,从插入SP内部完成之后,调用更新SP并将其发送给@ FirstName,@ LastName。 我不知道这样做的正确语法;我试过了: 但我认为这是错误的。 有人可以告诉我怎么写这个电

  • 本文向大家介绍Sql Server 存储过程调用存储过程接收输出参数返回值,包括了Sql Server 存储过程调用存储过程接收输出参数返回值的使用技巧和注意事项,需要的朋友参考一下 创建存储过程: 接收输出参数: 2,带返回值 创建存储过程: 接收返回值: 以上所述是小编给大家介绍的Sql Server 存储过程调用存储过程接收输出参数返回值,希望对大家有所帮助,如果大家有任何疑问请给我留言,小

  • mYSQL存储过程的错误: 存储过程如下: 报错:Procedure execution failed 1054 - Unknown column '王小李' in 'field list' 只要传值进去就报字段不在列表中,当我把 DataName 改成int 整型的时候运行可以,当为字符串运行就报错。请教高手要这么处理?