首页 文章

PLS-00103:遇到以下其中一项时遇到符号“;”:

提问于
浏览
3

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

Ellucian banner v8提供了一个用于运行它的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非空表继续avg计数当前存在最大最小值之前sql stddev sum variance执行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 =>'大卫',错误报告:未知的逗号nd在命令的第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 回答

  • 5

    问题是 execute . 如果我've ever got that to work). Only the first line is translated, so it'有效地试图运行,那么's actually shorthand for a short anonymous PL/SQL block, and cannot be split across lines. (Except maybe with a continuation character, but I can'记不起来:

    begin execute gb_pin_answer.p_create(; end;
    /
    

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

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

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

    最后一个参数不对; OUT ... 中的位需要用 => some_value 替换,就像你运行've done with the others. But it is an out parameter, so you need something to put the value in. Without seeing what else is in the script you'我可以't tell if you'已经处理过它,但是使用这种模式你可能只需要向匿名块添加一个变量:

    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;
    /
    
  • 0

    从上次编辑开始,我看到你错误地将 1 用于 l ... 1_rowid_out 而不是 l_rowid_out .

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

相关问题