如何为PLSQL中的函数调用过程内部的更新表?
Posted
技术标签:
【中文标题】如何为PLSQL中的函数调用过程内部的更新表?【英文标题】:How to call an update table that is inside in the procedure for a function in 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 集合(插入、更新、删除)。 【参考方案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;
【讨论】:
以上是关于如何为PLSQL中的函数调用过程内部的更新表?的主要内容,如果未能解决你的问题,请参考以下文章