<delect id="j97xz"></delect>
    <b id="j97xz"><del id="j97xz"><em id="j97xz"></em></del></b>

    <ol id="j97xz"></ol>

      <ins id="j97xz"></ins>
        <output id="j97xz"><menuitem id="j97xz"><video id="j97xz"></video></menuitem></output>
        <noframes id="j97xz"><delect id="j97xz"></delect>

          <output id="j97xz"></output>
          <mark id="j97xz"></mark>
              <output id="j97xz"><cite id="j97xz"><noframes id="j97xz">
                查看: 444|回复: 12

                [转载] (转载)98-老虎刘和chatGPT pk了一把SQL改写优化

                [复制链接]
                论坛徽章:
                518
                奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
                跳转到指定楼层
                1#
                发表于 2023-3-19 02:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
                本帖最后由 newkid 于 2023-3-19 03:07 编辑

                转载于oracle_tigerliu公众号, 请大家订阅学习!
                老虎刘谈oracle性能优化
                Weixin IDoracle_tigerliu
                About Feature个人wx:ora_service 老虎刘,原oracle深圳研发中心RWP成员,后转入oracle售后高服白金客户服务团队任优化组组长,专职性能优化,主要为亚太地区白金客户提供性能优化服务,目前是独立顾问. 公众号菜单有培训材料.
                微信群里有人讨论, 能不能让chatgpt试试sql优化, 刚好今天帮客户看了一个sql, 做了改写优化. 于是把原始sql发给了群友:
                原始SQL:

                select *
                from t_app_online_his2 a
                where  
                (
                     LINE_ID is null
                     or
                (
                  exists ( select 1
                   from t_app_online_his2 b
                   where line_type = 2 and a.CREATE_DATE = b.CREATE_DATE
                   and (line_id = 'all' or (line_id = '123'  and belong_id = 'xxx' ))
                   )
                  and exists ( select 1
                   from t_app_online_his2 b
                   where line_type = 4 and a.CREATE_DATE = b.CREATE_DATE
                   and (line_id = 'all' or (line_id = '333'  and belong_id = 'xxx' ))
                  )
                  and exists ( select 1
                   from t_app_online_his2 b
                   where line_type = 5 and a.CREATE_DATE = b.CREATE_DATE
                   and (line_id = 'all' or line_id in ('1000002415000001'))
                  )
                  and exists ( select 1
                   from t_app_online_his2  b
                   where line_type = 6 and a.CREATE_DATE = b.CREATE_DATE
                   and (line_id = 'all' or line_id in ('abc' ))
                  )
                  and exists ( select 1
                   from t_app_online_his2 b
                   where line_type = 7 and a.CREATE_DATE = b.CREATE_DATE
                   and (line_id = 'all' or line_id in ('00'))
                  )
                )
                );
                很快, 群友就把chatGPT的SQL改写结果发出来了, 不但给出了改写方法, 同时把建表语句和生成测试数据的insert语句也一起给出来了, 对于这个结果, 我只能快速给出两个字母:NB !    (同时生成测试表和测试数据,跟人是思维还是很相似的)
                chatGPT-4的回复:

                --建表(mysql/oracle 通用):
                CREATE TABLE t_app_online_his2 (
                  id INT PRIMARY KEY,
                  line_type INT,
                  line_id VARCHAR(20),
                  belong_id VARCHAR(20),
                  CREATE_DATE DATE
                );

                --生成测试数据(被老虎刘改成了oracle语法, 原来是mysql的语法):
                INSERT INTO t_app_online_his2 values(1, 2, '123', 'xxx', date'2022-01-01');
                INSERT INTO t_app_online_his2 values(2, 4, '333', 'xxx', date'2022-01-01');
                INSERT INTO t_app_online_his2 values(3, 5, '1000002415000001', NULL, date'2022-01-01');
                INSERT INTO t_app_online_his2 values(4, 6, 'abc', NULL, date'2022-01-01');
                INSERT INTO t_app_online_his2 values(5, 7, '00', NULL, date'2022-01-01');

                INSERT INTO t_app_online_his2 values(6, 2, '123', 'xxx', date'2022-01-02');
                INSERT INTO t_app_online_his2 values(7, 4, '333', 'xxx', date'2022-01-02');
                INSERT INTO t_app_online_his2 values(8, 5, '1000002415000001', NULL, date'2022-01-02');
                INSERT INTO t_app_online_his2 values(9, 6, 'abc', NULL, date'2022-01-02');

                INSERT INTO t_app_online_his2 values(10, 2, '123', 'xxx', date'2022-01-03');
                INSERT INTO t_app_online_his2 values(11, 4, '333', 'xxx', date'2022-01-03');
                INSERT INTO t_app_online_his2 values(12, 5, '1000002415000001', NULL, date'2022-01-03');

                INSERT INTO t_app_online_his2 values(13, 2, 'all', 'xxx', date'2022-01-04');
                INSERT INTO t_app_online_his2 values(14, 4, 'all', 'xxx', date'2022-01-04');
                INSERT INTO t_app_online_his2 values(15, 5, 'all', NULL, date'2022-01-04');
                INSERT INTO t_app_online_his2 values(16, 6, 'all', NULL, date'2022-01-04');
                INSERT INTO t_app_online_his2 values(17, 7, 'all', NULL, date'2022-01-04');
                commit;
                --还给出了说明:这些测试数据包含几种不同的情况,包括满足查询条件的数据(例如2022-01-01)和不满足查询条件的数据(例如2022-01-02和2022-01-03)。您可以根据这些测试数据来验证优化后的SQL语句是否符合您的预期。注意,这些测试数据是为了演示目的而提供的,实际数据可能会有所不同。
                --chatGPT改写后的SQL:

                SELECT a.*
                FROM t_app_online_his2 a
                JOIN (
                    SELECT CREATE_DATE
                    FROM t_app_online_his2
                    WHERE (line_type = 2 AND (line_id = 'all' OR (line_id = '123' AND belong_id = 'xxx')))
                        OR (line_type = 4 AND (line_id = 'all' OR (line_id = '333' AND belong_id = 'xxx')))
                        OR (line_type = 5 AND (line_id = 'all' OR line_id IN ('1000002415000001')))
                        OR (line_type = 6 AND (line_id = 'all' OR line_id IN ('abc')))
                        OR (line_type = 7 AND (line_id = 'all' OR line_id IN ('00')))
                    GROUP BY CREATE_DATE
                    HAVING COUNT(DISTINCT line_type) = 5
                ) b ON a.CREATE_DATE = b.CREATE_DATE
                WHERE LINE_ID IS NULL
                    OR (
                        a.line_type IN (2, 4, 5, 6, 7)
                        AND (
                            a.line_id = 'all'
                            OR (
                                (a.line_type = 2 AND a.line_id = '123' AND a.belong_id = 'xxx')
                                OR (a.line_type = 4 AND a.line_id = '333' AND a.belong_id = 'xxx')
                                OR (a.line_type = 5 AND a.line_id IN ('1000002415000001'))
                                OR (a.line_type = 6 AND a.line_id IN ('abc'))
                                OR (a.line_type = 7 AND a.line_id IN ('00'))
                            )
                        )
                    );

                上面是群友用chatGPT-4 生成的, 另一个群友用bing生成的结果就比较差了,改写后的SQL与原来没啥变化, 下面也列一下:
                bing生成的改写(水平不行, 所以一开始就比较谦虚):

                --回复原文:我不是一个专业的SQL开发者,所以我不能保证我的回答是完全正确的。但是,根据我从网络上搜索到的信息,你可以尝试以下几个方法来优化你的SQL查询123:使用JOIN代替子查询,这样可以减少重复扫描同一张表。使用EXISTS代替IN,这样可以避免全表扫描。为常用的过滤条件创建索引,这样可以加快查询速度。限制SELECT语句中返回的列数,只返回需要的列,这样可以减少数据传输量。基于以上建议,你可以尝试将你的SQL查询改写为:

                select a.*
                from t_app_online_his a
                join t_app_online_his b on a.CREATE_DATE = b.CREATE_DATE
                where  
                    (
                     LINE_ID is null
                     or
                (
                  b.line_type = 2
                   and (b.line_id = 'all' or (b.line_id = '123'  and b.belong_id = 'xxx' ))
                   and exists ( select 1
                   from t_app_online_his c
                   where c.line_type = 4 and c.CREATE_DATE = b.CREATE_DATE
                   and (c.line_id = 'all' or (c.line_id = '333'  and c.belong_id = 'xxx' ))
                  )
                  and exists ( select 1
                   from t_app_online_his d
                   where d.line_type = 5 and d.CREATE_DATE = b.CREATE_DATE
                   and (d.line_id = 'all' or d.line_id in ('1000002415000001'))
                  )
                  and exists ( select 1
                   from t_app_online_his e
                   where e.line_type = 6 and e.CREATE_DATE = b.CREATE_DATE
                   and (e.line_id = 'all' or e.line_id in ('abc' ))
                  )
                  and exists ( select 1
                   from t_app_online_his f
                   where f.line_type = 7 and f.CREATE_DATE = b.CREATE_DATE
                   and (f.line_id = 'all' or f.line_id in ('00'))
                  )
                )
                );

                因为bing改写前后差别不大, 这里就没有再继续关注这个写法.
                我用chatGPT-4的测试用例测试了一下, 改写前后的结果集确实相同, 刚想对这个人工智能再次膜拜, 却发现一个问题, 用我生成的测试数据来验证chatGPT-4这个SQL, 改写后得到的结果集与原SQL不同, 也就是说, chatGPT-4的这个改写是不等价的, 因为它自己生成的测试数据不够完整.   
                如果我在chatgpt生成的测试数据集中再增加一条记录:

                INSERT INTO t_app_online_his2 values(18, 8, '00', NULL, date'2022-01-01');
                这条记录用原始sql是可以返回的, 但是chatGPT-4改写后的SQL没有返回. 不等价的改写, 性能提升再高也是没有意义的.
                下面再来看看我的改写方法:


                --老虎刘的改写方法:
                select * from
                (
                select a.*,
                count(distinct case when (line_type = 2 and  (line_id = 'all' or (line_id = '123'  and belong_id = 'xxx' ))) then 1
                                    when (line_type = 4 and  (line_id = 'all' or (line_id = '333'  and belong_id = 'xxx' ))) then 2
                                    when (line_type = 5 and  (line_id = 'all' or line_id in ('1000002415000001'))) then 3
                                    when (line_type = 6 and  (line_id = 'all' or line_id in ('abc'))) then 4
                                    when (line_type = 7 and  (line_id = 'all' or line_id in ('00'))) then 5 end
                      ) over (partition by create_date) as cnt
                from t_app_online_his2 a
                )where cnt=5 or line_id is null;

                我的这个改写方法, 只需要1次表扫描,不需要关联. 最主要的是, 这个改写方法与原SQL是等价的. 这也是对SQL优化改写的基本要求.
                原SQL需要6次表扫描+5次关联;
                chatGPT-4 需要2次表扫描+1次关联; (虽然性能比原SQL有提高,但是不等价)
                虽然目前chatgpt的改写还不那么尽如人意, 但是它的思路和方法也确实惊到了我, 假以时日, 不知道它能发展到什么程度.  有群友说让我训练它, 想想还是算了, 还是让水平更高的人来做吧.  希望它能严谨点, 慢慢学, 还能给留给广大从业者几年活路.




                论坛徽章:
                518
                奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
                2#
                 楼主| 发表于 2023-3-19 03:29 | 只看该作者
                本帖最后由 newkid 于 2023-3-19 03:46 编辑

                我来替chatGPT改作业, 它的改写已经很厉害了,最厉害之处是能够提炼出HAVING COUNT(DISTINCT line_type) = 5这个条件:
                SELECT a.*
                FROM t_app_online_his2 a
                left JOIN (  ------------- 这里改成 LEFT JOIN
                    SELECT CREATE_DATE
                    FROM t_app_online_his2
                    WHERE (line_type = 2 AND (line_id = 'all' OR (line_id = '123' AND belong_id = 'xxx')))
                        OR (line_type = 4 AND (line_id = 'all' OR (line_id = '333' AND belong_id = 'xxx')))
                        OR (line_type = 5 AND (line_id = 'all' OR line_id IN ('1000002415000001')))
                        OR (line_type = 6 AND (line_id = 'all' OR line_id IN ('abc')))
                        OR (line_type = 7 AND (line_id = 'all' OR line_id IN ('00')))
                    GROUP BY CREATE_DATE
                    HAVING COUNT(DISTINCT line_type) = 5
                ) b ON a.CREATE_DATE = b.CREATE_DATE
                WHERE A.LINE_ID IS NULL
                    OR b.CREATE_DATE is not null;  ------- 只要连接上就是非空,原写法的判断都是在a表上,反而是错的

                   
                老刘的写法也要稍微改一下才和原SQL等价:
                where cnt=5 and CREATE_DATE is not null  ----- 加个条件
                    or line_id is null ;   

                另外,我在实践中发现,用分析函数来取代GROUP BY和减少表访问次数,并不是一定能更优。当数据集很大的时候,分析函数的WINDOW BUFFER/SORT, 比起HASH GROUP BY + JOIN 更慢。

                使用道具 举报

                回复
                论坛徽章:
                0
                3#
                发表于 2023-3-19 10:12 | 只看该作者
                It would be interesting to compare how Oracle re-write and/or execute based on different data distributions in all related tables (and also if some indexes available or not).  I do not see there is any way chatGPT can obtain the stats without loging on the real database.

                使用道具 举报

                回复
                论坛徽章:
                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
                4#
                发表于 2023-3-19 10:19 | 只看该作者
                newkid 发表于 2023-3-19 03:29
                我来替chatGPT改作业, 它的改写已经很厉害了,最厉害之处是能够提炼出HAVING COUNT(DISTINCT line_type) =  ...

                你和它多聊几次,它就学会了,你就不是**厉害的了

                使用道具 举报

                回复
                论坛徽章:
                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
                5#
                发表于 2023-3-19 10:21 | 只看该作者
                上面的**是唯 一,被itpub自动转换了

                使用道具 举报

                回复
                论坛徽章:
                518
                奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
                6#
                 楼主| 发表于 2023-3-19 22:01 | 只看该作者
                jihuyao 发表于 2023-3-19 10:12
                It would be interesting to compare how Oracle re-write and/or execute based on different data distri ...

                Oracle 也会做一些改写但是很有限。这个AI的改写很类似人类的经验,它连表结构都不知道就能反推出CREATE TABLE和INSERT脚本,比本论坛很多提问者都强了。

                使用道具 举报

                回复
                论坛徽章:
                518
                奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
                7#
                 楼主| 发表于 2023-3-19 22:03 | 只看该作者
                〇〇 发表于 2023-3-19 10:19
                你和它多聊几次,它就学会了,你就不是**厉害的了

                我也试图来调教一下,不知何故,它并没有先前表现得那么厉害,不知道老虎群里那人是怎么跟它对话的。

                can you rewrite this sql to improve the performance? it's Oracle database:
                select *
                from t_app_online_his2 a
                where  
                (
                     LINE_ID is null
                     or
                (
                  exists ( select 1
                   from t_app_online_his2 b
                   where line_type = 2 and a.CREATE_DATE = b.CREATE_DATE
                   and (line_id = 'all' or (line_id = '123'  and belong_id = 'xxx' ))
                   )
                  and exists ( select 1
                   from t_app_online_his2 b
                   where line_type = 4 and a.CREATE_DATE = b.CREATE_DATE
                   and (line_id = 'all' or (line_id = '333'  and belong_id = 'xxx' ))
                  )
                  and exists ( select 1
                   from t_app_online_his2 b
                   where line_type = 5 and a.CREATE_DATE = b.CREATE_DATE
                   and (line_id = 'all' or line_id in ('1000002415000001'))
                  )
                  and exists ( select 1
                   from t_app_online_his2  b
                   where line_type = 6 and a.CREATE_DATE = b.CREATE_DATE
                   and (line_id = 'all' or line_id in ('abc' ))
                  )
                  and exists ( select 1
                   from t_app_online_his2 b
                   where line_type = 7 and a.CREATE_DATE = b.CREATE_DATE
                   and (line_id = 'all' or line_id in ('00'))
                  )
                )
                );

                ----------- 答复:
                One possible approach to improve the performance of this SQL query is to use indexes on the relevant columns in the t_app_online_his2 table. Here are the steps to do this:

                CREATE INDEX idx_t_app_online_his2_line_create
                ON t_app_online_his2(line_type, create_date);

                Create a separate index on line_id if it is frequently used in other queries.

                CREATE INDEX idx_t_app_online_his2_line_id
                ON t_app_online_his2(line_id);

                With these indexes in place, the database should be able to efficiently execute the query.

                Another approach is to rewrite the query to eliminate the exists clauses and replace them with joins. Here is an example of how this could be done:

                SELECT DISTINCT a.*
                FROM t_app_online_his2 a
                LEFT JOIN t_app_online_his2 b2 ON a.create_date = b2.create_date AND b2.line_type = 2
                LEFT JOIN t_app_online_his2 b4 ON a.create_date = b4.create_date AND b4.line_type = 4
                LEFT JOIN t_app_online_his2 b5 ON a.create_date = b5.create_date AND b5.line_type = 5
                LEFT JOIN t_app_online_his2 b6 ON a.create_date = b6.create_date AND b6.line_type = 6
                LEFT JOIN t_app_online_his2 b7 ON a.create_date = b7.create_date AND b7.line_type = 7
                WHERE a.line_id IS NULL OR
                (
                    (a.line_id = 'all' OR (a.line_id = '123' AND a.belong_id = 'xxx')) AND b2.line_id IS NOT NULL
                    AND (a.line_id = 'all' OR (a.line_id = '333' AND a.belong_id = 'xxx')) AND b4.line_id IS NOT NULL
                    AND (a.line_id = 'all' OR a.line_id IN ('1000002415000001')) AND b5.line_id IS NOT NULL
                    AND (a.line_id = 'all' OR a.line_id IN ('abc')) AND b6.line_id IS NOT NULL
                    AND (a.line_id = 'all' OR a.line_id IN ('00')) AND b7.line_id IS NOT NULL
                );

                This query replaces the exists clauses with left outer joins and uses the IS NOT NULL condition to check if there is a match. It also uses the DISTINCT keyword to eliminate duplicate rows that may be generated by the joins.

                使用道具 举报

                回复
                论坛徽章:
                518
                奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
                8#
                 楼主| 发表于 2023-3-19 22:06 | 只看该作者
                〇〇 发表于 2023-3-19 10:21
                上面的**是唯 一,被itpub自动转换了

                这是一个敏感词大国,盛产各种敏感词,琳琅满目花式繁多,总有一款适合你。
                经典回顾:
                阿Q“先前阔”,见识高,而且“真能做”,本来几乎是一个“完人”了,但可惜他体质上还有一些缺点。最恼人的是在他头皮上,颇有几处不知于何时的癞疮疤。这虽然也在他身上,而看阿Q的意思,倒也似乎以为不足贵的,因为他讳说“癞”以及一切近于“赖”的音,后来推而广之,“光”也讳,“亮”也讳,再后来,连“灯”“烛”都讳了。

                使用道具 举报

                回复
                论坛徽章:
                0
                9#
                发表于 2023-3-21 11:40 | 只看该作者
                newkid 发表于 2023-3-19 22:01
                Oracle 也会做一些改写但是很有限。这个AI的改写很类似人类的经验,它连表结构都不知道就能反推出CREATE TA ...

                In terms of performance, chatGPT re-write at most is rule based (maybe better than Oracle rule-based?).  So it could be currently the best general approach.  In reality, there are many variations for specific case which may need too much deep studies to include all of them.

                使用道具 举报

                回复
                论坛徽章:
                0
                10#
                发表于 2023-3-21 12:00 | 只看该作者
                jihuyao 发表于 2023-3-21 11:40
                In terms of performance, chatGPT re-write at most is rule based (maybe better than Oracle rule-based ...

                If I remember corretly, Oracle has 3 levels of setup at database level to optimize pl/sql programs.  So it would be intersting to check how chapGPT re-write a simple pl/sql procedure compared to Oracle (execute differently underneath) .  
                A simplest one is like below,

                set timing on

                v :=0 ;
                for i in 1.1000*1000*1000 loop
                v := v+1 ;
                v := v-1 ;
                end loop

                output v

                Next one,

                v:=0 ;
                for i in 1..1000*1000*1000 loop
                v:=v+i ;
                end loop

                output v

                If both passed,

                Try this one,

                v:=0 ;
                for i in 1..1000*1000*1000 loop
                if i<>500 then v:=v+1 ; end ;   --do not bother for syntax error
                end loop ;

                output v

                There can be endless equal-simple ways to test chatGPT for its intellegent level and see where it is.



                使用道具 举报

                回复

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

                本版积分规则 发表回复

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