大型数据库实验报告

更新时间:2024-01-07 13:18:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

目录

实验三 ...................................................................... 1 实验四 ...................................................................... 7

实验三

1、创建一个PROFILE文件pTester,设置锁定用户的登录失败次数为3次,会话的总计连接时间60分钟,口令可用天数30天。

create profile Ptester limit FAILED_LOGIN_ATTEMPTS 3 CONNECT_TIME 60

PASSWORD_LOCK_TIME 30;

2、查询目前所有的环境资源文件及其限制。 select profile,resource_name,limit from dba_profiles order by profile

3、创建一个新用户Tester(C##Tester),密码为Tester,缺省表空间是CAP_ts。在CAP_ts表空间中可以使用2M空间,指定环境资源文件为pTester。 create user Tester identified by Tester default tablespace CAP_ts quota 2M on CAP_ts profile pTester;

4、将创建会话的权限授权给用户Tester(C##Tester)。 grant create session to Tester;

5、将角色RESOURCE指派给用户Tester。 grant resource to Tester;

6、查看用户Tester(C##Tester)具有的所有系统权限。

select privilege from DBA_SYS_PRIVS where grantee='TESTER';

7.新用户Tester(C##Tester)创建一个表Tester_customers,表的结构与CAP数据库中的表Customers一致。将在该表上进行SELECT和DELETE的权限授予用户CAPUser(假设CAPUser是已存在的数据库CAP中所有对象的创建者)。 create table TESTER_CUSTOMERS as select * from CUSTOMERS; create user CAPUser identified by CAPUser;

grant select,update on TESTER_CUSTOMERS to CAPUser;

8、查看与用户Tester(C##Tester)相关的所有对象授权信息。 select * from USER_TAB_PRIVS where grantee='TESTER';

......

9.用命令行方式将表Orders中一季度的订单记录导出到文件expOrders1.dmp中。

10、用命令行方式将所有的顾客记录导出到文件expCustomers.dmp中。

11.将用户CAPUser所属的表Customers(已导出到文件expCustomers.dmp中),导入账户Tester(C##Tester)。

实验四

1、CAP数据库中的表Customers、Products和Agents中都有一个列city。写一个存储过程,根据指定的城市名和表名,查询该表中列city的值等于该指定城市的所有记录。例如,用户输入城市名Duluth和表名Customers,则显示在Duluth的所有顾客的信息。要求采用动态SQL实现。

set SERVEROUTPUT ON; DECLARE

sql_stmt VARCHAR2(500); type v_CursorVar is ref cursor; v_table v_CursorVar ;

v_city Customers.city%type:='Duluth'; v_Customers Customers%rowtype; v_Products Products%rowtype; v_Agents Agents%rowtype; BEGIN

sql_stmt:='select * from '||v_table||' where city=:v_city';

open v_table for sql_stmt using v_city; if v_table='Customers' then LOOP

fetch v_table into v_Customers; exit when v_table%notfound;

dbms_output.put_line('顾客编号:'||v_Customers.cid||' '||'顾客姓名:'||v_Customers.cname||' '||'折扣:'||v_Customers.disent); END LOOP;

elsif v_table='Products' then LOOP

fetch v_table into v_Products; exit when v_table%notfound;

dbms_output.put_line('产品编号:'||v_Products.pid||' '||'产品姓名:'||v_Products.pname||' '||'数量:'||v_Products.quantity||' '||'价格:'||v_Products.price); END LOOP;

elsif v_table='Agents' then LOOP

fetch v_table into v_Agents; exit when v_table%notfound;

dbms_output.put_line('代理商编号:'||v_Agents.aid||' '||'姓名:'||v_Agents.aname||' '||'比例:'||v_Agents.precent); END LOOP; else

raise_application_error(-20000,'Input must be \ close v_table; end if; END;

结果:

v_city varchar2(20):='Duluth'; v_table varchar2(50):='CUSTOMERS';

v_city varchar2(20):='Duluth'; v_table varchar2(50):='Products';

v_city varchar2(20):='Duluth'; v_table varchar2(50):='Products';

2、写一个存储过程,根据指定的城市,查询并逐行显示该城市所有顾客的编号、名称和折扣。要求采用动态SQL,使用EXECUTE IMMEDIATE批量绑定方式实现。

set SERVEROUTPUT ON; DECLARE

sql_stmt VARCHAR2(500); type t_cid IS

TABLE OF Customers.cid%TYPE INDEX BY BINARY_INTEGER; type t_cname IS

TABLE OF Customers.cname%TYPE INDEX BY BINARY_INTEGER; type t_disent IS

TABLE OF Customers.disent%TYPE INDEX BY BINARY_INTEGER; v_cid_tab t_cid; v_cname_tab t_cname; v_disent_tab t_disent;

v_city Customers.city%type:='Duluth'; BEGIN

sql_stmt:='select cid,cname,disent from Customers where city=:city';

EXECUTE IMMEDIATE sql_stmt BULK COLLECT INTO v_cid_tab, v_cname_tab,

v_disent_tab USING v_city; FOR i IN 1..v_cid_tab.COUNT LOOP

dbms_output.put_line('顾客的编号:'||v_cid_tab(i)||' '||'名称:'||v_cname_tab(i)||' '||'

折扣:'||v_disent_tab(i)); END LOOP; END;

3.利用提供的GlobalToyz数据库的建库和建表的脚本,完成下列任务: (1)在SQL SERVER上通过运行脚本创建GlobalToyz数据库。

(2)利用Powerdesigner连接到SQL SERVER数据库上,通过逆向工程还原GlobalToyz数据库的逻辑模型和物理模型。

逻辑模型:

本文来源:https://www.bwwdw.com/article/8x6x.html

Top