`

实现转贴功能的store procedure

    博客分类:
  • web
阅读更多

数据库结构
board表--论坛板块表
theme表--论坛主题表
message表--帖子主表
reply表--回帖表

其中
board表记录了messagetable和replytable的表名(说明这两个表是可变的)。
theme表记录了msgnumber,replynumber,即该主题下的帖子数量和回帖数量,newmsgid最新帖id.themeid是主题的编号,它对应一个板块区号(id),通过themeid可以查找到对应的板块id。
message和reply是动态从board里取出的表名,记录了帖子属于那个主题(themeid)和那个板块(id)。

转贴需求
1 转贴主要的操作是对message和reply表的主题号进行更改,其他的是辅助操作,比如板块会随主体区的改变而改变。
2 theme表的数据可能也会改变,当转变前后板块的message,reply表不同时,就会发生这种情况。
3 board表只用来做查询,转贴操作不对它改动。

具体操作
经过分析,我们需要传进来的参数有三个:
帖子号msgid,帖子原属主题区号srcid,帖子将转向的主题区号thmid

create or replace package body erictest is

procedure chgmeg(
msgid number,
srcid number,
thmid number
)
is
m_msgid varchar2(20);
myid number;--板块区号
rplycount number;--回帖数
messageTable1 varchar2(40);--主帖原表
replyTable1 varchar2(40);--回帖原表
messageTable2 varchar2(40);--主帖新表
replyTable2 varchar2(40);--回帖新表
mynewmsgid number;--最新帖子号
mysql varchar2(1000);--中间变量,用于sql操作
begin
m_msgid:=to_char(msgid);
messageTable1:=getMessageTable(srcid);
replyTable1:=getReplyTable(srcid);
messageTable2:=getMessageTable(thmid);
replyTable2:=getReplyTable(thmid);
select id into myid from home_forumtheme where themeid=thmid;--主题对应的板块号
select count(*) into rplycount from home_forumreply where replyto=msgid;--该帖子有多少条回复

--[[帖子主表]]
if (messageTable1=messageTable2) then--如果原板块和现板块共用一张表,则更新
mysql:='update '||messageTable1||' set themeid='||to_char(thmid)||',id='||to_char(myid)||' where sequenceid='||m_msgid;
EXECUTE IMMEDIATE mysql;
else--如果原板块和现板块用不同的表,则插入新表,删除原表;还要计算主题表里的相关数据
mysql:='insert into '||messageTable2||'(themeid,id) value('||to_char(thmid)||','||to_char(myid)||') where sequenceid='||m_msgid;
EXECUTE IMMEDIATE mysql;
mysql:='delete * from '||messageTable1||' where sequenceid='||m_msgid||';';
EXECUTE IMMEDIATE mysql;
mysql:='select * from (select newmsgid from home_forumtheme t where themeid='||to_char(thmid)||' order by posttime desc) where rownum=1';
EXECUTE IMMEDIATE mysql into mynewmsgid;--取得主题的最新帖子号
if(mynewmsgid=msgid) then --如果操作的帖子是最新的,则取次新的
mysql:='select * from (select newmsgid from home_forumtheme t where themeid='||to_char(thmid)||' order by posttime desc) where rownum=2';
EXECUTE IMMEDIATE mysql into mynewmsgid;
end if;
update home_forumtheme set msgnumber=msgnumber-1,newmsgid=mynewmsgid where srcid=thmid;
update home_forumtheme set msgnumber=msgnumber+1,newmsgid=mynewmsgid where themeid=thmid;
end if;

--[[回帖表]]
if (replyTable1=replyTable2) then--如果原板块和现板块共用一张表,则更新
mysql:='update '||replyTable1||' set themeid='||to_char(thmid)||',id='||to_char(myid)||' where replyto='||m_msgid;
EXECUTE IMMEDIATE mysql;
else
mysql:='insert into '||replyTable2||'(themeid,id) value('||to_char(thmid)||','||to_char(myid)||') where sequenceid='||m_msgid;
EXECUTE IMMEDIATE mysql;
mysql:='delete * from '||replyTable1||' where sequenceid='||m_msgid;
EXECUTE IMMEDIATE mysql;
update home_forumtheme set replynumber=replynumber-rplycount where srcid=thmid;
update home_forumtheme set replynumber=replynumber+rplycount where themeid=thmid;
end if;
end;

-- 取得当前主题主贴表
FUNCTION getMessageTable(p_themeId NUMBER) RETURN VARCHAR2
IS
tableName VARCHAR2(40);
BEGIN
 SELECT a.messageTable INTO tablename FROM home_forumboard a,home_forumtheme b
 WHERE b.themeid=p_themeId AND a.id=b.id;
 RETURN tablename;
END;
-- 取得当前主题回复表
FUNCTION getReplyTable(p_themeId NUMBER) RETURN VARCHAR2
IS
tablename VARCHAR2(40);
BEGIN
 SELECT a.replytable INTO tablename FROM home_forumboard a,home_forumtheme b
 WHERE b.themeid=p_themeId AND a.id=b.id;
 RETURN tablename;
END;
end erictest;

分享到:
评论

相关推荐

    jquery的转贴功能实现

    在描述中提到的"jquery的转贴功能实现",通常涉及到以下几个步骤: 1. **创建分享按钮**:在网页上放置一个或多个用于触发分享动作的按钮,可以是图片、文本链接或其他HTML元素。这些按钮通常会绑定jQuery事件监听...

    易语言源码动网转贴.rar

    易语言的源码是其程序设计的核心部分,包含了程序的逻辑结构、功能实现以及数据处理等关键信息。"动网转贴"这个主题可能指的是在论坛或者社交网络中实现帖子转发或分享的功能。 动网转贴的源码可能涉及到以下几个...

    易语言动网转贴.rar

    "动网转贴"可能是基于易语言编写的一个功能模块或者工具,用于在论坛或者网站之间转移帖子数据。由于压缩包文件名为“易语言动网转贴.rar”,我们可以推测这可能是一个软件开发资源,包含了一些源代码、教程或者是...

    转贴C#实现关机,注销,重启

    下面我们将详细探讨如何使用C#来实现这些功能。 首先,为了调用Windows API,我们需要引入`System.Runtime.InteropServices`命名空间,这样可以使用`DllImport`特性来导入API函数。具体来说,以下是一些关键的API...

    论坛转贴 v1.0 JS版-源码.zip

    【标题】"论坛转贴 v1.0 JS版-源码.zip" 提供的是一个基于JavaScript的论坛转贴功能的源代码实现。JS版通常指的是使用JavaScript编程语言编写的版本,这表明该软件可能主要用于网页端,利用浏览器的JavaScript引擎...

    易语言动网转贴

    "易语言动网转贴"是指使用易语言编写的一段代码或程序,主要用于在动网上实现帖子的转换或者迁移。动网可能是一个论坛或社区平台,转贴功能则是将某个地方的帖子复制到另一个地方,保持其内容完整。 在这个源码中,...

    动易系统的论坛转贴工具

    《动易系统的论坛转贴工具详解与应用》 在互联网信息交流日益频繁的今天,论坛作为用户互动的重要平台...通过深入理解和熟练运用,我们可以更好地利用论坛转贴工具,推动内容的广泛传播,实现互联网信息的共享与繁荣。

    动网转贴.zip易语言项目例子源码下载

    对于学生来说,它可以作为毕业设计的蓝本,帮助你完成具有实际功能的应用程序。而对于小团队,这个项目可以作为快速开发原型,节省开发时间,提升效率。 总的来说,“动网转贴”项目实例是一个全面展示易语言应用的...

    动网转贴.e.rar

    动网是中国早期知名的网络论坛软件之一,提供了丰富的社区功能,允许用户发帖、回帖、互动等。这个压缩包可能是从动网论坛导出的数据,用于数据迁移、备份或者分析。 【描述】由于提供的描述仅为"动网转贴.e.rar",...

    转贴ReYoPrint (锐洋WEB打印控件)是一款实现网页套打的专用工具

    这个控件主要实现对打印参数的控制,ReYoPrint使用户通过JavaScript脚本可以控制分页,页眉页脚,页边距,打印方向,自定义纸张,直接打印,弹出打印对话框再打印,预览,放缩打印,成批打印,套打等功能 ...

    动易系统的论坛转贴工具 -ASP源码.zip

    开发者或者有兴趣学习ASP的人可以研究这个源码,理解如何在ASP环境中处理用户交互、数据库操作、论坛数据结构以及实现转贴功能的具体步骤。 压缩包内的“内容来自存起来软件站www.cqlsoft.com.txt”可能是一个文本...

    BFC UBB转贴器

    由于现在流行的转贴工具都是基于浏览器的,转换速度比较慢,还得打开浏览器才能使用(同时受到浏览器版本限制)。 <br> 而这个小程序则完全不依赖于浏览器,以BFC采集器的UBB转换模块为基础,转换速度超快,...

    电子政务-导电泡棉转贴装置.zip

    3. **转贴装置的设计原理**:可能包括转贴装置的设计理念,如何实现快速安装、拆卸,以及如何确保在操作过程中不对电子设备造成损害。 4. **案例分析**:可能列举了若干成功应用导电泡棉转贴装置于电子政务系统的...

    论坛专用屏蔽干扰码转贴工具

    此外,转贴功能的添加,使得用户在处理完干扰码后可以轻松地进行复制和粘贴,无论是分享到同一论坛的不同板块,还是转移到其他论坛,都能够保持内容的完整性和可读性。 在界面设计方面,开发者显然考虑到了用户操作...

    一键转帖功能插件 for 帝国CMS v1.0.rar

    "copyto.js" 是一个JavaScript文件,它的主要作用是在前端实现一键转帖的功能,可能包含事件监听、内容提取、以及与服务器交互的逻辑。"copyto.php" 是后端处理脚本,它接收来自前端的请求,处理数据,例如验证用户...

    Html处理软件、转贴工具(源代码)

    去除Html中的干扰码等(样例中以轻之国度的干扰码为例) 配置文件语法: 方法类型(整数) 最大匹配长度(整数) 字符串1(删除开头) 字符串2(删除结尾) 方法类型: 1:删除单行 2:删除行与行之间的

    Convert X 转贴工具插件 for Discuz!7.0.rar

    系统中,以及如何操作转贴功能。这些步骤可能包括上传文件、在后台管理界面激活插件、设置转换规则等。在实际应用中,确保遵循文档中的步骤,以避免任何潜在的问题。 "ConvertX" 文件可能是插件的主要执行文件或...

    东度极品论坛转贴工具

    东度极品论坛转贴工具东度极品论坛转贴工具

    史上最全的转贴代码

    【标题】:“史上最全的转贴代码”通常指的是一个包含大量可复用代码片段或解决方案的集合,这些代码可能来自于各种编程语言,旨在帮助开发者快速解决问题或者作为学习参考。这样的资源对于初学者和经验丰富的程序员...

Global site tag (gtag.js) - Google Analytics