12
返回列表 发新帖
楼主: zhuo_yang

动态pl/sql的问题——大虾帮帮忙!

[复制链接]
论坛徽章:
0
11#
 楼主| 发表于 2001-11-16 14:39 | 只看该作者
  感谢 flytiger!!
  很管用!

使用道具 举报

回复
论坛徽章:
0
12#
 楼主| 发表于 2001-11-16 14:49 | 只看该作者
  “while ....  loop
    ...
  end loop中使用多个cursor怎么老是只能执行一次呢?”

  原来是误会,错在v_betweenmonths:=months_between(v_ym_end,v_ym_begin);写成了v_betweenmonths:=months_between(v_ym_begin,v_ym_end);

  跟大家分享一下我的错误和改正,也算是我的贡献吧。
  感谢各位大虾!!

使用道具 举报

回复
论坛徽章:
0
13#
 楼主| 发表于 2001-11-16 15:31 | 只看该作者
  还有问题:下面的为什么整个循环中v_num值都不变?

v_ym_begin:=to_date(p_ym_begin,'YYYY-MM-DD');
        DBMS_OUTPUT.PUT_LINE(v_ym_begin);
              v_ym_end:=to_date(p_ym_end,'YYYY-MM-DD');
              v_datevalue:=v_ym_begin;
              v_betweenmonths:=months_between(v_ym_end,v_ym_begin);
              v_months:=0;
              DBMS_OUTPUT.PUT_LINE(v_betweenmonths);
              while v_months <= v_betweenmonths loop
                      if(v_months > 0) then
                      v_datevalue:=add_months(v_datevalue,1);
                      end if;
                      dbms_output.enable;
                              DBMS_OUTPUT.PUT_LINE(to_char(v_datevalue));
                              DBMS_OUTPUT.PUT_LINE(to_char(v_months));
                      v_months:=v_months+1;
                      delete  from tb_insmannum where last_day(to_date(y_month))=last_day(to_date(v_datevalue));
                      commit;
                     
                      v_cursor2:=DBMS_SQL.OPEN_CURSOR;  
          v_cursor3:=DBMS_SQL.OPEN_CURSOR;
         
         DBMS_SQL.PARSE(v_cursor2,v_insertstmt,DBMS_SQL.V7);
         DBMS_SQL.PARSE(v_cursor3,v_sestmt2,DBMS_SQL.V7);
                     
                      DBMS_SQL.BIND_ARRAY(v_cursor2,':imi_value',v_id,1,v_numrows);
      
          DBMS_SQL.BIND_ARRAY(v_cursor3,':insman_value',v_name,1,v_numrows);
                     
                DBMS_SQL.BIND_VARIABLE(v_cursor3,':date_value',v_datevalue);
                DBMS_SQL.BIND_VARIABLE(v_cursor2,':ym_value',v_datevalue);
                DBMS_SQL.BIND_ARRAY(v_cursor2,':insname_value',v_name);
             
                DBMS_SQL.DEFINE_COLUMN(v_cursor3,1,v_num);
             
                v_dummy2:=DBMS_SQL.EXECUTE(v_cursor3);

                v_numrows2:=DBMS_SQL.FETCH_ROWS(v_cursor3);

                DBMS_SQL.COLUMN_VALUE(v_cursor3,1,v_num);
             
                DBMS_SQL.BIND_VARIABLE(v_cursor2,':in_value',v_num);
             
                v_dummy2:=DBMS_SQL.EXECUTE(v_cursor2);         
               
                        DBMS_SQL.CLOSE_CURSOR(v_cursor2);
            DBMS_SQL.CLOSE_CURSOR(v_cursor3);
                     
              end loop;

使用道具 举报

回复
论坛徽章:
0
14#
发表于 2001-11-16 20:36 | 只看该作者
1, 在oracle中单引号需要特殊处理才能加入到字符串中,故使用'''',四个单引号表示一个拼成的单引号。但你的%不能执行,就不明白了。好像没道理。

2, 在sql*plus中,dbms_output.put_line的输出需要先指定:
   set serveroutput on

使用道具 举报

回复
论坛徽章:
0
15#
 楼主| 发表于 2001-11-17 11:43 | 只看该作者
  simon:
    你的方法还是很好的,只不过:insman_value必须在单引号之间,所以我在|| '''' || '%' || 后加了|| '''' || '||'||':insman_value'||'||'||''''||……就能执行了!

使用道具 举报

回复
论坛徽章:
60
蛋疼蛋
日期:2012-03-22 20:34:08马上有钱
日期:2014-10-29 08:09:52马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11凯迪拉克
日期:2013-11-12 19:29:26
16#
发表于 2001-11-17 13:44 | 只看该作者
我好象记得在想输入一个单引号的时候,只需要连续打连个单引号就行了
比如
SQL> select 'aaaa''bbb' from dual;

'AAAA''BBB'
-----------
aaaa'bbb

在变量中赋值同样可以这样

使用道具 举报

回复

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

本版积分规则 发表回复

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