【问题标题】:Stored Procedure + Call Not working存储过程 + 调用不起作用
【发布时间】:2018-02-21 06:09:23
【问题描述】:

但是,我的存储过程可以编译;当我尝试调用它时,我收到以下错误:

Encountered the symbol "IS" when expecting one of the following:
constant exception <an identifier>
<a double-quoted delimited-identifier> table long double ref
char time timestamp interval date binary national character
nchar
The symbol "IS" was ignored.
ORA-06550: line 2, column 48:
PLS-00103: Encountered the symbol "," when expecting one of the following:

:= ( ; not null range default character
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

我的存储过程如下:

create or replace procedure p_xml
(v_utc_offset in XML_HOURS_LOAD.UTCOFFSET%type
, v_data_date in XML_HOURS_LOAD.DATA_DATE%type
, v_data_type in XML_HOURS_LOAD.DATA_TYPE%type
, v_posted_value in XML_HOURS_LOAD.POSTEDVALUE%type
, v_utc_value in XML_HOURS_LOAD.UTCVALUE%type
, v_hour in XML_HOURS_LOAD.HOUR%type
, v_data_code in XML_HOURS_LOAD.DATA_CODE%type
)
AS
BEGIN
  if v_utc_offset >= 4 THEN
  INSERT INTO xml_hours_Load (UTCOffset, Data_date, Data_Type, PostedValue, UTCValue, Hour, Data_Code)
  VALUES(v_utc_offset, v_data_date, v_data_type, v_posted_value, v_utc_value, v_hour, v_data_code);  
  COMMIT;
 END IF;
END;

我如何称呼它(以及返回上面列出的错误)如下:

DECLARE
  v_utc_offset is XML_HOURS_LOAD.UTCOFFSET%type,
  v_data_date is XML_HOURS_LOAD.DATA_DATE%type,
  v_data_type is  XML_HOURS_LOAD.DATA_TYPE%type,
  v_posted_value is  XML_HOURS_LOAD.POSTEDVALUE%type,
  v_utc_value is  XML_HOURS_LOAD.UTCVALUE%type,
  v_hour is  XML_HOURS_LOAD.HOUR%type,
  v_data_code is XML_HOURS_LOAD.DATA_CODE%type;
CURSOR cXmlHoursLoadCursor is (SELECT utcoffset, data_date, data_type, postedvalue, utcvalue, hour, data_code
                             from xml_hours_load);
BEGIN
  FOR v in cXmlHoursLoadCursor LOOP
p_xml(v.utcoffset, v.data_date, v.data_type, v.postedvalue, v.utcvalue, v.hour, v.data_code);
COMMIT;
  END LOOP;
END;

提前致谢!

【问题讨论】:

    标签: oracle plsql


    【解决方案1】:

    在您的匿名块中,CURSOR 是您应该使用IS 关键字声明的唯一变量。从其他人那里删除它。

    DECLARE
      v_utc_offset XML_HOURS_LOAD.UTCOFFSET%type;
      v_data_date XML_HOURS_LOAD.DATA_DATE%type;
      v_data_type XML_HOURS_LOAD.DATA_TYPE%type;
      v_posted_value XML_HOURS_LOAD.POSTEDVALUE%type;
      v_utc_value XML_HOURS_LOAD.UTCVALUE%type;
      v_hour XML_HOURS_LOAD.HOUR%type;
      v_data_code XML_HOURS_LOAD.DATA_CODE%type;
    CURSOR cXmlHoursLoadCursor is (SELECT utcoffset, data_date, data_type, postedvalue, utcvalue, hour, data_code
                             from xml_hours_load);
    BEGIN
      FOR v in cXmlHoursLoadCursor LOOP
    p_xml(v.utcoffset, v.data_date, v.data_type, v.postedvalue, v.utcvalue, v.hour, v.data_code);
    COMMIT;
      END LOOP;
    END;
    

    【讨论】:

    • 谢谢!如果我要创建存储过程,并且我希望它运行,我会安排一个正确的作业吗?还是我需要包含其他内容?抱歉,一直在阅读,但还没有找到答案……
    • 如果您想“按计划”运行它(例如,每天两次或每周一次或...),您可以安排它。否则,您只需执行它。
    猜你喜欢
    • 2023-03-11
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 2021-07-30
    相关资源
    最近更新 更多