Example of using aggregation on nested tables, PL-SQL Programming

Assignment Help:

Example of Using Aggregation on Nested Tables

Example: How many students sat each exam

WITH C_ER AS (SELECT CourseId, CAST (TABLE (SELECT DISTINCT StudentId, Mark FROM EXAM_MARK AS EM WHERE EM.CourseId = C.CourseId) AS ROW ( StudentId SID, Mark INTEGER ) MULTISET) AS ExamResult FROM COURSE AS C) SELECT CourseId, (SELECT COUNT (*)  FROM TABLE (ER (ExamResult)) AS t) AS n FROM C_ER

Explanation

  • The WITH clause, occupying the first nine lines of the example, illustrates SQL's counterpart of Tutorial D's construct of the same name. It assigns the name, C_ER, to the result of Example. That name, C_ER, is then used in the FROM clause of the expression that follows the WITH clause. Note that here the name comes before AS and the expression defining it comes after. This is consistent with the analogous use of AS in CREATE VIEW statements.
  • TABLE(ER(ExamResult)) seems to be the only way of having a multiset valued column operated on as an element of a FROM clause-a simple column name is not allowed to appear here. TABLE(ExamResult) can't be used either, because when an invocation of TABLE appears as a FROM clause element, its operand is required to be, specifically, an invocation of a user-defined function. Assumed here ER defined like:

CREATE FUNCTION ER

(SM ROW ( StudentId SID, Mark INTEGER ) MULTISET )

RETURNS TABLE (StudentId SID, Mark INTEGER)

RETURN SM;

The type name TABLE ( StudentId SID, Mark INTEGER ) is actually just a synonym for ROW (StudentId SID, Mark INTEGER ) MULTISET). The misleading synonym is available only in a RETURNS clause and not as a parameter type, for example. So ER is actually a no-op, returning its input.

  • (SELECT COUNT(*) FROM TABLE(ER(ExamResult)) AS t) is a scalar subquery, yielding the cardinality of the multiset of rows that is the value of the column ExamResult in the current row of C_ER. Because we are using the expression to denote a scalar value rather than a table, naming the column would be pointless (apart, perhaps, from injecting a somewhat sarcastic element of purism). As COUNT(*) doesn't use a column name, Example is valid even if we omit the invocation of CAST to assign column names.
  • AS n then gives the resulting column the name n. Note that here the name comes after AS and the expression defining it comes before, in the same style as the use of AS to define the range variables C and EM in the example.

Related Discussions:- Example of using aggregation on nested tables

Prepare a slq project, Project Description: I want to write some SQL st...

Project Description: I want to write some SQL statements. The things I need are between pages 5-7. The only problem is that i want it till tomorrow. Skills required is SQL

Variable declaration - sql, Variable Declaration - SQL SQL's support f...

Variable Declaration - SQL SQL's support for variables is very similar to Tutorial D's, except that the syntax for creating persistent  variables-base tables-is quite differen

Relational operators and logical operators, Relational Operators and Logica...

Relational Operators and Logical Operators It prepares the ground for subsequent sections in which each specific relational operator is paired with its logical counterpart, su

Fetch statement - syntax, FETCH Statement The FETCH statement retrieve ...

FETCH Statement The FETCH statement retrieve rows of data one at a time from the result set of the multi-row query. The data is stored in fields or variables which correspond t

%type attribute - syntax, %TYPE Attribute The %TYPE attribute gives the...

%TYPE Attribute The %TYPE attribute gives the datatype of a record, field, nested table, database column, or the variable. You can use the %TYPE attribute as the datatype speci

User-defined exceptions, User-Defined Exceptions The PL/SQL defines the...

User-Defined Exceptions The PL/SQL defines the exceptions of your own. Dissimilar to the predefined exceptions, the user-defined exceptions should be declared and should be rai

Declaring cursor variables, Declaring Cursor Variables Once a REF CURS...

Declaring Cursor Variables Once a REF CURSOR type is define by you, and then you can declare the cursor variables of that type in any PL/SQL block or subprogram. In the exampl

Relational algebra - sql, Relational Algebra - SQL It describes some ...

Relational Algebra - SQL It describes some operators, that together constitute an algebra that is not only relationally complete but also irreducibly so (very nearly- apart f

Running the pl/sql wrapper, Running the PL/SQL Wrapper To run the PL/SQ...

Running the PL/SQL Wrapper To run the PL/SQL Wrapper, go through the wrap command at your operating system prompt by using the syntax as shown: wrap iname=input_file [oname=

Keyword & parameter description - exceptions, Keyword & Parameter Descripti...

Keyword & Parameter Description: WHEN: This keyword introduces the exception handler. You can have many exceptions execute the similar sequence of the statements by follo

Write Your Message!

Captcha
Free Assignment Quote

Assured A++ Grade

Get guaranteed satisfaction & time on delivery in every assignment order you paid with us! We ensure premium quality solution document along with free turntin report!

All rights reserved! Copyrights ©2019-2020 ExpertsMind IT Educational Pvt Ltd