Oracle 表达式';字符串';不能用作分配目标-SQL PLUS

Oracle 表达式';字符串';不能用作分配目标-SQL PLUS,oracle,plsql,sqlplus,procedure,Oracle,Plsql,Sqlplus,Procedure,我编写了以下过程,该过程旨在匿名并删除字符串中的所有元音,但当我调用它时,我得到了一个错误:我遵循了类似帖子中给出的建议,但没有帮助: 到目前为止还不错,但现在我称之为: SQL> BEGIN 2 disemvowel('hahahahaha'); 3 END; 4 / 错误消息显示: disemvowel('hahahahaha'); * ERROR at line 2: ORA-06550: line 2, column 12: PLS-00363: ex

我编写了以下过程,该过程旨在匿名并删除字符串中的所有元音,但当我调用它时,我得到了一个错误:我遵循了类似帖子中给出的建议,但没有帮助:

到目前为止还不错,但现在我称之为:

SQL> BEGIN
2  disemvowel('hahahahaha');
3  END;
4  /
错误消息显示:

disemvowel('hahahahaha');
           *
ERROR at line 2:
ORA-06550: line 2, column 12:
PLS-00363: expression 'hahahahaha' cannot be used as an assignment target
ORA-06550: line 2, column 1:
PL/SQL: Statement ignored

您的过程具有IN OUT参数。因此,在调用过程时,您应该对其进行调用,以便它可以保存过程返回的值。不能直接提供值,因为过程无法修改该值

DECLARE
   param   NVARCHAR2 (20) := 'hahahahaha';
BEGIN
   disemvowel (param);
END;
/

生成新的VARCHAR2类型变量以分配输入字符串


由于您没有更改传递的参数,因此无需将其定义为
IN-OUT
。只需在中输入
就足够了,然后您还可以传递一个常量。我喜欢过程名称:)
DECLARE
   param   NVARCHAR2 (20) := 'hahahahaha';
BEGIN
   disemvowel (param);
END;
/
PROCEDURE sp_name(
ps_list              IN VARCHAR2,
...
write here other IN's and OUT's
...
)
AS

ps_list_copy          VARCHAR2 (32000); 

BEGIN
ps_list_copy := ps_list;
...
do your works with ps_list_copy
...
...
EXCEPTION WHEN OTHERS THEN
....
END sp_name;