28 January 2011

"Create" not the same as "define"? Players cry "Ambiguous!" (1944)

In the 27 January quiz, I asked: "Which of the choices show the successful creation of a nested table type?" I then showed choices that created a nested table type in the database as a schema-level object, and also defined a type inside a PL/SQL block. I marked all these choices as correct.

Several players complained that this was ambiguous, that the use of the word "creation" implied a create in the database. Feel free to read their comments below.

When this criticism was first brought to my attention (late last night), my initial reaction was: "C'mon, you know what I meant." But as more players chimed in with the same objection, I have decided I need to rescore.

So I will adjust the text of the question a bit, give everyone credit for the two choices that are PL/SQL blocks, and recalculate scores and ranks.

My apologies for the careless phrasing.

Cheers, SF

Player Comments

"I felt the use of "create/creation" in todays question to be ambiguous. I answered from the persective that only the "create or replace type" statements would actually create the nested table type. The anonymous pl/sql blocks (the valid ones at least) only declare a nested table type that is never used. To me create is not the same as declare - if the quiz had asked which statements defined or described a valid nested table type, then I would have felt the anonymous pl/sql blocks were options as well."

"I had a doubt on this quiz I am fairly sure about difference between varray, nested table and associative array - no ambiguities there... But the term "creation of a type" I am not quite sure if I have understood correctly. Normally I would only use "create a type" when I create a schema-level type. I would not use the word "create" if I merely defined a type in a pl/sql declaration section. But I do realize that you could easily argue that a type definition in a declaration section "creates" a pl/sql type (as opposed to create a schema level type.) So I ended up believing that probably other people would use "create" both for pl/sql types and schema level types, and probably I am wrong in thinking that "create" is just schema level types, and so I chose my answers accordingly. I'm not asking any rescores or anything like that - I just felt sufficiently in doubt that I thought I'd let you know that at least one player had "ambiguous doubts" about even this very simple sentence in this quiz - you may be prepared if others have the same doubts. (Or possibly I am so wrong about the understanding of "create" that I am the only one."

"I had a bit of confusion in Today's quiz because of the word "Creation" in the question. I knew that nested tables can be defined as SQL types as well as within PL/SQL programs. There were 3 choices showing correct definition of nested table types. However I have chosen only 1 (create or replace type..) as correct, because I thought "successful creation of a nested table type" means to say a type has to be "created". When you define/declare a type inside the package or pl/sql block, the type is not "created" (rather package is created). I really hope this is what you meant."

"I must object to the wording of the January 27th quiz. I understood CREATE as "define a type that remains in the database". The anonymous block option marked as correct does not do this, but rather uses a temporary nested table type for the duration of the block, which cannot possibly be used in any other context. A better wording of the quiz would be: "Which of the choices show valid uses of nested table types". Then I would agree that also the anonymous block is a correct choice. I can understand where you were trying to go with the quiz now that I see your answers, but maintain that the question is ambiguous."


  1. Does the below statement show successful creation of a function?

    create or replace package foo is
    function bar return boolean;

    I would say No. To me, it shows creation of a package (with a function definition in it).

    Same applies for type.

  2. I don't think I interpreted the question incorrectly at all, the question asked for choices that show successful creation of a nested table type. Only one choice shows that. The other choices show creation or a package, creation of an anonymous block; it just so happens that these choices contain declarations of a table type...

  3. Ambiguities often seems to arise, when words are used in the quiz merely as plain English words, but these same words are also a part of the PL/SQL language.

    In this quiz the choice of the english word "creation" leads programmers minds to think PL/SQL reserved word "CREATE".

    It is (as always) very difficult to avoid ambiguities. I was much in doubt myself (one of the comments Steven quotes is mine), but I ended up answering correctly anyway. My logic went like this:

    "If he meant CREATE and the answers defining a PL/SQL nested table type therefore is wrong, then that would be a devious question. The author is Steven and he is rarely devious. Therefore by creation he must mean create in the more general sense and not the CREATE reserved word. QED :-)"

    And that is an advice to everyone playing the quiz: When in doubt, remember that Steven usually does not play devious tricks :-)

    Perhaps an idea for question authors is to try to avoid using "PL/SQL-like" words when the meaning they try to convey is more "general English"? But that is hard as the PL/SQL language consists of English words :-)

  4. As for me, the original question in quiz was not ambiguous at all - it may refer only to a schema-level type, especially if take into account a the "shows" word (as it tends to be interpreted "show when executed" - and only one of choices returns "Type created" when executed with SQL*Plus.

    Anyhow I am objections to the updated question as well "that can then be used to declare a nested table in a PL/SQL block executed in the same schema?" the most likely implies _any_ PL/SQL block executed in the same schema, but I can't see how type defined (or better "declared") in an anonymous block (the second choice in "Choices and Explanations") may be used this way. It can be used only in the declaring block and blocks nested into it - does it?

    Kind regards,

  5. Spoon,

    I think it is just a matter of taste and interpretation. To me personally a function within a package specification is just as valid as a standalone function and in that sense a "logical" creation of a stored function, albeit in a package (to me even the preferred way most of the time...). So to me the same for a NESTED TABLE Type...

    So I had no issue with this question, but I can imagine some do. A rescore is probably fine.


  6. Thanks, Oleksandr. You are right. I will tweak the text further.

    There have been will be be times when I do not rescore because I believe players should not be assuming a "devious trick."

  7. Hello All,
    I feel that something should be done to avoid ambiguities in the wording of such questions,
    even at the price of making the question "more explicit than needed", which is still preferrable upon a rescoring.
    While many players probably knew the right answer if the question were worded differently,
    when rescoring to 100% this gives a "gift benefit" to everybody, without any difference ...

    In this specific case, maybe simply using "definition" instead of "creation"
    have been enough to remove ambiguity.

    I suppose that no one would argue that a database level CREATE TYPE ... does not represent indeed a TYPE DEFINITION, in addition to creating a database object.

    Looks like soon the pl/sql challenge team will need a "linguistic comittee" to approve quiz texts before they are used ...

    Thanks & Best Regards,

  8. declare
    a number;

    Have I created a variable? I can use it when in scope. I interpreted these nested tables in different levels of scope.

    As for being tricky, I think the 28/1/11 quiz may have crossed the line...