表达式'string'不能用作赋值目标-SQL PLUS

时间:2014-03-08 14:15:33

标签: oracle plsql sqlplus procedure

我编写了以下程序,该程序是匿名的并从字符串中删除所有元音,但是当我调用它时出现错误:我已经按照类似帖子中给出的建议,但它没有求助:Oracle PLS-00363: expression '' cannot be used as an assignment target

SQL> CREATE OR REPLACE PROCEDURE disemvowel (string IN OUT NVARCHAR2)
2  IS
3  BEGIN
4  DBMS_OUTPUT.PUT_LINE(translate(string,'euioa',''));
5  END disemvowel;
6  /

Procedure created.

到目前为止一切顺利,但现在我称之为:

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

2 个答案:

答案 0 :(得分:7)

您的程序有IN OUT参数。因此,在调用该过程时,您应该supply a variable,以便它可以保存过程返回的值。您无法直接提供值,因为该过程无法修改该值。

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

答案 1 :(得分:0)

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

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;
相关问题