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