天下之事,必先处之难,而后易之。
君临
知我者谓我心忧,不知我者谓我何求

1、Oracle存储过程实例

CREATE OR REPLACE PROCEDURE proc_page
(
       p_tblName IN VARCHAR,
       p_fields IN VARCHAR,
       p_order IN VARCHAR,
       p_pageSize IN INT := 10,
       p_pageIndex IN INT DEFAULT 1,
       p_rowCount OUT INT,
       p_returnDesc OUT VARCHAR,
       p_sel_cur OUT sys_refcursor   /*在oracle中不能像mssql那样直接返回结果集查询结果必须以游标形式返回*/
)
AS
       /*AS 到 Begin部分用于声明我们在存储过程中可能用到的变量*/
       v_sqlCount VARCHAR(200);
       v_sql VARCHAR(300);
       v_fields VARCHAR(300);
BEGIN
       IF(length(trim(p_tblName)) = 0) THEN
               p_returnDesc := '表名必须输入!';
               RETURN; 
       END IF;
      
       v_sqlCount := 'select count(*) from '||p_tblName;
       /**动态执行sql语句并将执行结果保存到一个变量中*/
       execute immediate v_sqlCount INTO p_rowCount;
      
       /**执行分页查询*/
       IF(TRIM(p_fields)='*') Then
                v_fields := p_tblName||'.'||p_fields;
       END IF;
       IF(TRIM(p_fields)!='*') Then
                v_fields := p_fields;
       END IF;
      
       v_sql := 'select * from (select '||v_fields||',rownum rn from '||p_tblName||' where rownum <= ';
       v_sql := v_sql || (p_pageIndex*p_pageSize) || ' ) tmp where tmp.rn > ';
       v_sql := v_sql || (p_pageIndex-1)*p_pageSize;
       DBMS_OUTPUT.put_line(v_sql);
       OPEN p_sel_cur FOR v_sql;  /**将查询结果放入游标中*/
END;
2、MySQl存储过程实例----(对比Oracle)

drop procedure if exists proc_page;

/**更改执行标识符,默认情况是分号,此处我们将其更改为$$*/
delimiter $$

CREATE PROCEDURE proc_page
(
 p_tblName VARCHAR(255),
 p_fields VARCHAR(255),
 p_order VARCHAR(255),
 p_pageSize INT,
 p_pageIndex INT,
 p_where VARCHAR(300),
 OUT p_returnDesc VARCHAR(500),
 OUT p_rowCount INT
)
BEGIN
      /** 参数检查*/
 IF(LENGTH(LTRIM(RTRIM(p_tblName))) = 0) THEN
  SET p_returnDesc :=  '请输入表名!';
 END IF;

 /**统计记录总数*/
  SET @count_sql  := concat('select count(*)  into @t_rowcount  from ',p_tblName);
 IF(LENGTH(LTRIM(RTRIM(p_where))) > 0) THEN
  SET @count_sql := concat(@count_sql,'  where  ',p_where);
 END IF;

 /**执行动态语句*/
 PREPARE stmt_count From @count_sql;
 EXECUTE stmt_count;
 DEALLOCATE PREPARE stmt_count;

 /**将用户变量的值赋给输出变量*/
 SET p_rowCount := @t_rowcount;

 /**获取分页数据*/
 SET @sql := concat('select  ',p_fields,'  from ',p_tblName);
 IF(LENGTH(LTRIM(RTRIM(p_where))) > 0) THEN
  SET @sql := concat(@sql,'  where  ',p_where);
 END IF;
 SET @sql := concat(@sql,' limit ',(p_pageIndex-1)*p_pageSize,' , ',p_pageSize);
 
 PREPARE stmt_page FROM @sql;
 execute stmt_page;
 DEALLOCATE PREPARE stmt_page;

END;

$$

delimiter ;


 

posted on 2011-06-28 14:07  boonya  阅读(750)  评论(0编辑  收藏  举报

我有佳人隔窗而居,今有伊人明月之畔。
轻歌柔情冰壶之浣,涓涓清流梦入云端。
美人如娇温雅悠婉,目遇赏阅适而自欣。
百草层叠疏而有致,此情此思怀彼佳人。
念所思之唯心叩之,踽踽彳亍寤寐思之。
行云如风逝而复归,佳人一去莫知可回?
深闺冷瘦独自徘徊,处处明灯影还如只。
推窗见月疑是归人,阑珊灯火托手思忖。
庐居闲客而好品茗,斟茶徐徐漫漫生烟。

我有佳人在水之畔,瓮载渔舟浣纱归还。
明月相照月色还低,浅近芦苇深深如钿。
庐山秋月如美人衣,画堂春阁香气靡靡。
秋意幽笃残粉摇曳,轻轻如诉画中蝴蝶。
泾水潺潺取尔浇园,暮色黄昏如沐佳人。
青丝撩弄长裙翩翩,彩蝶飞舞执子手腕。
香带丝缕缓缓在肩,柔美体肤寸寸爱怜。
如水之殇美玉成欢,我有佳人清新如兰。
伊人在水我在一边,远远相望不可亵玩。