Ellucian Banner API

时间:2013-05-27 04:05:00

标签: sql oracle plsql

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

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

先谢谢你的时间。

2 个答案:

答案 0 :(得分:3)

小代码段不会产生错误ORA-00907: missing right parenthesis。该错误要么来自于周围的环境 代码段,或通过调用f_query_one来运行代码。

下面,我展示

  1. 围绕调用值的双引号不起作用。在 Oracle双引号是一种指定不引用的标识符的方法 遵循正常的标识符规则。这种情况下的错误是 ORA-06576:不是有效的功能或程序名称
  2. 调用过程时使用单引号。
  3. 调用函数时,需要指定into子句 收到返回值。否则错误 ORA-06576:无效 将引发功能或程序名称
  4. 在任何情况下 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!
    

答案 1 :(得分:1)

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

罢工......

您不想使用“call”这个词。如果您使用pl / sql编写,则删除该单词。如果你在sql中写这个,那么使用“exec”代替。