菜单树的设计与实现实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、问题描述

创建table保存具有层次结构的菜单树信息,记录菜单的ID,名称,描述,父菜单(可为空)和可用性(enable/disable),菜单的深度无限制。

二、实验内容及步骤

1.首先以sysdba身份登录数据库,命令为:conn / as sysdba

2.创建用户表空间menu,数据文件为:d:\menu.dbf,大小20M,相关命令如下:

create tablespace menu

datafile 'd:\menu.dbf' size 20M;

3.创建新用户yjmin,默认表空间为新创建的menu表空间,相关命令如下:

create user yjmin

identified by yjmin

default tablespace menu;

4.为新创建用户yjmin授权connect和resource角色;

5.以新创建的用户yjmin登录数据库,命令为:conn yjmin/yjmin;

6.创建序列,自动生成菜单ID,相关命令如下:

create sequence id_seq

start with 1

increment by 1;

7.创建表menu_tab保存菜单信息:

create table menu_tab

(id number primary key,

name varchar2(50) not null,

description varchar2(200),

parent_menu varchar2(50),

available varchar2(10) not null);

8.向表menu_tab中插入菜单数据,以示例数据插入,并提交插入的数据。

9.打开PL/SQL输出信息,命令为:set serveroutput on;

10.创建函数获取菜单ID:

create or replace function get_menu_id

(v_name varchar2)

return number

as

专业计算机科学与技术(数据库方向)年级班级

课程名称大型数据库实验课程实验项目菜单树的设计与实现

实验类型□验证□设计□综合实验时间 2012年5月11日

实验指导老师实验评分

result_id number;

begin

select id into result_id from menu_tab where name=v_name;

return result_id;

exception

when no_data_found then

return 0;

when too_many_rows then

return -1;

end get_menu_id;

/

11.根据输入的菜单名称,输出菜单ID:

declare

v_input menu_%type;

v_menu menu_%type;

begin

v_input := '&菜单名称';

select name into v_menu from menu_tab where name=v_input;

dbms_output.put_line(chr(10)||'该菜单名称的ID如下:');

dbms_output.put_line(chr(10)||'菜单名称:'||v_menu||' '||'ID:'||get_menu_id(v_menu));

exception

when no_data_found then

dbms_output.put_line(chr(10)||'该菜单名称不存在!');

when others then

dbms_output.put_line(chr(10)||'程序出现异常,已结束!');

end;

/

该语句块的运行结果如下:

专业计算机科学与技术(数据库方向)年级班级

课程名称大型数据库实验课程实验项目菜单树的设计与实现

实验类型□验证□设计□综合实验时间 2012年5月11日

实验指导老师实验评分

12.根据输入的菜单名称,输出祖先菜单结构:

declare

type indextable is table of menu_tab.parent_menu%type index by binary_integer;

v_parents indextable;

v_input menu_tab.parent_menu%type;

v_temp menu_tab.parent_menu%type;

v_counter binary_integer :=1;

begin

v_input := '&菜单名称';

v_parents(v_counter) := v_input;

v_temp := v_input;

while v_temp is not null loop

select parent_menu into v_temp from menu_tab where name=v_parents(v_counter);

v_counter := v_counter+1;

v_parents(v_counter) := v_temp;

end loop;

v_counter := v_counter-1;

dbms_output.put_line(chr(10)||'该菜单名称的祖先菜单结构如下:');

dbms_output.put(chr(10));

loop

if v_counter != 1 then

dbms_output.put(v_parents(v_counter)||' - ');

else

dbms_output.put_line(v_parents(v_counter));

end if;

v_counter := v_counter-1;

exit when v_counter = 0;

end loop;

exception

when no_data_found then

dbms_output.put_line(chr(10)||'该菜单名称不存在!');

when others then

dbms_output.put_line(chr(10)||'程序出现异常,已结束!');

end;

/

该语句块的运行结果如下:

相关文档
最新文档