Oracle PLS-00103:遇到符号“&引用;当预期出现以下情况之一时:

Oracle PLS-00103:遇到符号“&引用;当预期出现以下情况之一时:,oracle,plsql,Oracle,Plsql,我试图插入用户安全问题的答案,用于pin重置功能 Ellucian banner v8+提供了一个用于运行此API的API,我对他们的API非常陌生,从下面错误消息的外观来看,我远没有正确运行此API。感谢您的帮助 我尝试在Oracle SQL Developer中运行此功能: execute gb_pin_answer.p_create( P_PIDM => 12345, P_NUM => 1, p_gobqstn_

我试图插入用户安全问题的答案,用于pin重置功能

Ellucian banner v8+提供了一个用于运行此API的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:遇到错误 符号“;”时,应满足以下条件之一:

()-+案例模块新非空表继续平均计数 当前存在最大最小先前sql STDEV和差异执行 多重设置所有合并年、月、日、小时的两个前导尾部 分钟第二时区\小时时区\分钟时区\地区 时区缩写时间戳间隔日期 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=>David',错误 报告:未知命令

从命令中的第21行开始出错:p_ansr_salt=>“A123B456”, 错误报告:未知命令

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

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

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

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

这是我了解如何使用此函数的地方,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:忽略语句 655000000-“行%s,列%s:\n%s” *原因:通常是PL/SQL编译错误。 *行动:


问题在于
执行
。这实际上是一个简短的匿名PL/SQL块的缩写,不能跨行拆分。(除了可能有一个延续字符,但我记不起我有没有用过)。只有第一行被翻译,所以它实际上是在运行:

begin execute gb_pin_answer.p_create(; end;
/
。。。然后,它相当合理地不喜欢命令以
p_create(;
)结尾。然后,过程调用的其余部分被视为10个单独的命令,这些命令会生成您得到的其他错误,在该上下文中它们也是合理的

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

begin
    gb_pin_answer.p_create(
        ...
    );
end;
/
但是最后一个参数不正确;
OUT…
中的位需要替换为
=>一些值,就像您对其他参数所做的那样。但是它是一个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;
/

从上一次编辑中,我看到您在
l
中误选了
1
。。。
1\u rowid\u out
而不是
l\u rowid\u out


您不能用您尝试过的数字启动变量。

我尝试过:在声明l\u rowid\u out gb\u common.internal\u record\u id\u type上设置SERVEROUTPUT;开始gb\u pin\u answer.p\u创建(P_PIDM=>36706,P_NUM=>1,P_GOBQSTN_ID=>1,P_QSTN_DESC=>1,P_ANSR_DESC=>David,P_ANSR_SALT=>HB123456,P_USER_ID=>H00036657,P_DATA_ORIGIN=>WWW_USER,P_ROWID_OUT=>1_ROWID_OUT);输出。输出行('ROWID:'ID:'124; ID:'124l|;END;/it返回的错误消息片段:错误报告:ORA-06550:第4行,第215列:PLS-00103:在预期以下情况之一时遇到符号“”:,*&=-+at in是mod rements而不是rem或!=或~=>=@Brad-你真的有
1\u rowid\u out
而不是
l\u rowid\u out
作为参数吗?是的,我不确定需要传递什么值。我对这些包是全新的。@Brad如果你用顺便说一句,h backticks…尽管它们对于注释来说实在太长了…我会看看是否可以重新创建它。但是
1\u rowid\u out
是错误的,它必须与您声明的变量匹配。如果错误报告在…
时实际显示了
…符号“\u”,那么这就是问题所在;只需将
1\u
更改为
l