楼主: 〇〇

是DM不兼容oracle pl/sql写法还是我写错了

[复制链接]
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
11#
 楼主| 发表于 2013-9-12 13:37 | 只看该作者
pkmonster 发表于 2013-9-12 13:29
SQL>CREATE OR REPLACE PROCEDURE PRIMEY0(U IN NUMBER)
2   AS
3   V_FLAG BOOLEAN;

我又试了一次,这次/不粘贴,用手录入,也好了,可能我粘贴过去的/不认

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
12#
 楼主| 发表于 2013-9-12 14:28 | 只看该作者
tanyangxf 发表于 2013-9-12 14:18
复制的最后不能包含 /,加了就会报错,/这个必须手动敲,不能复制进去

为什么要这么实现

使用道具 举报

回复
论坛徽章:
6
2012新春纪念徽章
日期:2012-01-04 11:53:292013年新春福章
日期:2013-02-25 14:51:24林肯
日期:2013-09-12 15:57:33优秀写手
日期:2013-12-18 09:29:09慢羊羊
日期:2015-03-04 14:51:352015年新春福章
日期:2015-03-06 11:57:31
13#
发表于 2013-9-12 14:52 | 只看该作者
/是DISQL命令, 服务器不能识别。 一起粘贴过去,DISQL可能把它一起发到服务器去了。

这个可以改一下。

使用道具 举报

回复
论坛徽章:
6
2012新春纪念徽章
日期:2012-01-04 11:53:292013年新春福章
日期:2013-02-25 14:51:24林肯
日期:2013-09-12 15:57:33优秀写手
日期:2013-12-18 09:29:09慢羊羊
日期:2015-03-04 14:51:352015年新春福章
日期:2015-03-06 11:57:31
14#
发表于 2013-9-13 08:53 | 只看该作者
可以查看这个过程编译后的"汇编码":

1. 先执行一下:
SQL>primey0(1000);
PL/SQL 过程已成功完成
已用时间: 13.483(毫秒). 执行号:9.

2. 查缓存计划号:

SQL>select cache_item, sqlstr from v$cachepln  where sqlstr like '%FLAG%';

行号       CACHE_ITEM
---------- --------------------
           SQLSTR
           ------------------------------------------------------------------
1          250168440
            DECLARE
V_FLAG BOOLEAN;
BEGIN
FOR I IN 2 .. U LOOP
V_FLAG = TRUE;
FOR J IN 2 .. TRUNC(POWER(I, 0.5)) LOOP
IF MOD(I, J) = 0 THEN V_FLAG = FALSE;
EXIT ;
END IF ;
END LOOP ;
IF V_FLAG = TRUE THEN  NULL;
END IF ;
END LOOP ;
END;

已用时间: 1.991(毫秒). 执行号:10.

3. 找到缓存号, cache_item 为 250168440, 然后做个plndump:

SQL>alter session set events 'immediate trace name plndump level 250168440, dump_file ''c:\temp\pln.trc''';
操作已执行
已用时间: 6.062(毫秒). 执行号:11.

4. 察看pln.trc
*** 2013-09-13 08:49:33.673000*** start dump the infos of pln[250168440].
        npln cache infos:
        scp cache
            type: 0
            over flow: 0
            disable: 0
            fixed number: 3
            ts value: 949
        type: 1
        hash val: 83887103
        schid: 150994945
        user id: 50331649
        obj id: 83887103
        --rs cache
        rs can cache: 0
        rs cache size: 0
        talbes' size: 0
SQL_STR:
DECLARE
V_FLAG BOOLEAN;
BEGIN
FOR I IN 2 .. U LOOP
V_FLAG = TRUE;
FOR J IN 2 .. TRUNC(POWER(I, 0.5)) LOOP
IF MOD(I, J) = 0 THEN V_FLAG = FALSE;
EXIT ;
END IF ;
END LOOP ;
IF V_FLAG = TRUE THEN  NULL;
END IF ;
END LOOP ;
END;

PLN_CMD:
        0        push        1
        6        load        2
        12        sloc        2
        16        push        2
        22        larg        1        9
        28        cast        7 from 9
        34        sloc        2
        38        nop
        40        lloc        1        2
        46        lloc        2        2
        52        jmpg        334
        60        push        0
        66        load         true
        72        sloc        1
        76        push        3
        82        load        2
        88        sloc        2
        92        push        4
        98        load        5.0E-1
        130        cast        11 from 9
        136        lloc        1        2
        142        cast        11 from 7
        148        invi        133
        152        invi        148
        156        cast        7 from 11
        162        sloc        2
        166        nop
        168        lloc        3        2
        174        lloc        4        2
        180        jmpg        284
        188        lloc        3        2
        194        cast        8 from 7
        200        lloc        1        2
        206        cast        8 from 7
        212        invi        129
        216        load        0
        222        cast        8 from 7
        228        jmpne        258
        236        push        0
        242        load         false
        248        sloc        1
        252        jmp        284
        258        nop
        260        push        3
        266        load        1
        272        +=        0        7
        278        jmp        166
        284        nop
        286        lloc        0        1
        292        load         true
        298        jmpne        308
        306        nop
        308        nop
        310        push        1
        316        load        1
        322        +=        0        7
        328        jmp        38
        334        nop
        336        mret        0

end dump the infos of pln[250168440].

使用道具 举报

回复
论坛徽章:
43
现任管理团队成员
日期:2011-05-07 01:45:08ITPUB元老
日期:2012-09-12 14:50:28版主5段
日期:2014-06-11 02:21:31阿斯顿马丁
日期:2013-11-19 10:38:16祖母绿
日期:2012-11-06 12:43:12路虎
日期:2013-11-20 11:37:53雪佛兰
日期:2013-09-05 13:28:25ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512015中国数据库技术大会纪念徽章
日期:2015-04-24 16:04:24秀才
日期:2015-05-26 13:32:07
15#
发表于 2013-9-13 13:26 | 只看该作者
pkmonster 发表于 2013-9-13 08:53
可以查看这个过程编译后的"汇编码":

1. 先执行一下:

这个很高级啊

使用道具 举报

回复
论坛徽章:
6
2012新春纪念徽章
日期:2012-01-04 11:53:292013年新春福章
日期:2013-02-25 14:51:24林肯
日期:2013-09-12 15:57:33优秀写手
日期:2013-12-18 09:29:09慢羊羊
日期:2015-03-04 14:51:352015年新春福章
日期:2015-03-06 11:57:31
16#
发表于 2013-9-13 14:57 | 只看该作者
pln 表示PLAN。

这段目标码中有好几个CAST指令,说明有反复的类型转换,如果能适当改写,比如都用int类型, 性能还会快一点。

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
17#
 楼主| 发表于 2013-9-13 23:26 | 只看该作者
pkmonster 发表于 2013-9-13 14:57
pln 表示PLAN。

这段目标码中有好几个CAST指令,说明有反复的类型转换,如果能适当改写,比如都用int类型 ...

sqrt 和 power 0.5 哪个能用整数参数,结果类型是什么

使用道具 举报

回复
论坛徽章:
6
2012新春纪念徽章
日期:2012-01-04 11:53:292013年新春福章
日期:2013-02-25 14:51:24林肯
日期:2013-09-12 15:57:33优秀写手
日期:2013-12-18 09:29:09慢羊羊
日期:2015-03-04 14:51:352015年新春福章
日期:2015-03-06 11:57:31
18#
发表于 2013-9-14 09:01 | 只看该作者
〇〇 发表于 2013-9-13 23:26
sqrt 和 power 0.5 哪个能用整数参数,结果类型是什么

这两个确实不能用整数参数, 没注意仔细看.

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表