代码之家  ›  专栏  ›  技术社区  ›  COOLBEANS

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

  •  3
  • COOLBEANS  · 技术社区  · 11 年前

    我编写了以下过程,该过程旨在匿名,并从字符串中删除所有元音,但当我调用它时,我收到了一个错误:我遵循了类似帖子中给出的建议,但没有起到任何作用: 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 回复  |  直到 8 年前
        1
  •  8
  •   Noel    11 年前

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

    DECLARE
       param   NVARCHAR2 (20) := 'hahahahaha';
    BEGIN
       disemvowel (param);
    END;
    /
    
        2
  •  1
  •   elifekiz    8 年前

    生成新的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;