PL/SQL Challenge 每日一题:2016-5-6 包头与包体的匹配

[复制链接]
查看11 | 回复5 | 2008-9-15 01:28:12 | 显示全部楼层 |阅读模式
最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。
每两周的优胜者可获得itpub奖励的技术图书一本。
以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808
原始出处:
http://www.plsqlchallenge.com/
作者:Steven Feuerstein
运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品
我执行了这个语句:
CREATE TABLE plch_stuff
(
pky NUMBER,
nmVARCHAR2 (100)
)
/
哪些选项在执行之后会显示如下两行?
Package created.
Package Body created.
(A)
CREATE OR REPLACE PACKAGE plch_pkg
IS
SUBTYPE key_lookup_string_t IS VARCHAR2 (1000);
PROCEDURE do_stuff (key_inIN plch_stuff.pky%TYPE,

nm_in IN plch_stuff.nm%TYPE,

misc_in IN key_lookup_string_t DEFAULT NULL,

date_in IN DATE DEFAULT SYSDATE,

flag_in IN BOOLEAN DEFAULT TRUE);
END;
/
CREATE OR REPLACE PACKAGE BODY plch_pkg
IS
PROCEDURE do_stuff (key_inIN plch_stuff.pky%TYPE,

nm_in IN plch_stuff.nm%TYPE,

misc_in IN key_lookup_string_t,

date_in IN DATE DEFAULT SYSDATE,

flag_in IN BOOLEAN DEFAULT TRUE)
IS
BEGIN
NULL;
END;
END;
/

(B)
CREATE OR REPLACE PACKAGE plch_pkg
IS
SUBTYPE key_lookup_string_t IS VARCHAR2 (1000);
PROCEDURE do_stuff (key_inIN plch_stuff.pky%TYPE,

nm_in IN plch_stuff.nm%TYPE,

misc_in IN key_lookup_string_t ,

date_in IN DATE DEFAULT SYSDATE,

flag_in IN BOOLEAN DEFAULT TRUE);
END;
/
CREATE OR REPLACE PACKAGE BODY plch_pkg
IS
PROCEDURE do_stuff (key_inIN plch_stuff.pky%TYPE,

nm_in IN plch_stuff.nm%TYPE,

misc_in IN key_lookup_string_t DEFAULT NULL,

date_in IN DATE DEFAULT SYSDATE,

flag_in IN BOOLEAN DEFAULT TRUE)
IS
BEGIN
NULL;
END;
END;
/
(C)
CREATE OR REPLACE PACKAGE plch_pkg
IS
SUBTYPE key_lookup_string_t IS VARCHAR2 (1000);
PROCEDURE do_stuff (key_inIN plch_stuff.pky%TYPE,

nm_in IN plch_stuff.nm%TYPE,

misc_in IN key_lookup_string_t ,

date_in IN DATE DEFAULT SYSDATE,

flag_in IN BOOLEAN DEFAULT TRUE);
END;
/
CREATE OR REPLACE PACKAGE BODY plch_pkg
IS
PROCEDURE do_stuff (key_inIN plch_stuff.pky%TYPE,

nm_in IN plch_stuff.nm%TYPE,

misc_in IN VARCHAR2 ,

date_in IN DATE DEFAULT SYSDATE,

flag_in IN BOOLEAN DEFAULT TRUE)
IS
BEGIN
NULL;
END;
END;
/

(D)
CREATE OR REPLACE PACKAGE plch_pkg
IS
SUBTYPE key_lookup_string_t IS VARCHAR2 (1000);
PROCEDURE do_stuff (key_inIN plch_stuff.pky%TYPE,

nm_in IN plch_stuff.nm%TYPE,

misc_in IN key_lookup_string_t ,

date_in IN DATE DEFAULT SYSDATE,

flag_in IN BOOLEAN DEFAULT TRUE);
END;
/
CREATE OR REPLACE PACKAGE BODY plch_pkg
IS
PROCEDURE do_stuff (key_inIN NUMBER,

nm_in IN INTEGER,

misc_in IN key_lookup_string_t ,

date_in IN DATE DEFAULT SYSDATE,

flag_in IN BOOLEAN DEFAULT TRUE)
IS
BEGIN
NULL;
END;
END;
/

回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
选A
B: 包体必须和包头一致
C:和B差不多,包体和包头要完全一致
D:原因和上面一样,也是不一致
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
不知道声明和实现的名字不同,含义相同会怎么样
比如类型int和pls_integer
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
〇〇 发表于 2016-5-8 21:53
不知道声明和实现的名字不同,含义相同会怎么样
比如类型int和pls_integer

测试了不行,文档上是说必须字到字的精确匹配。。应该是说文本要一样吧
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
答案A,2楼得奖。
A: 两个参数列表之间的区别仅仅是在包头中的misc_in 含有一个DEFAULT NULL子句,而包体中没有。这不会导致编译错误。
B: 两个参数列表之间的区别仅仅是在包头中的misc_in 不含有一个DEFAULT NULL子句,而包体中却有。这会导致编译错误:
PLS-00593: default value of parameter "MISC_IN" in body must match that of spec
C: 在包体中,我将misc_in所使用的子类型用一个显式的基础类型VARCHAR2代替。所以它们是“相同”的,但是PL/SQL还是坚持要求精确匹配。
D: 在包体中,我将%TYPE用一个显式的基础类型代替。所以它们是“相同”的,但是PL/SQL还是坚持要求精确匹配。

回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
shui yi tie
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行