好文档 - 专业文书写作范文服务资料分享网站

21天学通Oracle 课后答案(第三版)

天下 分享 时间: 加入收藏 我要投稿 点赞

4)重新利用mike为bill分配create table权限

SQL> grant create table to bill;

Grant succeeded.

·241·

5)利用用户bill创建新的数据表bill_test

SQL> create table bill_test(id number);

Table created.

3.利用with grant option选项,为mike分配表system.customer的select权限的同时,允许其将权限传播给用户bill。

1)利用用户system以及with grant option选择为mike分配system.users的select权限

SQL> grant select on customer to mike with grant option;

Grant succeeded.

2)利用用户mike为bill分配表system.customer的select权限

SQL> grant select on system.customer to bill;

Grant succeeded.

3)利用用户bill查询表system.customer

SQL> select * from customer;

CUSTOMER_ID CUSTOMER_NAME CUSTOMER_PHONE CUSTOMER_ADDRESS ------------------------ ----------------------------- ------------------------------- -------------------------------- 5 耐克010-22798156 朝阳路98号 2 阿迪达斯021-3467521 南京路54号 3 特步0755-2278945 彩田路198号 4 安踏020-2278945 工业大道87号

另外,我们需要注意利用with admin option和with grant option的区别。

with admin option用户分配系统权限,而with grant option用户分配对象权限。

系统权限传播出去之后,即使传播者的权限被收回,也不会影响到它已传播出去的权限。 对象权限则不同,传播者的权限被收回之后,它传播出去的权限,也将尽数收回。

第13章 Oracle数据类型

1.在数据库中创建表test_data(idnumber, name varchar(20), “Name” varchar2(20), “name”varchar2(20)),并查询表中数据。

1)利用create table命令创建数据表test_data,并向其中插入测试数据

SQL> create table test_data(id number, name varchar2(20), \

Table created.

SQL> insert into test_data values(1, 'test', 'test', 'test');

精品文档

· 242·

1 row created.

SQL> commit;

Commit complete.

2)尝试利用select * from test_data来查询表中数据

SQL> select * from test_data;

ID NAME Name name ---------- -------------------- -------------------- ------------- 1 test test test

3)从查询结果可以看出,双引号可以作为列名的标识。

2.在表test_data中,增加三列:test_char char(10), test_varchar varchar(10), test_varchar2 varchar2(10),分别向其中插入固定字符串“data”,查看三者的长度。

1)为表test_data增加三列test_char char(10), test_varchar(10)和test_char2(10)

SQL> alter table test_data add(test_char char(10), test_varchar varchar(10), test_varchar2 varchar2(10));

Table altered.

2)向表test_data中插入测试数据

SQL> insert into test_data(id, test_char, test_varchar, test_varchar2) values(2, 'data', 'data', 'data');

1 row created.

3)查看test_char、test_varchar和test_varchar2的长度

SQL> select id, length(test_char), length(test_varchar), length(test_varchar2) from test_data where id = 2;

ID LENGTH(TEST_CHAR) LENGTH(TEST_VARCHAR) LENGTH(TEST_VARCHAR2) ---------- ---------------------------------- ------------------------------------- -------------------------------------- 2 10 4 4

4)分析三列的长度可知,char类型提供的长度是固定的,而varchar类型的实际长度则是可变的。 3.向表test_data插入一条新的记录,要求test_varchar2列的数据为“Tom&Jerry”。 1)尝试向表test_data直接插入“Tom&Jerry”。

SQL> insert into test_data(id, test_varchar2) values (3, 'Tom&Jerry');

2)此时,Oracle将要求我们输入变量Jerry的值

SQL> insert into test_data(id, test_varchar2) values (3, 'Tom&Jerry'); Enter value for jerry:

这是因为,“&”被当做变量的前导符来处理,“Tom&Jerry”被处理为字符串“Tom”和名为“Jerry”的变量。

3)可以首先关闭会话的define选项,然后向数据库插入特殊字符“&”

SQL> set define off;

SQL> insert into test_data(id, test_varchar2) values (3, 'Tomc&Jerry');

1 row created.

SQL> select * from test_data;

ID NAME Name name TEST_CHAR TEST_VARCH TEST_VARCH 精品文档

---------- ---------- ---------- ---------- ------------------- ------------------- ------------------- 3 Tomc&Jerry

·243·

第14章 Oracle中的函数与表达式

1.Rtrim()、ltrim()和trim()函数默认情况下删除空白符,其实,还可以利用它们删除指定字符。其使用语法为:rtrim(originalString, deleteChar)。尝试利用它们分别删除字符串“000123456000”中的“0”。

1)同时使用rtrim()和ltrim()函数,删除字符串“000123456000”中的“0”

SQL> select ltrim(rtrim('000123456000', '0'), '0') result from dual;

RESULT ------ 123456

2)仅利用trim()函数删除字符串“000123456000”中的“0”

SQL> select trim('0' from '000123456000') result from dual;

RESULT ------ 123456

2.创建表sale_summary(id number, product varchar2(50), sale_quantity number, sale_percent varchar2(10))来存储2011年各个厨具厂商的销售情况。查询sale_percent不是以“%”结尾的数据(代表非法数据)

1)创建测试数据表sale_summary

SQL> create table sale_summary(id number, product varchar2(50), sale_quantity number, sale_percent varchar2(10));

Table created.

2)插入测试数据

SQL> insert into sale_summary values (1, '老板烟机', 340000, '12%');

1 row created.

SQL> insert into sale_summary values (2, '华帝烟机', 170000, '6');

1 row created.

SQL> insert into sale_summary values (3, '樱花烟机', 230000, '8.1%');

1 row created.

SQL> commit; 精品文档

· 244·

Commit complete.

3)查询列sale_percent不是以“%”结尾的数据

SQL> select * from sale_summary where sale_percent not like '%\\%' escape '\\';

ID PRODUCT SALE_QUANTITY SALE_PERCE ---------- ------------------ ----------------------------- ------------------- 2 华帝烟机 170000 6

在字符串“%\\%”中,第一个“%”是通配符,代表任意长度的任意字符;随后的“\\%”代表原义字符“%”;escape '\\'则用来指定转义字符“\\”。

3.ntile(n)是另外一个比较常用的分析函数。该函数的作用是将记录以某个标准平均分为n份。利用ntile(4)将表salary中的员工工资按照由高到低的顺序分为四等。

1)利用ntile将表salary中的员工工资水平分为四等

SQL> select employee_name, salary, ntile(4) over(order by salary desc) salry_level from salary;

EMPLOYEE_NAME SALARY SALRY_LEVEL ------------------------------- ------------------------------------- 刘明 5500 1 张小琴 5000 1 周欣欣 4500 1 武铉 3800 1 刘金龙 3500 2 李云 3500 2 张伦 3200 2 李周宇 3000 3 王静 3000 3 刘军 3000 3 陆军 2800 4 张辉 2500 4 张敏 2300 4

13 rows selected.

2)这里的over(order by salary desc)实际是数据表中的所有数据。ntile函数的窗口函数不能使用窗口子句来进一步限制所选的记录。

第15章 Oracle中的控制语句

1.试用case when语句改写以下语句。

if course = '0' then

dbms_output.put_line('数学'); elsif course = '1' then

dbms_output.put_line('语文'); elsif course = '2' then

dbms_output.put_line('英语'); else 精品文档

dbms_output.put_line('其他'); end if;

·245·

改写后的代码如下所示:

case course when '0' then

dbms_output.put_line('数学'); when '1' then

dbms_output.put_line('语文'); when '2' then

dbms_output.put_line('英语'); others

dbms_output.put_line('其他'); end case;

2.试用无条件循环打印表employees的雇员信息(包括雇员ID、雇员姓名)。

可以遵循声明游标、打开游标、处理游标、关闭游标的顺序来循环处理表students中的所有学生信息。无条件循环可以在循环内部利用exitwhen来指定退出循环的条件。

SQL> set serverout on;

SQL> declare cursor cu_student_id_name is 2 select student_id, student_name 3 from students; 4

5 student_id students.student_id%type;

6 student_name students.student_name%type; 7 begin

8 open cu_student_id_name;

9 fetch cu_student_id_name into student_id, student_name; 10

11 loop

12 dbms_output.put_line(student_id || ':' || student_name); 13 fetch cu_student_id_name into student_id, student_name; 14 exit when cu_student_id_name%notfound; 15 end loop; 16

17 close cu_student_id_name; 18 end; 19 / 1:金瑞 2:钟君 3:王山 4:刘迪 5:钟会 6:张玉 7:柳青 8:胡东 9:商乾 11:王蒙 end;

3.利用while循环来完成上题的功能。

精品文档

21天学通Oracle 课后答案(第三版)

4)重新利用mike为bill分配createtable权限SQL>grantcreatetabletobill;Grantsucceeded.·241·5)利用用户bill创建新的数据表bill_testSQL>createtablebill_test(idnumber)
推荐度:
点击下载文档文档为doc格式
4of240mr4k6x2111f20r4n7xz5ee5l00bj4
领取福利

微信扫码领取福利

微信扫码分享