PLS-00103:遇到符号“;”当期待以下之一时:

时间:2013-04-30 20:46:11

标签: oracle plsql

我正在尝试将答案插入用户的安全问题,以便在引脚重置功能中使用。

Ellucian banner v8 +提供了运行此API的API,我对他们的API非常新,从下面的错误消息的外观来看,我还远未正确运行。任何帮助表示赞赏。

我尝试在Oracle SQL Developer中运行它:

execute gb_pin_answer.p_create(
    P_PIDM        =>    12345,
    P_NUM         =>    1,
    p_gobqstn_id  =>    1,
    p_qstn_desc   =>    '',
    p_ansr_desc   =>    'David',
    p_ansr_salt   =>    'A123B456',
    p_user_id     =>    'W:H12345678',
    p_data_origin =>    'WWW_USER',
    p_rowid_out         OUT gb_common.internal_record_id_type
);

这是在黑暗中拍摄的,但我想我会试一试,在尝试执行该程序包的p_create函数时会显示错误消息:

  

在命令的第15行开始出错:执行gb_pin_answer.p_create(   错误报告:ORA-06550:第1行,第30列:PLS-00103:遇到了   符号“;”期待以下之一:

     

() - + case mod new not null table continue avg count   当前存在最大最小值sql stddev sum variance execute   multiset两个领先的尾随forall合并年月日   分钟秒timezone_hour timezone_minute timezone_region   timezone_abbr时间时间戳间隔日期   06550. 00000 - “行%s,列%s:\ n%s”   *原因:通常是PL / SQL编译错误。   *操作:

     

在命令的第16行开始出错:P_PIDM => 12345,错误   报告:未知命令

     

在命令的第17行开始出错:P_NUM => 1,错误报告:   未知命令

     

在命令的第18行开始出错:p_gobqstn_id => 1,错误报告:   未知命令

     

从命令第19行开始出错:p_qstn_desc => '',错误   报告:未知命令

     

在命令的第20行开始出错:p_ansr_desc => '大卫',错误   报告:未知命令

     

在命令的第21行开始出错:p_ansr_salt => 'A123B456',   错误报告:未知命令

     

在命令的第22行开始出错:p_user_id => 'W:H12345678',   错误报告:未知命令

     

从命令行第23行开始出错:p_data_origin => 'WWW_USER',   错误报告:未知命令

     

在命令的第24行开始出错:p_rowid_out OUT   gb_common.internal_record_id_type错误报告:未知命令

     

在命令的第25行开始出错:)错误报告:未知命令

这是我在阅读使用此函数的地方,p_create:http://inb1.banner.ecu.edu:9090/api_erd_index_guide/api/general/gb_pin_answer.html#p_create

更新:错误的代码:

SET SERVEROUTPUT ON
declare
  l_rowid_out gb_common.internal_record_id_type;
BEGIN
  gb_pin_answer.p_create(P_PIDM => 36706, P_NUM => 1, P_GOBQSTN_ID => 1, P_QSTN_DESC => '', P_ANSR_DESC => 'David', P_ANSR_SALT => 'HB123456', P_USER_ID => 'H00036657', P_DATA_ORIGIN => 'WWW_USER', P_ROWID_OUT => 1_rowid_out);
  dbms_output.put_line('rowid: ' || l_rowid_out);
END;

错误消息:

  

错误报告:ORA-06550:第4行,第199列:PLS-00363:表达式'1'   不能用作分配目标ORA-06550:第4行第3列:   PL / SQL:语句被忽略   06550. 00000 - “行%s,列%s:\ n%s”   *原因:通常是PL / SQL编译错误。   *操作:

2 个答案:

答案 0 :(得分:5)

问题是execute。这实际上是一个简短的匿名PL / SQL块的简写,并且不能跨行分割。 (除了可能有一个延续角色,但如果我有工作的话,我不记得副手)。只翻译了第一行,因此它有效地尝试运行:

begin execute gb_pin_answer.p_create(; end;
/

...而且它非常合理地不喜欢以p_create(;结尾的命令。然后将过程调用的其余部分视为10个单独的命令,这些命令会生成您获得的其他错误,并且在该上下文中它们也是合理的。

解决方案是将整个过程调用放在一行,这将使其更难阅读;或者只是使用自己的块,而不是依赖execute

begin
    gb_pin_answer.p_create(
        ...
    );
end;
/

最后一个参数不对; OUT ...中的位需要替换为=> some_value,就像您对其他位一样。但它是一个out参数,所以你需要一些东西来把价值放进去。没有看到你正在运行的脚本中还有什么我不知道你是否已经处理过它,但是你可以用这种模式可能只是向匿名块添加一个变量:

set serveroutput on
declare
    l_rowid_out gb_common.internal_record_id_type;
begin
    gb_pin_answer.p_create(
        ...
        p_rowid_out => l_rowid_out
    );
    -- optional
    dbms_output.put_line('rowid: ' || l_rowid_out);
end;
/

答案 1 :(得分:0)

从上次编辑开始,我发现您1误导了l ... 1_rowid_out代替l_rowid_out

您无法使用您尝试过的数字启动变量。