【问题标题】:Oracle ERROR : INVALID SQL STATEMENT ERROROracle 错误:无效的 SQL 语句错误
【发布时间】:2018-11-01 00:51:46
【问题描述】:

我做了一个存储过程,但是我不能执行存储过程我不知道是什么问题。

源代码:

Create or replace procedure land_naam(klantnummer_input in VARCHAR2
, verzendland_output out VARCHAR2)

AS 

BEGIN

SELECT land into verzendland_output from klanten 

WHERE klantnummer = klantnummer_input;

END land_naam;

首先我创建过程没有任何错误。

如果我想执行它,我运行代码

Execute land_naam;

之后我得到错误:

ORA-00900: 无效的 SQL 语句

我能做些什么来解决这个问题? The procedure The error statement

【问题讨论】:

  • 据我所知,您将 klantnummer_input 指定为输入参数。你必须为它传递一个值Execute land_naam(some_input_value)
  • 你觉得(klantnummer_input in VARCHAR2 , verzendland_output out VARCHAR2)是什么意思?
  • 仍然得到相同的错误如果我为它传递值,我尝试执行 land_naam('S');

标签: sql oracle plsql oracle11g


【解决方案1】:

修改你的代码如下:

Create or replace procedure land_naam(klantnummer_input in VARCHAR2)
AS 
verzendland_output VARCHAR2(2000);
BEGIN
SELECT land into verzendland_output from klanten 
WHERE klantnummer = klantnummer_input;
END land_naam;

执行过程时,既然有输入参数,就提供一个。

e.g. EXECUTE land_naam('S');

【讨论】:

    【解决方案2】:

    由于您的过程同时指定输入和输出参数,因此您必须在调用过程时指定它们:

    要在 SQLPlus 中声明一个保存输出的变量,使用简单

    SQL> var out varchar2(100)
    

    然后使用输入和输出参数调用存储过程(否则您没有指定正确的参数数量)

    SQL> exec land_naam('yourinput', :out)
    

    最后,打印输出变量的内容

    SQL> print out
    

    【讨论】:

    • 我不知道你到底是什么意思
    猜你喜欢
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 2016-11-30
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多