相关疑难解决方法(0)

是否存在类似于DETERMINISTIC的PL/SQL编译指示,但是对于单个SQL SELECT的范围?

在SQL SELECT语句中,我想执行一个对该SELECT语句范围具有确定性的函数(或者事务也可以):

select t.x, t.y, my_function(t.x) from t
Run Code Online (Sandbox Code Playgroud)

许多值t.x都是相同的,因此Oracle可以省略一次又一次地调用相同的函数,以加快速度.但是如果我将函数标记为DETERMINISTIC,则可以在此查询的多次执行之间缓存结果.我无法使用的原因DETERMINISTIC是因为my_function使用了不时更改的配置参数.

我可以使用其他任何关键字吗?是否有任何我应该注意的问题(内存问题,并发性等)?或者也许任何其他技巧,例如分析函数,每个t.x值只调用一次函数(没有重大的性能影响)?

oracle optimization plsql deterministic stored-functions

10
推荐指数
1
解决办法
1318
查看次数

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

我在里面有以下内容package,它给了我一个错误:

ORA-14551: cannot perform a DML operation inside a query
Run Code Online (Sandbox Code Playgroud)

代码是:

DECLARE 
    CURSOR F IS
        SELECT ROLE_ID 
        FROM ROLE 
        WHERE GROUP = 3 
        ORDER BY GROUP ASC;

BEGIN
FOR R IN F LOOP

DELETE FROM my_gtt_1;
COMMIT;

 INSERT INTO my_gtt_1
  ( USER, role, code, status )
(SELECT 
 trim(r.user), r.role, r.code, MAX(status_id)
FROM 
  table1 r, 
  tabl2 c
WHERE 
      r.role = R.role
  AND r.code IS NOT NULL
  AND c.group = 3
  GROUP BY 
  r.user, r.role, r.code);

  SELECT c.role,
                  c.subgroup,
                  c.subgroup_desc, …
Run Code Online (Sandbox Code Playgroud)

oracle plsql temp-tables

3
推荐指数
1
解决办法
3万
查看次数