我是横幅学生 api 的新手。当我运行下面的代码时,它给了我一个错误: ORA-00907:缺少右括号
call sb_course.f_query_one(
p_subj_code => "LMA",
p_crse_numb => "400",
p_eff_term => 201203
);
提前感谢您的时间。
小代码片段不会产生错误ORA-00907: missing
right parenthesis
。该错误来自代码片段周围的上下文,或者在通过调用运行的代码中f_query_one
。
下面,我展示
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!
使用单引号应该可以。你确定错误发生在这条线上吗?你在评论中写的看起来不错。
打那个……
您不想使用“呼叫”一词。如果您使用 pl/sql 编写,则删除该单词。如果您在 sql 中编写此代码,请改用“exec”。