【问题标题】:expression 'string' cannot be used as an assignment target -SQL PLUS表达式“字符串”不能用作赋值目标 -SQL PLUS
【发布时间】:2014-04-11 19:12:45
【问题描述】:

我编写了以下程序,该程序是匿名的,并从字符串中删除所有元音,但是当我调用它时出现错误:我已遵循类似帖子中给出的建议,但没有求助: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

【问题讨论】:

  • 由于您没有更改传递的参数,因此无需将其定义为IN OUT。只需IN 就足够了,然后你也可以传递一个常量
  • 我喜欢程序名:)

标签: oracle plsql sqlplus procedure


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-04-16
      • 1970-01-01
      • 2018-08-28
      • 1970-01-01
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 1970-01-01
      相关资源
      最近更新 更多