PL/SQL Challenge 每周一题:2021-12-4 记录类型(18C)

[复制链接]
查看11 | 回复1 | 2008-9-15 01:28:12 | 显示全部楼层 |阅读模式
最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。
每两周的优胜者可获得itpub奖励的技术图书一本。
以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808
原始出处:
https://devgym.oracle.com/
作者:Chris Saxon
运行环境:SQLPLUS, SERVEROUTPUT已打开, 最低版本要求:18.1
注:本题给出答案时候要求给予简要说明才能得到奖品
你开始写这个 PL/SQL 代码块:
declare
type gift_rec is record (
sender varchar2(30),
receiver varchar2(30),
gift varchar2(30)
);

gift gift_rec;
begin
##REPLACE##

dbms_output.put_line (
gift.sender || ' is sending ' ||
gift.receiver || ' ' || gift.gift
);
end;
/
哪些选项可用来取代 ##REPLACE##,使得当你执行这个代码块会显示:
Santa is sending you Lego

(A)
gift.sender := 'Santa';
gift.receiver := 'you';
gift.gift := 'Lego';
(B)
gift := gift_rec (
'Santa',
'you',
'Lego'
);
(C)
gift := gift_rec (
'Lego',
'Santa',
'you'
);
(D)
gift := gift_rec (
sender => 'Santa',
receiver => 'you',
gift => 'Lego'
);
This choice is correct and yo
(E)
gift := gift_rec (
gift => 'Lego',
sender => 'Santa',
receiver => 'you'
);
(F)
gift := gift_rec (
'Santa',
receiver => 'you',
gift => 'Lego'
);
(G)
gift := gift_rec (
sender => 'Santa',
receiver => 'you',
'Lego'
);

回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
答案ABDEF, 本期无人参与。
A:
你可以使用独立的语句来初始化记录的每个属性。在18C之前你不得不用这个方法。
B:
从18C开始,所有记录类型有了一个隐式的构造器。这使得你可以用一个语句初始化记录。
这里用的是位置标记法,所以它按照记录中的位置来设置属性的值。
C:
当你使用位置标记法,数据库根据记录定义中列出的属性顺序来为属性赋值。所以这将会显示:
Lego is sending Santa you
D:
你也可以用命名标记法和修饰表达式来赋值。
E:
利用命名标记法,你可以用你想要的任意顺序来列出属性参数。
F:
你可以将位置标记法和命名标记法混合匹配在一个语句中。但是,如果想这么做...
G:
...所有位置参数必须在命名参数之前!这个会报错:
ERROR at line 14:
ORA-06550: line 14, column 3:
PLS-00312: a positional parameter association may not follow a named association
ORA-06550: line 11, column 3:
PL/SQL: Statement ignored
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行