Oracle——無法在查詢中執行 DML 操作


今天在調用Oracle Function遇到一個異常

這是我的函數(為了再現隨手寫的)

create or replace function test_f(id varchar2)   return varchar2 is
    Result   varchar2(100);
begin

  insert into sfcs_temp_17109
  (sn)values(id);

 commit;
  return result;
end test_f;

解決方法:增加PRAGMA AUTONOMOUS_TRANSACTION自治事務介紹

 

create or replace function test_f(id varchar2)   return varchar2 is
    Result   varchar2(100);
   PRAGMA AUTONOMOUS_TRANSACTION;
begin
  insert into sfcs_temp_17109
  (sn)values(id);

  commit;
  return result;
end test_f;

然后又遇到第二個問題

function如下:

create or replace function test_f(id varchar2) return varchar2 is
  Result varchar2(100);
  PRAGMA AUTONOMOUS_TRANSACTION;
  MSD_PN VARCHAR2(50);
begin
  BEGIN
    select didbar into MSD_PN from t_did where diddid = ID;
    IF MSD_PN IS NOT NULL THEN
      RESULT := 'ERROR:' || ID || '在系統中不存在!';
      RETURN RESULT;
    END IF;
  END;
  insert into sfcs_temp_17109 (sn) values (id);
  commit;
  return result;
end;

Return Result commit或者Rollback

create or replace function test_f(id varchar2) return varchar2 is
  Result varchar2(100);
  PRAGMA AUTONOMOUS_TRANSACTION;
  MSD_PN VARCHAR2(50);
begin
  BEGIN
    select didbar into MSD_PN from t_did where diddid = ID;
    IF MSD_PN IS NOT NULL THEN
      RESULT := 'ERROR:' || ID || '在系統中不存在!';
      commit;
      RETURN RESULT;
    END IF;
  END;
  insert into sfcs_temp_17109 (sn) values (id);
  commit;
  return result;
end;

增加commit后即可正常使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM