【问题标题】:Ellucian Banner APIEllucian 横幅 API
【发布时间】:2013-05-27 04:05:00
【问题描述】:

我是横幅学生 API 的新手。当我运行下面的代码时,它给了我一个错误: ORA-00907:缺少右括号

call sb_course.f_query_one(
            p_subj_code => "LMA",
            p_crse_numb => "400",
            p_eff_term  => 201203
            );

提前感谢您的宝贵时间。

【问题讨论】:

  • 我什至尝试了call sb_course.f_query_one( p_subj_code => 'LM', p_crse_numb => '600P', p_eff_term => 201300 ); 并给出了同样的错误信息。

标签: sql oracle plsql


【解决方案1】:

小代码sn-p不会产生错误ORA-00907: missing right parenthesis。该错误要么来自周围的上下文 代码 sn-p,或在通过调用 f_query_one 运行的代码中。

下面,我显示

  1. 调用中值的双引号不起作用。在 Oracle 双引号是一种指定标识符的方法 遵循正常的标识符规则。这种情况下的错误是 ORA-06576: 不是有效的函数或过程名称
  2. 在调用过程时使用单引号有效。
  3. 调用函数时,需要指定into子句 接收返回值。否则错误ORA-06576: not a valid 函数或过程名称将被提出。

在任何情况下都不会引发 ORA-00907:缺少右括号 请查看更广泛的上下文以找出错误的原因。

以下是与 SQL*Plus 的交互。 SQL> 是一个提示 新命令,下面的行带有附加行的数字 对于那个命令。其他所有内容都由 SQL*Plus 打印。

使dbms_output 包的输出可见。

SQL> set serveroutput on size unlimited

创建一个过程f_query_one,从你的 样本。根据传入的值猜测类型 样本。请注意,我没有 SB_COURSE 架构。那将是一个 与我下面的示例以及您的代码 sn-p 的区别。

SQL> create or replace procedure f_query_one(p_subj_code in varchar2
  2      , p_crse_numb in varchar2
  3      , p_eff_term in varchar2)
  4  is begin
  5      dbms_output.put_line('Hello World!');
  6  end f_query_one;
  7  /

Procedure created.

按照您的问题中发布的方式调用,并发现双引号没有 工作。

SQL> call f_query_one(
  2              p_subj_code => "LMA",
  3              p_crse_numb => "400",
  4              p_eff_term  => 201203
  5              );
            p_subj_code => "LMA",
                           *
ERROR at line 2:
ORA-06576: not a valid function or procedure name

用单引号调用。有效!

SQL> call f_query_one(p_subj_code => 'LMA'
  2      , p_crse_numb => '400'
  3      , p_eff_term  => 201203);
Hello World!

Call completed.

删除过程并创建一个名为 f_query_one 的函数。

SQL> drop procedure f_query_one;

Procedure dropped.

SQL> create or replace function f_query_one(p_subj_code in varchar2
  2      , p_crse_numb in varchar2
  3      , p_eff_term in varchar2) return varchar2
  4  is begin
  5      return 'Hello World!';
  6  end f_query_one;
  7  /

Function created.

调用函数。但是函数确实存在,为什么说不存在呢?

SQL> call f_query_one(p_subj_code => 'LMA'
  2      , p_crse_numb => '400'
  3      , p_eff_term  => 201203);
call f_query_one(p_subj_code => 'LMA'
     *
ERROR at line 1:
ORA-06576: not a valid function or procedure name

创建一个绑定变量。 var 是一个 SQL*Plus 命令。它是一部分 既不是 SQL 也不是 PL/SQL 语言。

SQL> var so varchar2(20)

添加into 子句将值保存在绑定变量中。

SQL> call f_query_one(p_subj_code => 'LMA'
  2      , p_crse_numb => '400'
  3      , p_eff_term  => 201203) into :so;

Call completed.

打印绑定变量。 print 是一个 SQL*Plus 命令。它是一部分 既不是 SQL 也不是 PL/SQL 语言。

SQL> print so

SO
--------------------------------
Hello World!

【讨论】:

    【解决方案2】:

    使用单引号应该可以。你确定错误发生在这条线上吗?您在评论中写的内容看起来不错。

    打那个.....

    您不想使用“呼叫”一词。如果您使用 pl/sql 编写,则删除该单词。如果您在 sql 中编写此代码,请改用“exec”。

    【讨论】:

    • 请让我知道这是否正确。 :) 我可以使用几点。
    • EXEC[UTE] 既不是 SQL 也不是 PL/SQL 词,它是 SQL*Plus 命令:docs.oracle.com/cd/E11882_01/server.112/e16604/…。 “CALL 是用于执行例程的 SQL 语句。” docs.oracle.com/cd/E11882_01/server.112/e26088/…。我个人从不使用call,尽管与我一起工作的人会这样做。
    • @BrianMcGinity 我也试过单引号,但它给了我同样的错误。
    • @ShannonSeverance 感谢您提供的信息。我尝试在没有CALL 的情况下调用该过程,但我仍然遇到同样的错误。
    • 这是一个程序吗?因为f_ 有时用作函数的前缀。
    猜你喜欢
    • 2022-08-19
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    相关资源
    最近更新 更多