-1

删除输入变量中的 & 后,我试图将值保存在表中。当我在 dbms_ouput.put_line 中打印变量的值时,我得到了输出。但是当我将变量的值保存到数据库时,什么都没有更新。下面的代码是一个简化版本。在 oracle 11g 上使用 toad 10.6

FUNCTION UPDATE_ADDRESS(ADDRESS VARCHAR2,
                    P_USER  VARCHAR2)
RETURN VARCHAR2 IS
    RetVal                VARCHAR2(32767);
    V_ADDRESS   VARCHAR2(32767);
BEGIN
    DBMS_OUTPUT.put_line('ADDRESS ::=' || ADDRESS); --this prints
    V_ADDRESS := REPLACE(ADDRESS, '&', '');
    DBMS_OUTPUT.put_line('V_ADDRESS ::=' || V_ADDRESS); --so does this

    UPDATE ADDRESS_TABLE
    SET ADDRESS = SUBSTR(V_ADDRESS, 1, 255) --this column does not get updated
    WHERE USER = P_USER;
    COMMIT;
END;
/
4

1 回答 1

1

您的列名 USER 与同名的内部函数冲突,请将其设为 ADDRESS_TABLE.USER

@狼

tmp_func 有 DML 操作,没有 PRAGMA。只是工作....

create table tmp1 as select 1 n from dual;

create or replace function tmp_func return number is
v_n number;
begin
  update tmp1 set n = n + 1
  returning n into v_n;
  return v_n;
end;
/

declare
v_n number;
begin
v_n := tmp_func();
dbms_output.put_line(v_n);
end;
/

输出:

table TMP1 created.
FUNCTION TMP_FUNC compiled
anonymous block completed

2
于 2014-06-04T19:55:09.247 回答