3

我正在尝试插入用户安全问题的答案,以用于 pin 重置功能。

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 not null table continue avg count current exists max min prior sql stddev sum variance execute multiset the bothleading trailing forall merge year month day hour minute second timezone_hour timezone_minute timezone_region timezone_abbr time timestamp interval date 06550. 00000 - "line %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 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 编译错误。*行动:

4

3 回答 3

5

问题是execute. 这实际上是简短匿名 PL/SQL 块的简写,不能跨行拆分。(除了可能有一个延续字符,但我不记得如果我曾经让它工作)。只有第一行被翻译,所以它正在有效地尝试运行:

begin execute gb_pin_answer.p_create(; end;
/

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

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

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

最后一个参数不正确;需要将 bit fromOUT ...替换为=> some_value,就像您对其他人所做的那样。但它是一个输出参数,所以你需要一些东西来输入值。没有看到你正在运行的脚本中还有什么,我无法判断你是否已经处理过它,但是使用这种模式你可以可能只是向匿名块添加一个变量:

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;
/
于 2013-04-30T21:09:59.040 回答
0

从上次编辑中,我看到您误认为1l... 1_rowid_out而不是l_rowid_out.

您不能像您尝试的那样以数字开头。

于 2016-03-24T16:25:55.837 回答
0

我们在混合 Dapper 和本机 Oracle MDA 结构时遇到了这个错误。特别尝试将 WithConnection 构造与本机 Oracle 驱动程序一起使用。它不喜欢这样,并返回了一个非常相似且无意义的错误消息“ORA-06550:第 1 行,第 259 列:PLS-00103:遇到符号...等等等等”

于 2021-09-01T17:36:16.163 回答