plsqlfunction
⑴ oracle中自定义的函数怎么编译
可在第三方软件中,如pl/sql中编译。
1、打开pl/sql软件并登录到指定数据库。
2、点击左上方像纸片的按钮,然后点击“sql窗口”
⑵ PlSql如何新建Function函数
PL/SQLDeveloper是一个集成开发环境,专门开发面向Oracle数据库的应用。PL/SQL也是一种程序语言,叫做过程化SQL语言(ProceralLanguage/SQL)。我们赶紧来看看,PlSql如何新建Function函数。
1我们在PlSql软件的文件菜单中,点击一下即可看到新建。
2此时,我们选择程序窗口就能开始设置。
3然后我们在新建下,就能看到Function函数。
4但是,我们需要指定Function函数的名称。
5名称设置后,我们还能设置Parametes的属性。
6再然后就可以设置ReturnType返回类型。
⑶ 我写了一个pl/sql,主要是用游标遍历一张表.
1.检查一下游标C1中查询语句的执行计划,看看是不是耗时很多。10万数据并不多,而且你做了函数索引。所以我滚纳滑猜这个不是问大腊题产生的原因;
2.检查一下你的两层循环到底有多少次,是不茄薯是次数过多。目测不会超过10万吧。所以应该也不是问题关键;
*.以上两点可以通过使用plsql developer工具debug该过程时,点击create profiler report,然后执行,再从debug界面的profiler分页查看。
3.你的过程中 update cyd 和 fhz,执行过程的时候,有没有什么其他程序再多两个表做update,有没有锁表。cup使用率是否高;
4.通常不要在查询a表的循环中对a表update。你这里查询Cyd内部就对Cyd进行了update,这样有问题。我曾经遇到过,程序会锁住。
*.对于你的程序,给你个建议,把一下这段代码写成一个function,在由表中查寻结果中直接调用:
FOR i IN 1 .. Lengthb(Yw_Old) LOOP
Tmp := Substr(Yw_Old, i, 1);
IF (Tmp = 'A') THEN
Yw_New := Yw_New || 'B3';
ELSIF (Tmp = 'B') THEN
Yw_New := Yw_New || 'B3';
ELSIF (Tmp = 'C') THEN
Yw_New := Yw_New || 'C1';
ELSIF (Tmp = 'D') THEN
Yw_New := Yw_New || 'D1';
END IF;
END LOOP;
*.假设function叫做fun_pack,游标改成这样:
CURSOR C1 IS
SELECT Cyh,
fun_pack(Yw),
Pzyw,
Djyw
FROM Cyd
WHERE Substr(Slsj, 1, 4) = Yearc;