Features of Teradata SQL

Module 14

Setting the Stage
After completing this module, you will be able to:

• State the purpose and function of the session
setting flags

• Recognize differences in transaction modes for
Teradata and ANSI

• Use the various HELP functions available

SQL Version 2 Differences
Teradata V2R2 (and later) consists of: - All existing Teradata features from v1. - ANSI compatible ways to perform many Teradata V1 features. - Completely new features based on ANSI standard.
Macros

ANSI

Inter. Full

CASE

WITH BY FORMAT

Teradata

AS

NAMED

V2R2 allows for sessions to operate in either ... - BTET (Teradata) mode - ANSI mode All syntax, both ANSI and Teradata extensions, is accepted in either mode.

The same syntax might function differently in each mode.
Using ANSI mode to run existing V1 scripts will affect: - Transaction protocol behavior - Case sensitivity and collating sequences - Certain data conversion and display functions

End Txn mode) BTEQ Examples .Default case sensitivities .Data conversions .Transaction protocol .SET SESSION TRANSACTION ANSI.uses ANSI mode (Commit mode) BTET . must LOGOFF first.requires COMMIT to end transaction .uses standard Teradata mode (Begin Txn . . .requires neither for implicit transactions Must be entered prior to LOGON.SQL Session Modes Transaction mode setting ANSI . Affects: .requires ET to end explicit transaction .requires BT to start explicit transaction . To change session mode.SET SESSION TRANSACTION BTET.

.rollback of active Txn • SQL statement failure . COMMIT WORK will commit the currently active Txn.explicit rollback of active Txn • Session abort .rollback current statement only Transactions are by definition explicit.SET SESSION TRANSACTION ANSI. Statement following a COMMIT automatically starts a new Txn. Locks are accumulated until a COMMIT is issued. A rollback occurs when any of the following occur: • ROLLBACK WORK .ANSI . COMMIT is required immediately following any DDL. ANSI mode: A transaction is committed only by an explicit COMMIT.Transaction Modes .

Each request is an implicit transaction.Teradata .rollback of active Txn • SQL statement failure .rollback of active Txn Locks are accumulated following a BT until an ET is issued. . BT begins an explicit Txn. BTET mode: A transaction is by definition implicit.explicit rollback of active Txn • Session abort .SET SESSION TRANSACTION BTET.Transaction Modes . ET commits the currently active Txn. BEGIN and END TRANSACTION are used to create larger transactions out of individual requests. A rollback occurs when any of the following occur: • ROLLBACK WORK .

Transaction Examples ANSI Mode BTET Mode (explicit) BT Upd A Upd B ET (both commit) BT Upd A Upd B (fails) (both rollback) BTET Mode (implicit) Upd A (A commits) Upd B (B commits) Upd A Upd B COMMIT (both commit) Upd A Upd B (fails) COMMIT (A commits) Upd A (A commits) Upd B (fails) (rollback B) Upd A Upd B ROLLBACK (both rollback) BT Upd A Upd B ROLLBACK (both rollback) BT Upd A Upd B LOGOFF (both rollback) (No explicit ROLLBACK in implicit Txn) Upd A Upd B LOGOFF (both rollback) Upd A (A commits) Upd B (B commits) LOGOFF .

And.XYZ. [SET] FOLDLINE = OFF ALL [SET] FOOTING = NULL [SET] FORMAT = OFF [SET] FORMCHAR = OFF [SET] HEADING = NULL [SET] INDICDATA = OFF [SET] NOTIFY = OFF [SET] NULL =? [SET] OMIT = OFF ALL [SET] PAGEBREAK = OFF ALL [SET] PAGELENGTH = 55 [SET] QUIET = OFF [SET] RECORDMODE = OFF [SET] RETCANCEL = OFF [SET] RETLIMIT = No Limit [SET] RETRY = ON [SET] RTITLE = NULL [SET] SECURITY = NONE [SET] SEPARATOR = two blanks [SET] SESSION CHARSET = ASCII [SET] SESSION SQLFLAG = NONE [SET] SESSION TRANSACTION = BTET [SET] SESSIONS =1 [SET] SIDETITLES = OFF for the normal report.SHOW CONTROL. .SHOW Command . [SET] SKIPDOUBLE = OFF ALL [SET] SKIPLINE = OFF ALL [SET] SUPPRESS = OFF ALL [SET] TDP = l5442 [SET] TITLEDASHES = ON for the normal report.BTEQ .LOGON XYZ. [SET] UNDERLINE = OFF ALL [SET] WIDTH = 75 . it is ON for results of WITH clause number: 1 2 3 4 5 6 7 8 9.

use BTEQ settings: .SET DEFAULTS . One row.HELP SESSION Command HELP SESSION. *** Help information returned.SET FOLDLINE To return to the default settings: . *** Total elapsed time was 1 second. User Name Account Name Logon Date Logon Time Current DataBase Collation Character Set Transaction Semantics Current DateForm Session Time Zone Default Character Type TUSER25 $M_9038_&L 00/06/16 15:14:04 TUSER25 ASCII ASCII Teradata IntegerDate 00:00 LATIN Note: To produce this format.SET SIDETITLES .

Provides individual command syntax. HELP ‘SQL ALTER TABLE’. command-name’. command-name’. . Online Syntax help HELP HELP ‘utilityname utilitycommand’. ‘SQL ‘ARCHIVE ‘BULKLOAD ‘DUMP ‘FASTEXPORT ‘FASTLOAD ‘MULTILOAD ‘PMPC ‘TPCCONS command-name’. command-name’. HELP ‘SQL SELECT’. command-name’. command-name’. Provides global command menu. HELP ‘SQL’.Online Syntax HELP Provides help on multiple utilities. command-name’. command-name’. command-name’.

*** Total elapsed time was 1 second. .HELP Examples HELP 'SQL'. *** Query completed. On-Line Help --------------------------------------------------------------------------UPD[ATE] tablename [ [AS] aname ] [ FROM tname [ [AS] aname] ] [. 10 rows found. On-Line Help --------------------------------------------------------------------------DBS SQL COMMANDS: ABORT BEGIN TRANSACTION COMMIT CREATE INDEX CREATE USER DELETE DROP DATABASE DROP TABLE ECHO EXECUTE GRANT : ALTER TABLE CHECKPOINT COMMENT CREATE MACRO CREATE VIEW DELETE DATABASE DROP INDEX DROP VIEW END LOGGING EXPLAIN GRANT LOGON : BEGIN LOGGING COLLECT STATISTICS CREATE DATABASE CREATE TABLE DATABASE DELETE USER DROP MACRO DROP STATISTICS END TRANSACTION GIVE HELP : HELP 'SQL UPDATE'.. [ ALL ] .columnname = expr] [ WHERE condition ] [ ]. *** Query completed. *** Total elapsed time was 1 second... SET columnname = expr [ .tname [ [AS] aname ] ] . One column returned. One column returned. . 35 rows found..

Cartesian product RIGHT OUTER JOIN FULL OUTER JOIN CROSS JOIN . table on the right has nulls when rows do not match. cname .details in Appendix B. …] FROM tname [aname] [INNER] LEFT [OUTER] RIGHT [OUTER] FULL [OUTER] CROSS JOIN ON Where: tname [aname] condition . Both tables are used to qualify and extended with nulls. SELECT cname [. table on the left has nulls when rows do not match. cname tname aname condition INNER JOIN LEFT OUTER JOIN Column or expression name Table or view name Alias for table or view name Criteria for the join All matching rows Table to the left is used to qualify.SELECT Statement ANSI Join Syntax With V2R2 (and later). Teradata supports the ANSI join syntax and outer joins . Table to the right is used to qualify.

Column Attributes Storage As entered (default) UPPERCASE UPPER. first_name last_name Larry Ratzlaff Peter Rabbit .Teradata Teradata Rules . first_name Robert James I. Larry Peter last_name Crane Trader Trainer Ratzlaff Rabbit (CS) result SELECT first_name .B. LOWER CASESPECIFIC (CS) NONCASESPECIFIC (NOT CS) (Teradata default) Comparisons Default (NOT CS) result SELECT first_name .CASE Sensitivity Issues . last_name FROM employee WHERE last_name LIKE ‘%Ra%’. last_name FROM employee WHERE last_name(CS) LIKE ‘%Ra%’.

Column Attributes Storage None (As entered is default) UPPER.ANSI ANSI Rules . first_name last_name Larry Ratzlaff Peter Rabbit . LOWER (Casespecific is default) Comparisons Default (CS) result SELECT first_name . last_name FROM employee WHERE last_name(CS) LIKE ‘%Ra%’.CASE Sensitivity Issues . last_name FROM employee WHERE last_name LIKE ‘%Ra%’. first_name last_name Larry Ratzlaff Peter Rabbit Explicit CS result SELECT first_name .

test num 15365 comment Result is 95% SELECT filename. filesize FROM file_table WHERE filename LIKE ‘%ANSIb_SQLb_%’ ESCAPE ‘b’.Using ESCAPE with LIKE LIKE Wildcard rules Underscore ‘_’ replaces one character. filename ANSI_SQL_QRY3 filesize 2068 . comment FROM test_results WHERE comment LIKE ‘%95a%%’ ESCAPE ‘a’. Percent sign ‘%’ replaces zero to many characters. SELECT test_num. ESCAPE rule ESCAPE permits use of ‘_’ or ‘%’ as part of string search criteria.

m) NUMERIC(n.m) CHAR(n) .m) DECIMAL(n.Data Types Teradata INTEGER SMALLINT BYTEINT DATE TIME TIME WITH ZONE TIMESTAMP TIMESTAMP WITH ZONE FLOAT FLOAT FLOAT DECIMAL(n.m) CHAR(n) VARCHAR(n) CHAR VARYING(n) LONG VARCHAR BYTE(n) VARBYTE(n) GRAPHIC(n) VARGRAPHIC(n) LONG VARGRAPHIC ANSI (Entry) equivalent INTEGER SMALLINT FLOAT REAL DOUBLE PRECISION DECIMAL(n.

75%) .Table Level Attributes CREATE MULTISET TABLE sales_period DATABLOCKSIZE = 16384 BYTES FREESPACE = 10 PERCENT (period_num INT). SET MULTISET Don’t allow duplicate rows Allow duplicate rows (ANSI) DATABLOCKSIZE Maximum multi-row blocksize for table in: BYTES KILOBYTES (or KBYTES) Rounded to nearest sector (512) Increments of 1024 MINIMUM DATABLOCKSIZE MAXIMUM DATABLOCKSIZE (6144) (65024) FREESPACE Percent of freespace to keep on cylinder during loading operations (0 .

Column Attributes Attribute UPPERCASE CASESPECIFIC FORMAT TITLE NAMED/AS COMPRESS COMPRESS NULL COMPRESS value WITH DEFAULT DEFAULT DATE DEFAULT TIME NOT NULL DEFAULT value DEFAULT USER DEFAULT NULL ANSI Teradata Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes .

Indexes (primary or secondary) may be unique or nonunique. Indexes (primary or secondary) may be used to improve access. Primary index(PI) choice will affect distribution. . access and thus performance. PK’s are always unique and cannot be null.one or more columns used to distribute and locate the rows of a table (one per table). PK’s are not known to the Teradata DBS as such.Primary Keys And Indexes (Review) Primary Keys Primary key . Primary keys (PK) are used in conjunction with foreign keys to define the important relationships in a database. Indexes Primary index . Indexes (primary or secondary) may be used to enforce uniqueness. PK’s are implemented as indexes by the Teradata DBS.one or more columns used to uniquely identify the rows of a table (one per table).

Up to 64 foreign keys may be defined on a table.Creating Employee Table With Constraints All constraints are unnamed. first_name VARCHAR(30) NOT NULL. last_name CHAR(20) NOT NULL. department_number INTEGER REFERENCES department(department_number). CREATE TABLE employee . Primary Key column(s) must be defined NOT NULL. Referenced columns must be defined as unique. . manager_employee_number INTEGER REFERENCES employee(employee_number).2) NOT NULL) . job_code INTEGER REFERENCES job(job_code). NO AFTER JOURNAL ( employee_number INTEGER NOT NULL PRIMARY KEY. birthdate DATE NOT NULL. salary_amount DECIMAL(10. NO BEFORE JOURNAL. hire_date DATE NOT NULL.FALLBACK . User must have REFERENCES right on referenced table. All constraints are at the column level.

FOREIGN KEY ( department_number ) REFERENCES department( department_number). FOREIGN KEY ( job_code ) REFERENCES job ( job_code ) ) UNIQUE PRIMARY INDEX ( employee_number ). salary_amount DECIMAL(10. job_code INTEGER. . NO BEFORE JOURNAL. Note: Primary key becomes the Primary index. first_name VARCHAR(30) NOT CASESPECIFIC NOT NULL. birthdate DATE NOT NULL.Show Table Constraints Employee Table SHOW TABLE employee. department_number INTEGER NOT NULL.FALLBACK . FOREIGN KEY ( manager_employee_number ) REFERENCES employee ( employee_number ). hire_date DATE NOT NULL. last_name CHAR(20) NOT CASESPECIFIC NOT NULL. manager_employee_number INTEGER. CREATE SET TABLE employee .2) NOT NULL. NO AFTER JOURNAL ( employee_number INTEGER NOT NULL.

Altering Table Constraints To add constraints to a table: ALTER TABLE tablename ADD CONSTRAINT constrname CHECK ADD CONSTRAINT constrname UNIQUE ADD CONSTRAINT constrname PRIMARY KEY ADD CONSTRAINT constrname FOREIGN KEY To modify existing constraints: ALTER TABLE tablename MODIFY CONSTRAINT constrname To drop constraints: ALTER TABLE tablename DROP CONSTRAINT constrname .

Privileges are required to create and drop triggers. views and macros Any of the following SQL statements may be applied to triggers: CREATE DROP SHOW ALTER RENAME REPLACE HELP TRIGGERS Triggers may not be used in conjunction with: • The FastLoad utility • The MultiLoad utility • Updateable Cursors (Preprocessor environment) DELETE DATABASE DELETE USER Both cause all triggers to be dropped.What is a Trigger? A Trigger may be defined as: • One or more stored SQL statements associated with a table • An event driven procedure attached to a table • An object in a database. GRANT REVOKE CREATE DROP TRIGGER . like tables.

• Creates and keeps table definition in data dictionary .Temporary Table Choices Derived Tables • Local to the query (table and columns are named within query) • Incorporated into SQL query syntax (populated in query via SELECT in FROM) • Materialized in SPOOL .uses TEMPORARY space • Uses CREATE GLOBAL TEMPORARY TABLE syntax • Materialized instance of table discarded at session end.Spool rows are discarded when query finishes • No data dictionary involvement • Commonly used with aggregation Volatile Tables • Local to a session .uses SPOOL space • Uses CREATE VOLATILE TABLE syntax • Discarded automatically at session end • No data dictionary involvement (Global) Temporary Tables • Local to a session .

colf INT DEFAULT TIME . will insert a null. Will insert defined default values into each column.----------. If no default defined and null not allowed.----------.----.----------. cola ------22 22 colb colc cold cole colf ----.--------------.2) NOT NULL WITH DEFAULT . cola colb colc cold cole colf colg ------. insert will fail.Inserting Default Values INSERT INTO tablename DEFAULT VALUES.cole TIME(0) DEFAULT CURRENT_TIME .00 11:14:14 111414 PED INSERT INTO test_tbl DEFAULT VALUES.-------22 ? 2000-01-01 . SELECT * FROM test_tbl.-----. If no default is defined.colb CHAR(1) .00 11:14:37 111437 colg -------PED PED .----------? 2000-01-01 . INSERT INTO test_tbl DEFAULT VALUES. CREATE TABLE test_tbl (cola SMALLINT NOT NULL DEFAULT 22 .00 11:14:14 111414 ? 2000-01-01 .colc DATE DEFAULT 1000101 FORMAT 'YYYY-MM-DD' .cold DEC(3.colg CHAR(8) DEFAULT USER). SELECT * FROM test_tbl.--------------.-----.

. HELP ‘SQL sqlcommand’.executes a macro . DROP TABLE tablename.copies file1 to file2 .view contents of text file .logon to Teradata .RUN FILE=filename .deletes all rows in a table .create or edit a text file .displays session information .shows table creation syntax .drops table from the database .renames a file .delete a file .QUIT . EXEC macroname.LOGON tpdid/username HELP SESSION.Lab Environment DBC UNIX userids u____01 u____02 u____xx Note: ___ Instructor Initials Teradata_Factory AU Accounts Customer Trans Lab3_1_1 Lab3_1_2 Accounts Customer Trans ____Students T____01 T____02 Accounts Customer Trans T____xx Accounts Customer Trans Useful Teradata Commands in BTEQ: . DELETE tablename ALL.provides count of rows in table . SELECT COUNT(*) FROM tname. SHOW TABLE tablename.long listing of UNIX files) .executes a file of BTEQ/SQL commands .help for an SQL command . HELP USER username.lists objects owned by user .exits BTEQ Useful UNIX Commands: ls -l pg (or more) filename vi (or vedit) filename cp file1 file2 mv filename newfilename rm filename exit .exits UNIX .

…] FROM tname [aname] [INNER] LEFT [OUTER] RIGHT [OUTER] FULL [OUTER] CROSS JOIN ON tname [aname] condition . Cartesian product RIGHT OUTER JOIN FULL OUTER JOIN CROSS JOIN . table on the left has nulls when rows do not match.SELECT Statement Join Syntax SELECT cname [. Both tables are used to qualify and extended with nulls. Where: cname tname aname condition INNER JOIN LEFT OUTER JOIN Column or expression name Table or view name Alias for table or view name Criteria for the join All matching rows Table to the left is used to qualify. Table to the right is used to qualify. table on the right has nulls when rows do not match. cname .

Inner Joins An inner join returns an output row for each successful match between the join tables.Last_name . No information about departments which have no employees assigned to them. No information about employees who have no department number or an invalid department number.Department_Number.Department_Name .Department_Number = D.Department_Number AS EmpDept FROM Department D INNER JOIN Employee E ON E. SELECT D. . Dept Department_Name 402 software support 100 executive 501 marketing sales 301 research and development 301 research and development Last_Name Crane Trainer Runyon Stein Kanieski EmpDept 402 100 501 301 301 Information about employees and their department names where the employee’s department number matches the existing departments.Department_Number AS Dept .E.

Shows departments with no employees.Department_Number.Department_Number AS EmpDept FROM Employee E FULL OUTER JOIN Department D ON E.E.Department_Number AS Dept .Last_name . .Department_Number = D.Outer Joins An outer join returns matching rows and nonmatching rows. Dept 600 402 ? 501 301 ? 100 301 Department_Name new department software support ? marketing sales research and development ? executive research and development Last_Name ? Crane James Runyon Kanieski Green Trainer Stein EmpDept ? 402 111 501 301 ? 100 301 In addition to output from inner join: Shows employees with null departments.Department_Name . Shows employees with invalid departments. SELECT D.

department_number 402 111 501 301 ? 100 301 department_name software support ? marketing and sales research and develop ? executive research and develop last_name Crane James Runyon Stein Green Trainer Kanieski In addition to output from inner join: Shows employees with null departments.Last_Name Employee E LEFT OUTER JOIN Department D E.Department_Name . Shows employees with invalid departments.Department_Number = D.Department_Number FROM ON .Department_Number . .LEFT Outer Join Example SELECT E.

Department_Number .Department_Number = D.Last_Name Employee E RIGHT OUTER JOIN Department D E.Department_Number FROM ON .Department_Name . department_number 600 402 100 501 301 301 department_name new department software support executive marketing sales research and develop research and develop last_name ? Crane Trainer Runyon Stein Kanieski In addition to output from inner join: Shows departments with no employees.RIGHT Outer Join Example SELECT D. .

Job_Code = J. Returns all employees including: employees with invalid departments employees with null departments employees with invalid job codes employees with null job codes . SELECT last_name AS Employee .Job_Code .description AS Job FROM Department D RIGHT OUTER JOIN Employee E ON D. the ON clause needs to be placed appropriately so that the join operation can be evaluated correctly. In joining more than two Tables in an outer join.Outer Joins of More Than Two Tables Each JOIN must have an associated ON clause.Department_Number LEFT OUTER JOIN Job J ON E.Department_Number = E.department_name AS Dept .

description AS Job FROM Department D RIGHT OUTER JOIN Employee E LEFT OUTER JOIN Job J ON E.Job_Code ) ON D.Department_Number. • An ON clause applies to the immediately preceding join operation. SELECT last_name AS Employee .ON Clause Placement The placement of the ON clause in the SELECT is important. The same SELECT example could be written as: SELECT last_name AS Employee .department_name AS Dept .Job_Code = J.Job_Code = J. The rules are: • The first ON clause (from left to right) is evaluated first.Job_Code ON D.department_name AS Dept . .Department_Number = E. Using parenthesis can clarify the reading of the statement.Department_Number).Department_Number = E.description AS Job FROM (Department D RIGHT OUTER JOIN (Employee E LEFT OUTER JOIN Job J ON E.

employee_number department_number --------------------------.d. A WHERE clause may restrict which rows participate from either table.department_number FROM employee e CROSS JOIN department d WHERE e.employee_number = 1008. SELECT e. Cross joins are sometimes called product joins. . Cross join syntax does not allow an ON clause.employee_number . Each participating row of one table is joined with each participating row of another table. Output is not meaningful.---------------------------1008 501 1008 301 1008 402 1008 201 1008 302 1008 600 1008 401 1008 100 1008 403 One employee matched with nine departments results in nine rows of output.Cross Joins A cross join is a join that requires no join condition.

d.000.000 row table would yield a 400. A Cartesian product results from a CROSS JOIN without a WHERE clause.employee_number .d. SELECT e.department_number FROM employee e CROSS JOIN department d. An 8.000 row table and a 50. Each employee row (26) matched with each department row (9) yields 234 rows of output.department_number. The output of a Cartesian product is rarely meaningful. SELECT employee.000. . Cartesian products can also result from an INNER JOIN with improper aliasing or improper join conditions.000 row answer set.Cartesian Products A completely unconstrained cross join is called a ‘Cartesian Product’.department_number = d.employee_number . Each row of one table is joined to each row of another table.000.department_number FROM employee e INNER JOIN department d ON e.

Thank You!!! .

0..//05..990434507.4770.:90743841470%.:.7920398 025400893:/05.4/08 025400893:4-.02540083.7920398 025400893.75943 $4#  05..34:90743 90 .9084 9.3.557457.3-00.884.0/.394%..943.792039 #% &%#  25400    05.:/3 025400893.90/.-083.792039*:2-07  05..:80300/894-05.4/08 .792039*:2-07 % &%#  4-   4-*4/0 4-*4/0  #09:738.20 $059 /08.:80 343324709. 2:89.792039*3...9 $% .-08 ...90/ ../4-.20 $25400 /05.89*3.3%4%.

792039*:2-07  .:..90570.792039*:2-07 05.20 $25400 /05..../3419089.89*3.943 %08..020394190 .02039 %05.792039 #% &%#  25400 % &%#  4-   4-*4/0 4-*4/0   05.3.792039*:2-07 &835.4:/-079903.7039088.20 $25400 /05.:80390$%8 25479.20 $059 /08..:80!.:80 17420199479 80.902039 $% .250.20$%0..90/1789 W 3 ..55089490220/.0/3 434507.8 $% .792039*3.39 %07:08.89*3.:80.792039 #% &%#  25400 % &%#  4   4-*4/0 4-*4/0   05.792039*:2-07 05..719070.75943 $4#  05.75943 $4#  05.20 $059 /08.792039*3.70 W %01789 .

.7488438 .937441.7084209208.5.792039*3:2-07                                     300254002.792039*3:2-07 # 0254000 # $$  /05.5.9.439.-0 $%0 025400*3:2-07 / /05.79.4.-08430/9 0./408349.79.0/574/:.9706:7083443.:802.90 174209079.9374414309.3 .70897..0/9330/05.43/943 7488438.9438 .5..5.7485.9.-0 748843839.79.792039/ #0 025400*3:2-07  025400*3:2-07/05.7488438..:80 #. 5.349079.7920398 708:983330748414:95:9 :95:9834920..331: .

 74.#.98..0/.9708:981742..9 .3574/:.84708:91742.3/.-0.30/. /05.3.7441 .43897..792039*3:2-07 #  0254000 #  /05..# $$  94:9.3807809 %04:95:941.7908.3574/:.8347257450743 .-0 .792039*3:2-07 .7908.79203974  0/8748414:95:9 3 749.349079.-04:/ 0/.7908...7908.3574/:.98 .3!74/:...70 20. .7488438.792039*3:2-07 #  0254000 # $$  /05.792039/ .43/9438 $%025400 025400*3:2-07 / /05..792039/  0 /05. 749.3#  92574507..:80 $%0 025400*3:2-07 / /05.02540074  2.0/90.3!74/:.331: .9.792039*3:2-07/ /05.425090:3.7908.987.-08430/940.74414309.

%.34: .

Sign up to vote on this title
UsefulNot useful