Python 从cx\U oracle调用oracle过程

Python 从cx\U oracle调用oracle过程,python,oracle,python-3.x,plsql,cx-oracle,Python,Oracle,Python 3.x,Plsql,Cx Oracle,查询,在ide中工作,我要执行: begin sys.dbms_scheduler.create_schedule(schedule_name => 'U6_GB.SCHED_DAILY_7_30', start_date => to_date(null), repeat_interval => 'Freq=Dai

查询,在ide中工作,我要执行:

begin
  sys.dbms_scheduler.create_schedule(schedule_name   => 'U6_GB.SCHED_DAILY_7_30',
                                     start_date      => to_date(null),
                                     repeat_interval => 'Freq=Daily;ByHour=7;ByMinute=30',
                                     end_date        => to_date(null),
                                     comments        => '');
end;
程序签字:

 DBMS_SCHEDULER.CREATE_SCHEDULE (
   schedule_name          IN VARCHAR2,
   start_date             IN TIMESTAMP WITH TIMEZONE DEFAULT NULL,
   repeat_interval        IN VARCHAR2,
   end_date               IN TIMESTAMP WITH TIMEZONE DEFAULT NULL,
   comments               IN VARCHAR2 DEFAULT NULL);
我尝试过:

from django.db import connection
cursor = connection.cursor()
cursor.callproc('''
    begin
      sys.dbms_scheduler.create_schedule(schedule_name   => 'U6_GB.SCHED_DAILY_7_30',
                                         start_date      => to_date(null),
                                         repeat_interval => 'Freq=Daily;ByHour=7;ByMinute=30',
                                         end_date        => to_date(null),
                                         comments        => '');
    end;
''')
我得到了这个:

return self.cursor.callproc(procname)
cx_Oracle.DatabaseError: ORA-06550: line 9, column 2:
PLS-00103: Encountered the symbol ")" when expecting one of the following:
然后我试着:

cursor.callproc('SYS.DBMS_SCHEDULER.CREATE_SCHEDULE', (
    "U6_GB.SCHED_DAILY_7_30",
    "to_date(null)",
    "Freq=Daily;ByHour=7;ByMinute=30",
    "to_date(null)",
    "",
))
我明白了:

return self.cursor.callproc(procname, params)
cx_Oracle.DatabaseError: ORA-01858: a non-numeric character was found where a numeric was expected
ORA-06512: at line 1
我做错了什么

win32上的Python 3.6.2(v3.6.2:5fd33b5,2017年7月8日,04:14:34)[MSC v.1900 32位(英特尔)]

Oracle数据库11g企业版11.2.0.4.0版


cx Oracle==6.0.3

尝试以下方法:将调用字符串放在双引号内,并使用
execute

from django.db import connection
cursor = connection.cursor()
cursor.execute("
    begin
      sys.dbms_scheduler.create_schedule(schedule_name   => 'U6_GB.SCHED_DAILY_7_30',
                                         start_date      => to_date(null),
                                         repeat_interval => 'Freq=Daily;ByHour=7;ByMinute=30',
                                         end_date        => to_date(null),
                                         comments        => '');
    end;
")

您可以使用callproc()和关键字参数进行如上所述的调用,如下所示:


kwArgs=dict(时间表名称='U6\U GB.SCHED\U DAILY\U 7\U 30',
重复\u间隔='频率=每天;按小时=7;按分钟=30')
cursor.callproc(“dbms_调度程序.创建_调度程序”,[],kwArgs)

我尝试在一行中执行该过程(您的代码无效),相同result@Vladimir尝试使用
execute
而不是
callproc
。我编辑了我的答案。谢谢@Plirkee,我试着这么做,我的错误是错误的评论:“-”而不是“-”。史诗般的失败。