08 February 2011

One, Two, Many Types of Quizzes?

In other threads on this blog, players have expressed for more other kinds of quizzes:

"Can we have puzzles about how to implement requirements or solve problems in PLSQL, just like we have (lets say acm contests in c, c++, java)? I know its not an easy kind of stuff to implement the same, but if we can start working towards that may be down the line 4-6 months we can try to conduct a set of 4-5 puzzles and give some time (2-3 days time frame) to solve the puzzles and submit the source code."

"I just got a couple of single answer quizzes wrong and my score dropped significantly :( Reason, not careful enough. Is it possible to publish a quiz having 10 or may be greater or less questions every month that can be kept open for few days? And those that answer all of them correct get a significant score boost. This could be an opportunity to those that got wrong mainly due to carelessness and also those that missed many quizzes."

In the current (through 1.9) architecture, it is hard to add such quizzes (or, as we are calling them here in the PL/SQL Challenge development team, "competitions") because the underlying DB design is not flexible enough.

That's the bad news. The good news is that we are at this very moment putting the website and backend code through a comprehensive refactoring so that we can offer a wider range of quizzes, both in terms of content (SQL, APEX, etc.) and form (puzzle problems in which you submit a solution, instead of choosing an answer; multiple quizzes; true-false questions; logic puzzles; - and polls!).

With 2.0, when you visit the home page, you will then see a list of the open competitions. You pick the competition and take the quiz or solve the problem or whatever it is the competition requires. Here's an early glimpse:


I hope this sounds good to you. Please feel free to post any ideas you have on this topic here, and hopefully we can integrate them into the 2.0 development plan. I also hope to provide a beta testing site in a few weeks.

Regards, SF

Questions raised about when DBMS_OUTPUT text is displayed (2001)

The 7 February quiz tested your knowledge of calling DBMS_OUTPUT.disable to disable output to the DBMS_OUTPUT buffer. We showed you a series of three top-level anonymous blocks and asked you what would be displayed after they are run:
BEGIN
   DBMS_OUTPUT.put_line ('BLOCK ONE - LINE ONE');
END;
/

BEGIN
   DBMS_OUTPUT.put_line ('BLOCK TWO - LINE ONE');
   DBMS_OUTPUT.disable;
   DBMS_OUTPUT.put_line ('BLOCK TWO - LINE THREE');
END;
/

BEGIN
   DBMS_OUTPUT.put_line ('BLOCK THREE - LINE ONE');
END;
/
Several players questioned our scoring of "BLOCK ONE - LINE ONE" as correct. Here are three comments that reflect the issues raised:

"I do admit that I don't use disable or enable at all, so I may be wrong in my comment here. I understood the manual that everything is flushed, even what has been run earlier. Better yet, I tested the code both in SQL Developer and Toad after answering, and in both systems, I did not get any result at all. Remarking out the disable command, I got of course all the lines. Hence, I put to you that answering that all are wrong is actually correct."

"Reading the answer, it was only then that I realised you actually meant to run block 1 first, then run block 2, then run block 3. I am so used to using TOAD, and just running several blocks one after another by using "run as script", that I assumed that was the way to do it, and that would have resulted in none of the choices being correct, as the buffer would be cleared before being displayed at all. It might be helpful to indicate in some way that these are separate statements, not to be run as a single script."

"Nothing gets displayed "after I run" three blocks in questions, first line gets displayed after first block, NOT after 3 blocks. If the intention was to take first block's output display as correct answer, then question could have been clearer by saying "What will be displayed when I run each of the following blocks in the following order?"

First, let's address the issue of order of statements and "after I run." I don't believe that I need to state in my question that the three (or N) blocks shown in the question are run "in the following order." That has always been implied in any of the questions played in the PL/SQL Challenge. Otherwise, you could argue, say, that my table has no data because the block with insert statements was run before the create table statement.

As for the IDE issue - it may well be the case that various IDEs deal with server output from DBMS_OUTPUT calls differently. And I am sorry for the confusion that this may cause. But I do not believe that I can be responsible for accounting for differences among IDE behavior or testing my quizzes across all IDEs. The quiz, so far as I know, correctly demonstrates the impact of a call to DBMS_OUTPUT.disable on the output from the current block and all subsequent blocks (until serveroutput is re-enabled, that is). It also shows (at least if you run it in SQL*Plus, which you see below) that the output of any successfully completed blocks is displayed on the screen.
SQL: BEGIN
  2     DBMS_OUTPUT.put_line ('BLOCK ONE - LINE ONE');
  3  END;
  4  /
BLOCK ONE - LINE ONE
SQL:
SQL: BEGIN
  2     DBMS_OUTPUT.put_line ('BLOCK TWO - LINE ONE');
  3     DBMS_OUTPUT.disable;
  4     DBMS_OUTPUT.put_line ('BLOCK TWO - LINE THREE');
  5  END;
  6  /
SQL:
SQL: BEGIN
  2     DBMS_OUTPUT.put_line ('BLOCK THREE - LINE ONE');
  3  END;
  4  /
SQL: