-4

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

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

提前感谢您的时间。

4

2 回答 2

3

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

下面,我展示

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

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

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

使dbms_output包的输出可见。

SQL> set serveroutput on size unlimited

创建一个f_query_one从您的样本中获取增强的过程。根据样本中传递的值猜测类型。请注意,我没有SB_COURSE架构。这将与我下面的示例和您的代码片段有所不同。

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!
于 2013-05-27T22:38:45.303 回答
1

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

打那个……

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

于 2013-05-27T04:27:09.633 回答