Vous êtes sur la page 1sur 15

ORACLE

DEV 11G
CURRICULUM
Introduction to SQL
Introduction to Oracle Database
l List the features of Oracle Database 12c
l Discuss the basic design, theoretical, and physical

aspects of a relational database


l Categorize the different types of SQL statements
l Describe the data set used by the course
l Log on to the database using SQL Developer

environment
l Save queries to files and use script files in SQL
Developer

Retrieve Data using the SQL SELECT Statement


l List the capabilities of SQL SELECT statements
l Generate a report of data from the output of a basic
l
l
l
l
l
l

SELECT statement
Select All Columns
Select Specific Columns
Use Column Heading Defaults
Use Arithmetic Operators
Understand Operator Precedence
Learn the DESCRIBE command to display the table
structure

Learn to Restrict and Sort Data


l Write queries that contain a WHERE clause to limit the

output retrieved
l List the comparison operators and logical operators that
l
l
l
l

are used in a WHERE clause


Describe the rules of precedence for comparison and
logical operators
Use character string literals in the WHERE clause
Write queries that contain an ORDER BY clause to sort
the output of a SELECT statement
Sort output in descending and ascending order

Usage of Single-Row Functions to Customize Output


l Describe the differences between single row and multiple
l
l
l
l

row functions
Manipulate strings with character function in the SELECT
and WHERE clauses
Manipulate numbers with the ROUND, TRUNC, and
MOD functions
Perform arithmetic with date data
Manipulate dates with the DATE functions

Invoke Conversion Functions and Conditional Expressions


l Describe implicit and explicit data type conversion
l Use the TO_CHAR, TO_NUMBER, and TO_DATE

conversion functions
l Nest multiple functions
l Apply the NVL, NULLIF, and COALESCE functions to
data
l Use conditional IF THEN ELSE logic in a SELECT
statement

Aggregate Data Using the Group Functions


l Use the aggregation functions to produce meaningful

reports
l Divide the retrieved data in groups by using the GROUP
BY clause
l Exclude groups of data by using the HAVING clause

Display Data From Multiple Tables Using Joins


l Write SELECT statements to access data from more than

one table
l View data that generally does not meet a join condition by
using outer joins
l Join a table to itself by using a self-join

Use Sub-queries to Solve Queries


l Describe the types of problem that sub-queries can solve
l Define sub-queries
l List the types of sub-queries
l Write single-row and multiple-row sub-queries

The SET Operators


l Describe the SET operators
l Use a SET operator to combine multiple queries into a

single query
l Control the order of rows returned

Data Manipulation Statements


l Describe each DML statement
l Insert rows into a table
l Change rows in a table by the UPDATE statement
l Delete rows from a table with the DELETE statement
l Save and discard changes with the COMMIT and

ROLLBACK statements
l Explain read consistency

Use of DDL Statements to Create and Manage Tables


l Categorize the main database objects
l Review the table structure
l List the data types available for columns
l Create a simple table
l Decipher how constraints can be created at table creation
l Describe how schema objects work

Other Schema Objects


l Create a simple and complex view
l Retrieve data from views
l Create, maintain, and use sequences
l Create and maintain indexes
l Create private and public synonyms

Control User Access


l Differentiate system privileges from object privileges
l Create Users
l Grant System Privileges
l Create and Grant Privileges to a Role
l Change Your Password
l Grant Object Privileges
l How to pass on privileges?
l Revoke Object Privileges

Management of Schema Objects


l Add, Modify, and Drop a Column
l Add, Drop, and Defer a Constraint
l How to enable and Disable a Constraint?
l Create and Remove Indexes
l Create a Function-Based Index
l Perform Flashback Operations
l Create an External Table by Using ORACLE_LOADER

and by Using ORACLE_DATAPUMP


l Query External Tables

Manage Objects with Data Dictionary Views


l Explain the data dictionary
l Use the Dictionary Views
l USER_OBJECTS and ALL_OBJECTS Views
l Table and Column Information
l Query the dictionary views for constraint information
l Query the dictionary views for view, sequence, index and

synonym information
l Add a comment to a table
l Query the dictionary views for comment information

Manipulate Large Data Sets


l Use Subqueries to Manipulate Data
l Retrieve Data Using a Subquery as Source
l Insert Using a Subquery as a Target
l Usage of the WITH CHECK OPTION Keyword on DML
l
l
l
l

Statements
List the types of Multitable INSERT Statements
Use Multitable INSERT Statements
Merge rows in a table
Track Changes in Data over a period of time

Data Management in different Time Zones


l Time Zones
l CURRENT_DATE, CURRENT_TIMESTAMP, and
l
l
l
l
l
l

LOCALTIMESTAMP
Compare Date and Time in a Session's Time Zone
DBTIMEZONE and SESSIONTIMEZONE
Difference between DATE and TIMESTAMP
INTERVAL Data Types
Use EXTRACT, TZ_OFFSET and FROM_TZ
Invoke TO_TIMESTAMP,TO_YMINTERVAL and
TO_DSINTERVAL

Retrieve Data Using Sub-queries


l Multiple-Column Subqueries
l Pairwise and Non-pairwise Comparison
l Scalar Subquery Expressions
l Solve problems with Correlated Subqueries
l Update and Delete Rows Using Correlated Subqueries
l The EXISTS and NOT EXISTS operators
l Invoke the WITH clause
l The Recursive WITH clause

Regular Expression Support


l Use the Regular Expressions Functions and Conditions in
l
l
l
l
l
l
l

SQL
Use Meta Characters with Regular Expressions
Perform a Basic Search using the REGEXP_LIKE
function
Find patterns using the REGEXP_INSTR function
Extract Substrings using the REGEXP_SUBSTR function
Replace Patterns Using the REGEXP_REPLACE
function
Usage of Sub-Expressions with Regular Expression
Support
Implement the REGEXP_COUNT function

Oracle Database Program with PL/SQL


Introduction to PL/SQL
l Overview of PL/SQL
l Identify the benefits of PL/SQL Subprograms
l Overview of the types of PL/SQL blocks
l Create a Simple Anonymous Block
l How to generate output from a PL/SQL Block?

Declare PL/SQL Identifiers


l List the different Types of Identifiers in a PL/SQL
l
l
l
l
l
l

subprogram
Usage of the Declarative Section to Define Identifiers
Use variables to store data
Identify Scalar Data Types
The %TYPE Attribute
What are Bind Variables?
Sequences in PL/SQL Expressions

Write Executable Statements


l Describe Basic PL/SQL Block Syntax Guidelines
l Learn to Comment the Code
l Deployment of SQL Functions in PL/SQL
l How to convert Data Types?
l Describe Nested Blocks
l Identify the Operators in PL/SQL

Interaction with the Oracle Server


l Invoke SELECT Statements in PL/SQL
l Retrieve Data in PL/SQL
l SQL Cursor concept
l Avoid Errors by using Naming Conventions when using

Retrieval and DML Statements


l Data Manipulation in the Server using PL/SQL

l Understand the SQL Cursor concept


l Use SQL Cursor Attributes to Obtain Feedback on DML
l Save and Discard Transactions

Control Structures
l Conditional processing using IF Statements
l Conditional processing using CASE Statements
l Describe simple Loop Statement
l Describe While Loop Statement
l Describe For Loop Statement
l Use the Continue Statement

Composite Data Types


l Use PL/SQL Records
l The %ROWTYPE Attribute
l Insert and Update with PL/SQL Records
l INDEX BY Tables
l Examine INDEX BY Table Methods
l Use INDEX BY Table of Records

Explicit Cursors
l What are Explicit Cursors?
l Declare the Cursor
l Open the Cursor
l Fetch data from the Cursor
l Close the Cursor
l Cursor FOR loop
l The %NOTFOUND and %ROWCOUNT Attributes
l Describe the FOR UPDATE Clause and WHERE

CURRENT Clause

Exception Handling
l Understand Exceptions
l Handle Exceptions with PL/SQL
l Trap Predefined Oracle Server Errors
l Trap Non-Predefined Oracle Server Errors
l Trap User-Defined Exceptions
l Propagate Exceptions
l RAISE_APPLICATION_ERROR Procedure

Stored Procedures
l Create a Modularized and Layered Subprogram Design
l Modularize Development With PL/SQL Blocks
l Understand the PL/SQL Execution Environment
l List the benefits of using PL/SQL Subprograms
l List the differences between Anonymous Blocks and

Subprograms
l Create, Call, and Remove Stored Procedures
l Implement Procedures Parameters and Parameters
Modes
l View Procedure Information

Design Considerations for PL/SQL Code


l Standardize Constants and Exceptions
l Understand Local Subprograms
l Write Autonomous Transactions
l Implement the NOCOPY Compiler Hint
l Invoke the PARALLEL_ENABLE Hint
l The Cross-Session PL/SQL Function Result Cache
l The DETERMINISTIC Clause with Functions
l Usage of Bulk Binding to Improve Performance

Triggers
l Describe Triggers
l Identify the Trigger Event Types and Body
l Business Application Scenarios for Implementing Triggers
l Create DML Triggers using the CREATE TRIGGER
l
l
l
l

Statement and SQL Developer


Identify the Trigger Event Types, Body, and Firing
(Timing)
Differences between Statement Level Triggers and Row
Level Triggers
Create Instead of and Disabled Triggers
How to Manage, Test and Remove Triggers?

Creating Compound, DDL, and Event Database Triggers


l What are Compound Triggers?
l Identify the Timing-Point Sections of a Table Compound
l
l
l
l
l
l

Trigger
Understand the Compound Trigger Structure for Tables
and Views
Implement a Compound Trigger to Resolve the Mutating
Table Error
Comparison of Database Triggers to Stored Procedures
Create Triggers on DDL Statements
Create Database-Event and System-Events Triggers
System Privileges Required to Manage Triggers

PL/SQL Compiler
l What is the PL/SQL Compiler?
l Describe the Initialization Parameters for PL/SQL
l
l
l
l
l

Compilation
List the new PL/SQL Compile Time Warnings
Overview of PL/SQL Compile Time Warnings for
Subprograms
List the benefits of Compiler Warnings
List the PL/SQL Compile Time Warning Messages
Categories
Setting the Warning Messages Levels: Using SQL
Developer, PLSQL_WARNINGS Initialization Parameter,
and the DBMS_WARNING Package Subprograms
View Compiler Warnings: Using SQL Developer,
SQL*Plus, or the Data Dictionary Views

Design Considerations for PL/SQL Code


l Standardize Constants and Exceptions
l Understand Local Subprograms
l Write Autonomous Transactions
l Implement the NOCOPY Compiler Hint
l Invoke the PARALLEL_ENABLE Hint
l The Cross-Session PL/SQL Function Result Cache
l The DETERMINISTIC Clause with Functions
l Usage of Bulk Binding to Improve Performance

Triggers
l Describe Triggers
l Identify the Trigger Event Types and Body
l Business Application Scenarios for Implementing Triggers
l Create DML Triggers using the CREATE TRIGGER
l
l
l
l

Statement and SQL Developer


Identify the Trigger Event Types, Body, and Firing
(Timing)
Differences between Statement Level Triggers and Row
Level Triggers
Create Instead of and Disabled Triggers
How to Manage, Test and Remove Triggers?

Creating Compound, DDL, and Event Database Triggers


l What are Compound Triggers?
l Identify the Timing-Point Sections of a Table Compound
l
l
l
l
l
l

Trigger
Understand the Compound Trigger Structure for Tables
and Views
Implement a Compound Trigger to Resolve the Mutating
Table Error
Comparison of Database Triggers to Stored Procedures
Create Triggers on DDL Statements
Create Database-Event and System-Events Triggers
System Privileges Required to Manage Triggers

PL/SQL Compiler
l What is the PL/SQL Compiler?
l Describe the Initialization Parameters for PL/SQL
l
l
l
l
l

Compilation
List the new PL/SQL Compile Time Warnings
Overview of PL/SQL Compile Time Warnings for
Subprograms
List the benefits of Compiler Warnings
List the PL/SQL Compile Time Warning Messages
Categories
Setting the Warning Messages Levels: Using SQL
Developer, PLSQL_WARNINGS Initialization Parameter,
and the DBMS_WARNING Package Subprograms
View Compiler Warnings: Using SQL Developer,
SQL*Plus, or the Data Dictionary Views

Manage Dependencies
l Overview of Schema Object Dependencies
l Query Direct Object Dependencies using the
l
l
l
l
l
l

USER_DEPENDENCIES View
Query an Object's Status
Invalidation of Dependent Objects
Display the Direct and Indirect Dependencies
Fine-Grained Dependency Management in Oracle
Database 12c
Understand Remote Dependencies
Recompile a PL/SQL Program Unit

Oracle Fusion Middleware 11g:


Build Applications with Oracle
Forms
Running a Forms Application
l Running a Form
l Identifying the Data Elements
l Navigating a Forms Application
l Using the Modes of Operation
l Querying Data
l Inserting, Updating, and Deleting Records
l Saving Changes
l Displaying Errors

Working in the Forms Builder Environment


l Forms Builder Key Features
l Forms Builder Components
l Navigating the Forms Builder Interface
l Forms Builder Module Object Hierarchy
l Customizing Your Forms Builder Session
l Forms Executables and Module Types
l Defining Environment Variables
l Testing a Form with the Run Form Button

Creating a Basic Form Module


l Creating a New Form Module
l Creating a New Data Bock
l Using Template Forms
l Saving and Compiling a Form Module
l Module Types and Storage Formats
l Deploying a Form Module
l Producing Documentation

Creating a Master-Detail Form


l Creating Data Blocks with Relationships
l Running a Master-Detail Form Module
l Modifying the Structure of a Data Block
l Modifying the Layout of a Data Block

Working Data Blocks and Frames


l Managing Object Properties
l Creating Visual Attributes
l Controlling the Behavior and Appearance of Data Blocks
l Controlling Frame Properties
l Displaying Multiple Property Palettes
l Setting Properties on Multiple Objects
l Copying Properties
l Creating Control Blocks

Working with Text Items


l Creating a Text Item
l Modifying the Appearance of a Text Item
l Controlling the Data of a Text Item
l Altering the Navigational Behavior of a Text Item
l Enhancing the Relationship between Text Item and

Database
l Adding Functionality to a Text Item
l Displaying Helpful Messages

Creating LOVs and Editors


l LOVs and Record Groups
l Creating an LOV Manually
l Using the LOV Wizard to Create an LOV
l Setting LOV Properties
l LOV Column Mapping
l Defining an Editor
l Setting Editor Properties
l Associating an Editor with a Text Item

Creating Additional Input Items


l Input Items Overview
l Creating a Check Box
l Creating a List Item
l Creating a Radio Group

Creating Noninput Items


l Noninput Items Overview
l Creating a Display Item
l Creating an Image Item
l Creating a Push Button
l Creating a Calculated Item
l Creating a Hierarchical Tree Item
l Creating a Bean Area Item

Creating Windows and Content Canvases


l Displaying a Form Module in Multiple Windows
l Creating a New Window
l Displaying a Form Module on Multiple Layouts
l Creating a New Content Canvas

Working with Other Canvas Types


l Overview of Canvas Types
l Creating a Stacked Canvas
l Creating a Toolbar
l Creating a Tab Canvas

Producing and Debugging Triggers


l Trigger Overview
l Creating Triggers in Forms Builder
l Specifying Execution Hierarchy
l PL/SQL Editor Features
l Using the Database Trigger Editor
l Using Variables in Triggers
l Adding Functionality with Built-in Subprograms
l Using the Forms Debugger

Adding Functionality to Items


l Coding Item Interaction Triggers
l Interacting with Noninput Items

Displaying Run-Time Messages and Alerts


l Built-Ins and Handling Errors
l Controlling System Messages
l The FORM_TRIGGER_FAILURE Exception
l Triggers for Intercepting System Messages
l Creating and Controlling Alerts
l Handling Server Errors

Using Query Triggers


l Query Processing Overview
l SELECT Statements Issued During Query Processing
l Setting WHERE and ORDER BY clauses and
l
l
l
l
l

ONETIME_WHERE property
Writing Query Triggers
Query Array Processing
Coding Triggers for Enter-Query Mode
Overriding Default Query Processing
Obtaining Query Information at Run Time

Validating User Input


l Validation Process
l Controlling Validation by Using Properties
l Controlling Validation by Using Triggers
l Performing Client-Side Validation with PJCs
l Tracking Validation Status
l Using Built-ins to Control When Validation Occurs

Controlling Navigation
l Using Object Properties to Control Navigation
l Writing Navigation Triggers
l Avoiding the Navigation Trap
l Using Navigation Built-Ins in Triggers

Overriding or Supplementing Transaction Processing


l Transaction Processing Overview
l Using Commit Triggers
l Testing the Results of Trigger DML
l DML Statements Issued during Commit Processing
l Overriding Default Transaction Processing
l Getting and Setting the Commit Status
l Implementing Array DML

Writing Flexible Code


l What is Flexible Code?
l Using System Variables for Flexible Coding
l Using Built-in Subprograms for Flexible Coding
l Copying and Subclassing Objects and Code
l Referencing Objects by Internal ID
l Referencing Items Indirectly

Sharing Objects and Code


l Benefits of Reusable Objects and Code
l Working with Property Classes
l Working with Object Groups
l Copying and Subclassing Objects and Code
l Working with Object Libraries
l Working with SmartClasses
l Reusing PL/SQL
l Working with PL/SQL Libraries

Using WebUtil to Interact with the Client


l Benefits of WebUtil
l Integrating WebUtil into a Form
l Interacting with the Client

Introducing Multiple Form Applications


l Multiple Form Applications Overview
l Starting Another Form Module
l Defining Multiple Form Functionality
l Sharing Data among Modules

Oracle Reports Developer 11g: Build Reports


Introduction to Oracle Reports Developer
l Business Intelligence
l Enterprise Reporting
l Oracle Reports Developer
l Oracle Database 11g
l Oracle Developer Suite 11g
l Oracle Application Server 11g
l OracleAS Reports Services
l OracleAS Reports Services Architecture for the Web

Designing and Running Reports


l Understanding User Requirements
l Designing Reports
l Tabular
l Master-Detail
l Master with Two Details
l Matrix
l Retrieving and Sharing Data
l Running a Report

Enhancing Reports Using the Data Model: Queries and Groups


l The Data Model Objects
l Modifying Properties of a Query
l Applying Changes
l Changing the Group Structure
l Group Hierarchy
l Ordering Data in a Group
l Query Modifications
l Filtering Data in a Group

Enhancing Reports Using the Data Model: Data Sources


l Data Source Types
l Pluggable Data Sources
l Using XML as a Data Source
l Document Type Definition File
l OLAP Data Source
l Using Text as a Data Source
l Using JDBC as a Data Source
l Using REF Cursor Queries

Enhancing Reports Using the Data Model: Creating Columns


l Data Model Columns
l Maintaining Data Source Columns
l Producing File Content Output
l Creating a Column
l Creating Summary Columns
l Displaying Subtotals
l Displaying Percentages
l Creating a Formula Column

Enhancing Reports Using the Paper Layout


l Viewing the Paper Layout
l Designing Multipanel Reports
l Printing Multipanel Reports
l Different Objects in the Paper Layout
l The Paper Layout Layers
l Report Processing
l Paper Layout Tools
l Report Bursting

Controlling the Paper Layout: Common Properties


l Modifying Paper Layout Object Properties
l Common Layout Properties
l Sizing Objects
l Anchors
l Layout Object Relationships
l Pagination Icons in the Paper Layout
l Controlling Print Frequency
l Using Format Triggers

Enhancing Reports Using the Data Model: Queries and Groups


l The Data Model Objects
l Modifying Properties of a Query
l Applying Changes
l Changing the Group Structure
l Group Hierarchy
l Ordering Data in a Group
l Query Modifications
l Filtering Data in a Group

Enhancing Reports Using the Data Model: Data Sources


l Data Source Types
l Pluggable Data Sources
l Using XML as a Data Source
l Document Type Definition File
l OLAP Data Source
l Using Text as a Data Source
l Using JDBC as a Data Source
l Using REF Cursor Queries

Enhancing Reports Using the Data Model: Creating Columns


l Data Model Columns
l Maintaining Data Source Columns
l Producing File Content Output
l Creating a Column
l Creating Summary Columns
l Displaying Subtotals
l Displaying Percentages
l Creating a Formula Column

Enhancing Reports Using the Paper Layout


l Viewing the Paper Layout
l Designing Multipanel Reports
l Printing Multipanel Reports
l Different Objects in the Paper Layout
l The Paper Layout Layers
l Report Processing
l Paper Layout Tools
l Report Bursting

Controlling the Paper Layout: Common Properties


l Modifying Paper Layout Object Properties
l Common Layout Properties
l Sizing Objects
l Anchors
l Layout Object Relationships
l Pagination Icons in the Paper Layout
l Controlling Print Frequency
l Using Format Triggers

Controlling the Paper Layout: Specific Properties


l Properties of a Repeating Frame
l Specifying Print Direction
l Controlling the Number of Records per Page
l Controlling Spacing Between Records
l Minimum Widow Records
l System Variables
l Valid Source Columns
l Displaying File Contents

Web Reporting
l Comparing Static and Dynamic Reporting
l Adding Dynamic Content
l Creating a Report Block
l Invoking the Report Block Wizard
l Examining the Web Source Code
l rw:foreach Tag
l rw:field Tag
l Customizing Reports JSPs

Extending Functionality Using XML


l Why Use XML Report Definitions?
l Creating XML Report Definitions
l Partial Report Definitions: Format Modification Example
l Partial Report Definitions: Format Exception Example
l Full Report Definition: Data Model Modification Example
l Running XML Report Definitions
l Debugging XML Report Definitions

Creating and Using Report Parameters


l Creating User Parameters
l Referencing Parameters in a Report Query
l Using Bind References
l Using Lexical References
l Hints and Tips When Referencing Parameters
l Creating a List of Values
l Referencing System Parameters
l Building a Paper Parameter Form

Embedding a Graph in a Report


l Adding a Graph to a Paper Report
l Adding a Graph to a Web Report
l Selecting the Graph Type
l Selecting the Graph Data
l Adding Options to the Graph
l Customizing Web Graphs
l The rw:graph Tag
l Customizing Graphs Using the Graph.XML File

Enhancing Matrix Reports


l The Matrix Data Model
l The Matrix Paper Layout
l Creating Matrix Summaries
l Creating the Matrix Manually
l The Matrix with Group Data Model
l The Matrix with Group Layout
l Building a Nested Matrix
l Nested Matrix Paper Layout

Coding PL/SQL Triggers


l Types of Triggers in Reports
l Trigger Code
l Using Report Triggers
l Using Data Model Triggers: PL/SQL Group Filter
l Using Data Model Triggers: Parameter Validation
l Using Layout Triggers
l Using Format Triggers
l Event-Based Reporting

Extending Functionality Using the SRW Package


l Contents of the SRW Package
l Outputting Messages
l Executing a Nested Report
l Restricting Data
l Initializing Fields
l Creating a Table of Contents
l Performing DDL Statements
l Setting Format Attributes

Maximizing Performance Using OracleAS Reports Services


l Running Reports Using OracleAS Reports Services
l Report Request Methods
l Oracle Application Server Components
l Enabling Single Sign-On Access
l Running the Web Layout: JSP Run-time Architecture
l Running the Paper Layout: Servlet Run-time Architecture
l Running a Paper Report on the Web
l Queue Manager

Building Reports: Efficiency Guidelines


l Tuning Reports
l Performance Measurement
l Non SQL Data Sources
l Investigating the Data Model
l Investigating the Paper Layout
l Running the Report
l Different Development and Run-Time Environments
l Developing Reports to Run in Different GUIs

Partners :

www.facebook.com/ducateducation

Java
NOIDA

GREATER NOIDA

GHAZIABAD

FARIDABAD

A-43 & A-52, Sector-16,


Noida - 201301, (U.P.) INDIA
Ph. : 0120-4646464
Mb. : 09871055180

E - 35, SITE - 4, Near Swarna


Nagari, Adjacent J.P.
. Golf
Course, Greater Noida (U. P.)
Ph. : 0120-4345190-91-92 to 97
Mb. :09899909738, 09899913475

1, Anand Industrial Estate,


Near ITS College, Mohan Nagar,
Ghaziabad (U.P.)
Ph.: 0120-4835400...98-99
Mb. : 09810831363 / 9818106660
: 08802288258 - 59-60

SCO-32, 1st Floor, Sec.-16,


Faridabad (HARYANA)
Ph. : 0129-4150605-09
Mb. : 09811612707

GURGAON

JAIPUR

1808/2, 2nd floor old DLF,


Near Honda Showroom,
Sec.-14, Gurgaon (Haryana)
Ph. : 0124-4219095-96-97-98
Mb. : 09873477222-333

38,Jai Jawan Colony 3rd,


Near Gaurav Tower,JLN
Marg, Jaipur (Rajsthan)
Ph. : 0141-2550077, 2550202
Mb : 08824246937

Vous aimerez peut-être aussi