【问题标题】:How to call an update table that is inside in the procedure for a function in PLSQL?如何为PLSQL中的函数调用过程内部的更新表?
【发布时间】:2019-05-21 14:14:29
【问题描述】:

这是我的情况:

我有一个像这样更新表的过程:

PROCEDURE UPDATE_MODEL AS
STR VARCHAR2(10000);

BEGIN

STR:='UPDATE SAE_MODEL_TABLE.....'
EXECUTE IMMEDIATE STR;

我需要做一个函数来调用这个UPDATE SAE_MODEL_TABLE...

我用这段代码试过

FUNCTION GET_MODEL_TABLE  RETURN CLOB AS
STR4 VARCHAR2(50);
count_table number;

BEGIN

str4:='select count(1) from SAE_MODEL_TABLE;
execute immediate str4 into count_table;

IF count_table <> 0 then
UPDATE_MODEL ;

我有这个错误:

ORA-14551: 无法在查询中执行 DML 操作,

我知道那是指添加更新...

【问题讨论】:

  • 为什么要用动态sql来统计行数或者更新?一般来说,函数的最佳实践是不使用 DML 集合(插入、更新、删除)。

标签: function plsql procedure


【解决方案1】:

我不知道你为什么使用动态SQL,但如果你真的想这样做,它可能看起来像这样

PROCEDURE UPDATE_MODEL AS
  STR VARCHAR2(10000);
BEGIN

  STR:='UPDATE SAE_MODEL_TABLE.....'
  EXECUTE IMMEDIATE STR;
end;


FUNCTION GET_MODEL_TABLE  RETURN CLOB AS
  STR4 VARCHAR2(50);
  count_table number;
  my_clob clob;
BEGIN

  str4:='select count(1) from SAE_MODEL_TABLE';
  execute immediate str4 into count_table;

  IF count_table <> 0 then
    UPDATE_MODEL() ;
  end if;

  return my_clob;
end;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    相关资源
    最近更新 更多