Wednesday, July 11, 2018

Oracle Solaris 11 Information Library

Oracle Solaris 11 Information Library

GETTING STARTED WITH ORACLE SOLARIS 11


Start Here  


Oracle Solaris 11 Release Notes  
Oracle Solaris 11 End-of-Feature (EOF) List  
Transitioning From Oracle Solaris 10 to Oracle Solaris 11  

INSTALLING AND UPDATING ORACLE SOLARIS 11

Installing Oracle Solaris 11 Systems  
Creating and Administering Oracle Solaris 11 Boot Environments  
Transitioning From Oracle Solaris 10 JumpStart to Oracle Solaris 11 Automated Installer  
Creating a Custom Oracle Solaris 11 Installation Image  
Adding and Updating Oracle Solaris 11 Software Packages  
Copying and Creating Oracle Solaris 11 Package Repositories  
Oracle Solaris 11 Installation Man Pages  
Image Packaging System Man Pages  

ADMINISTERING ORACLE SOLARIS 11

Creating and Administering Oracle Solaris 11 Boot Environments  
Booting and Shutting Down Oracle Solaris on SPARC Platforms  
Booting and Shutting Down Oracle Solaris on x86 Platforms  
Oracle Solaris Administration: Common Tasks  
Oracle Solaris Administration: Devices and File Systems  
Oracle Solaris Administration: IP Services  
Oracle Solaris Administration: Naming and Directory Services  
Oracle Solaris Administration: Network Interfaces and Network Virtualization  
Oracle Solaris Administration: Network Services  
Oracle Solaris Administration: Oracle Solaris Zones, Oracle Solaris 10 Zones, and Resource Management  
Oracle Solaris Administration: SAN Configuration and Multipathing  
Oracle Solaris Administration: Security Services  
Oracle Solaris Administration: SMB and Windows Interoperability  
Oracle Solaris Administration: ZFS File Systems  
Oracle Solaris Tunable Parameters Reference Guide  
Oracle VTS (Validation Test Suite)  
How to Perform System Archival and Recovery Procedures With Oracle Solaris 11  
International Language Environments Guide  

SECURING THE ORACLE SOLARIS 11 OPERATING SYSTEM

Oracle Solaris 11 Security Guidelines  
Oracle Solaris Administration: Security Services  
Developer's Guide to Oracle Solaris 11 Security  
Trusted Extensions Configuration and Administration  
Trusted Extensions User's Guide  
Trusted Extensions Label Administration  
Trusted Extensions Developer's Guide  
Compartmented Mode Workstation Labeling: Encodings Format  

WORKING WITH THE ORACLE SOLARIS 11 DESKTOP

Oracle Solaris 11 Accessibility Guide for the GNOME Desktop  
Oracle Solaris 11 User's Guide for the GNOME Desktop  
Optimizing the Oracle Solaris 11 Desktop for a Multi-User Environment  

DEVELOPING APPLICATIONS FOR USE WITH ORACLE SOLARIS 11

Introduction to the Oracle Solaris 11 Developer Environment  
Copying and Creating Oracle Solaris 11 Package Repositories  
Linker and Libraries Guide  
ONC+ Developer's Guide  
Resource Management and Oracle Solaris Zones Developer's Guide  
Oracle Solaris Dynamic Tracing Guide  
Programming Interfaces Guide  
Writing Device Drivers  

ORACLE SOLARIS 11 REFERENCE MANUALS

man pages section 1: User Commands  
man pages section 1M: System Administration Commands  
man pages section 2: System Calls  
man pages section 3: Library Interfaces and Headers  
man pages section 3: Basic Library Functions  
man pages section 3: Networking Library Functions  
man pages section 3: Extended Library Functions, Volume 1  
man pages section 3: Extended Library Functions, Volume 2  
man pages section 3: Extended Library Functions, Volume 3  
man pages section 3: Extended Library Functions, Volume 4  
man pages section 3: Curses Library Functions  
man pages section 3: Multimedia Library Functions  
man pages section 4: File Formats  
man pages section 5: Standards, Environments, and Macros  
man pages section 7: Device and Network Interfaces  
man pages section 9: DDI and DKI Driver Entry Points  
man pages section 9: DDI and DKI Kernel Functions  
man pages section 9: DDI and DKI Properties and Data Structures  
Oracle Solaris 11 Installation Man Pages  
Image Packaging System Man Pages  

IMPORTANT INFORMATION FROM PREVIOUS RELEASES

Device Driver Tutorial  
Memory and Thread Placement Optimization Developer's Guide  
Oracle Solaris Modular Debugger Guide  
Multithreaded Programming Guide  
SIP API Developer's Guide  
Oracle Solaris WBEM Developer's Guide  
SPARC Assembly Language Reference Manual  
x86 Assembly Language Reference Manual  
OpenBoot 4.x Command Reference Manual  
Writing FCode 3.x Programs  
Solaris Volume Manager Administration Guide  

RELATED INFORMATION

Oracle Solaris 11 Product Center  
Oracle Solaris 11 How-To Articles  
Oracle Solaris 11 Technologies  
Oracle Solaris 11 Animations and Videos  
Oracle Solaris 11 Training  

LEGAL INFORMATION FOR THIS RELEASE

Accessing Third-Party Notice and License Information for Oracle Solaris 11  
Accessing Open Source Code  





Installing Oracle VM Server 2.2.1, Oracle VM Manager 2.2.0

Installing Oracle VM Server 2.2.1, Oracle VM Manager 2.2.0 

Oracle Virtualization – Installing Oracle VM Server 2.2.1, Oracle VM Manager 2.2.0
Oracle provides virtualization software ranging from bare metal implementations based on Oracle VM Server to a Microsoft Windows/Linux/Mac OS and Solaris deployments based on Oracle Virtual Box. Oracle VM Manager facilitates management of Oracle VM Server.
In real life Oracle VM server runs on a dedicated set of servers and is installed as a bare metal product without the need of an Operating system. Oracle VM Manager is installed on a Linux box. Oracle VirtualBox can be successfully used for testing and self-study of the new features.
1. VirtualBox configuration to run VMserver machine and VMManager machine.
The article assumes that the VirtualBox is downloaded and installed and that both virtual machines are configured as follows.


OEL 54 is installed as a base OS for the OracleVMManager while Oracle VM Server is used for the OracleVM machine. The latter will be discussed in greater details in bullet item 2. Note that in case of OracleVMManager machine Guest additions are installed and the shared folder feature is enabled by placing in the guest /etc/rc.local the following command’ mount -t vboxsf OracleVMServer /media/windows’. Both machines also have multiple NIC defined. Bridged interfaces are required for the ORacleVM and OracleVMManager setup. NAP is for access to the Internet and the host-only adapters are for access from the host OS (Microsoft Windows in my case). All iso images are in the shared folder and the OEL or Oracle VM server iso is specified for the initial OEL and Oracle VM Server installation. For additional information related to OEL installation

2. Installation of Oracle VM Server
Specify the Oracle-VM-Server-2.2.1.iso and start the OracleVM machine.


Skip the testing if already sure about the physical integrity of the media. Press Skip to continue.


Select the model of the keyboard and press OK.


Initialize the drive.


OK the default.


Select Yes to continue.


Review the layout and press OK to continue.


Press OK to continue.


Select eth3 interface for the VM management. Press OK to continue.


Enter 198.169.2.41 and the mask 255.255.255.0. Remember that this address will be used to talk to the Oracle VM Manager later.


Enter the gateway and DNS information as specified below.


Select a hostname and press OK to continue.


Select the time zone and press OK to continue.


Enter a password for the Oracle VM agent and press OK to continue.


Enter the root password and press OK to continue.


Press OK to continue and take a note of the location.


Wait for the installation to complete.


Wait for the installation to complete.


When installation completes press Reboot.


Acknowledge the license agreement.


After that you are about to login.


3. Installation of Oracle VM Manager
The article assumes that OEL is installed and networking is configured so that both OracleVM machine and OracleVM Manager machine can communicate. The /etc/hosts is as follows.
[root@oraclevmmgr racovm]# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.168.2.18 oraclevmmgr.gj.com oraclevmmgr
192.168.2.41 oraclevm.gj.com oraclevm
[root@oraclevmmgr racovm]#
If only iso is available mount it as follows.
[root@oraclevmmgr cdrom]# mount -o loop,rw OracleVM-Manager-2.2.0.iso /media/cdrom
[root@oraclevmmgr cdrom]# cd /media/cdrom
[root@oraclevmmgr cdrom]# ls
EULA LICENSE readme.txt runInstaller.sh scripts source TRANS.TBL
[root@oraclevmmgr cdrom]# ./runInstaller.sh
bash: ./runInstaller.sh: Permission denied
Copy directory structure to a new location to be able to set the permissions.
[root@oraclevmmgr cdrom]# mkdir /media/vmmanager
[root@oraclevmmgr cdrom]# ls
EULA LICENSE readme.txt runInstaller.sh scripts source TRANS.TBL
[root@oraclevmmgr cdrom]# cd ../vmmanager
[root@oraclevmmgr vmmanager]# ls
[root@oraclevmmgr vmmanager]# cp -R /media/cdrom .
[root@oraclevmmgr vmmanager]# ls
cdrom
[root@oraclevmmgr vmmanager]# cd cdrom
[root@oraclevmmgr cdrom]# ls
EULA LICENSE readme.txt runInstaller.sh scripts source TRANS.TBL
[root@oraclevmmgr cdrom]# ./runInstaller.sh
bash: ./runInstaller.sh: Permission denied
[root@oraclevmmgr cdrom]# chmod 777 runInstaller.sh
[root@oraclevmmgr cdrom]#
Execute the installer and respond to the prompts.
[root@oraclevmmgr cdrom]#

[root@oraclevmmgr cdrom]# ./runInstaller.sh

Welcome to Oracle VM Manager 2.2
Please enter the choice: [1|2|3]
1. Install Oracle VM Manager
2. Uninstall Oracle VM Manager
3. Upgrade Oracle VM Manager
1
Starting Oracle VM Manager 2.2 installation …
Do you want to install a new database or use an existing one? [1|2]
1. Install a new Oracle XE database on localhost
2. Use an existing Oracle database in my network
1
Prepare to install the Oracle XE database …
Checking the supported platforms … Done
Checking the prerequisite packages are installed … Done
Checking the available disk space … Done
Installing the oracle-xe-univ package (rpm) now …
Done

Oracle Database 10g Express Edition Configuration
————————————————-
This will configure on-boot properties of Oracle Database 10g Express
Edition. The following questions will determine whether the database should
be starting upon system boot, the ports it will use, and the passwords that
will be used for database accounts. Press to accept the defaults.
Ctrl-C will abort.
Specify the HTTP port that will be used for Oracle Application Express [8080]:
Specify a port that will be used for the database listener [1521]:
Specify a password to be used for database accounts. Note that the same
password will be used for SYS and SYSTEM. Oracle recommends the use of
different passwords for each database account. This can be done after
initial configuration:
Confirm the password:
Do you want Oracle Database 10g Express Edition to be started on boot (y/n) [y]:
Starting Oracle Net Listener…Done
Configuring Database…Done
Starting Oracle Database 10g Express Edition Instance…Done
Installation Completed Successfully.
To access the Database Home Page go to “http://127.0.0.1:8080/apex”
Checking the availability of the database …
Set default database schema to ‘OVS’.
Please enter the password for account ‘OVS’:
Confirm the password:
Creating the Oracle VM Manager database schema …Done
Installing the ovs-manager package (rpm) …
Done
Installing the oc4j package (rpm) …
Done
Please enter the password for account ‘oc4jadmin’:
Confirm the password:
Starting OC4J … Done.
To access the OC4J Home Page and change the password go to http://127.0.0.1:8888/em
Deploying Oracle VM Manager application to OC4J container.
Creating connection pool … Done
Creating data source … Done
Deploying application help … Done
Deploying application … Done
Please enter the keystore password for the Web Service:
Password must be at least 6 characters. Enter password:
Confirm the password:
Setting keystore password for Web Service …administ Done
Do you want to use HTTPS access for Oracle VM Manager (Y|n)Y
Configuring OC4J to use HTTPS … Done
Stopping OC4J … Done
Starting OC4J … Done
Please enter the password for the default account ‘admin’:
Confirm the password:
Configuring SMTP server …
Please enter the outgoing SMTP mail server(e.g. – mail.abc.com, mail.abc.com:25): oraclevmmgr
Mail server checking, may need some time, please wait …
Mail server ‘oraclevmmgr’ check failed, enter Y to change the name and retry or N to keep hostname and continue(Y|n)?localhost
Please enter the outgoing SMTP mail server(e.g. – mail.abc.com, mail.abc.com:25): localhost
Mail server checking, may need some time, please wait …
Setting the SMTP server to localhost …
Done
Please enter an e-mail address for account ‘admin’: root@localhost
Confirm the e-mail address : root@localhost
Updating e-mail address for account ‘admin’ to ‘root@localhost’ …
Done
The console feature is not enabled by default.
For detailed setup, refer to Oracle VM Manager User’s Guide
Installation of Oracle VM Manager completed successfully.
To access the Oracle VM Manager 2.2 home page go to:
https://192.168.2.18:4443/OVS
To access the Oracle VM Manager web services WSDL page go to:
https://192.168.2.18:4443/OVSWS/LifecycleService.wsdl
https://192.168.2.18:4443/OVSWS/ResourceService.wsdl
https://192.168.2.18:4443/OVSWS/PluginService.wsdl
https://192.168.2.18:4443/OVSWS/ServerPoolService.wsdl
https://192.168.2.18:4443/OVSWS/VirtualMachineService.wsdl
https://192.168.2.18:4443/OVSWS/AdminService.wsdl
To access the Oracle VM Manager help page go to:
https://192.168.2.18:4443/help/help
You have mail in /var/spool/mail/root
[root@oraclevmmgr cdrom]#

Now once Oracle VM Manager is installed and configured spicefy the URL above to access it with a browser.


After login we have


A server pool needs to be defined. Press Next to continue. Enter the name of the server pool and the hostname of the server where the Oracle VM Server is installed along with the server agent password and login credentials.


Press Create button to create the server pool.

VNC configuration in solaris

VNC configuration in solaris

Sometimes I find that if I start VNC Server with the default xstartup settings,
I often end up landing on a terminal instead of the Solaris desktop (Java Desktop Session),
for those of you having the same problem (can't access Solaris desktop through VNC), here is one possible solution which worked for me.

1. cd /.vnc, where is your home directory.

2. Edit xstartup file.

2.1. The settings which brought me the command line instead of Solaris JDS.
bash-3.00$ cat xstartup
#!/bin/shPATH=:/pkg/X11/bin:/import/pkg/X11/bin[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresourcesxsetroot -solid greyvncconfig -iconic &xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &twm &bash-3.00$

2.2 Replace the contents of xstartup to the one shown below (I commented out some lines, but you may retain these)
bash-3.00$ cat xstartup

#!/bin/sh#

[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
#xsetroot -solid grey
#vncconfig -iconic &
#xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
gnome-session &

bash-3.00$

2.3 Restart VNC Server

Kill the VNC Server process with the old xstartup settings (ps -ef | grep Xvnc, then use kill -9 ), remove /.vnc/passwd, start another VNC Server using the vncserver command.

Shutdown and Restart Solaris

Shutdown and Restart Solaris

init (runs the shutdown scripts in /etc/rc*)
init 0 (shutdown (on sparc it takes it to the ok prompt)
init s (single user mode)
init 5 (shutdown)
init 6 (reboot)

shutdown (runs the shutdown scripts in /etc/rc*, prints message warning users)
shutdown -y -g 0
shutdown -y -i 0 (shutdown to ok prompt)
shutdown -y -i S (single user mode)
shutdown -y -i 5 (shutdown)
shutdown -y -i 6 (reboot)

shutdown -y -i5 -g0


halt (ungraceful shutdown, use sync;sync;halt)
halt

reboot (ungraceful reboot. Always run sync;sync;reboot. The prefered method is using init.)
reboot (reboot)
reboot -- -r (reconfiguration reboot)
reboot -- -s (reboot into single usermode)

SOL Commands

SOL Commands

SQL :Structured Query Language (SQL) is the set of statements with which all programs and users access data in an Oracle database.
SQL provides statements for a variety of tasks, including:
o Querying data
o Inserting, updating, and deleting rows in a table
o Creating, replacing, altering, and dropping objects
o Controlling access to the database and its objects
o Guaranteeing database consistency and integrity
SQL unifies all of the above tasks in one consistent language.
Common Language for All Relational Databases
All major relational database management systems support SQL, so you can transfer all skills you have gained with SQL from one database to another. In addition, all programs written in SQL are portable. They can often be moved from one database to another with very little modification.
Summary of SQL Statements
The tables in the following sections provide a functional summary of SQL statements and are divided into these categories:
o Data Definition Language (DDL) Statements
o Data Manipulation Language (DML) Statements
o Transaction Control Statements
Data Definition Language (DDL) Statements
Data definition language (DDL) statements enable you to perform these tasks:
CREATE, ALTER, AND DROP SCHEMA OBJECTS
GRANT AND REVOKE PRIVILEGES AND ROLES
Data Manipulation Language (DML) Statements
Data manipulation language (DML) statements query and manipulate data in existing schema objects. These statements do not implicitly commit the current transaction.
Statement
DELETE, INSERT, SELECT, UPDATE
Transaction Control Statements
Transaction control statements manage changes made by DML statements.
Statement
COMMIT, ROLLBACK, SAVEPOINT and SET TRANSACTION.

ORACLE DATABASES
An Oracle database is a collection of data that is treated as a unit. The general purpose of a database is to store and retrieve related information.
The database has logical structures and physical structures.

Logical Database Structures:
The logical structures of an Oracle database include tablespaces, schema objects, data blocks, extents, and segments.
Physical Database Structures:
Every Oracle database has one or more physical datafiles. A database's datafiles contain all the database data. The data of logical database structures such as tables and indexes is physically stored in the datafiles allocated for a database.
The characteristics of datafiles are:
• A datafile can be associated with only one database.
• Datafiles can have certain characteristics set to allow them to automatically extend when the database runs out of space.
• One or more datafiles form a logical unit of database storage called a tablespace
The Data Dictionary
Each Oracle database has a data dictionary. An Oracle data dictionary is a set of tables and views that are used as a read-only reference about the database. For example, a data dictionary stores information about both the logical and physical structure of the database. In addition to this valuable information, a data dictionary also stores such information as:
• the valid users of an Oracle database
• information about integrity constraints defined for tables in the database
• how much space is allocated for a schema object and how much of it is in use
Instance and Database Startup
The three steps to starting a Oracle database and making it available for systemwide use are:
1. Start an instance.
2. Mount the database.
3. Open the database.
Database and Instance Shutdown
The three steps to shutting down a database and its associated instance are:
1. Close the database.
2. Dismount the database.
3. Shut down the instance.

CREATE COMMANDS
Create Table
CREATE TABEL EMP(empno number, ename varchar2(30), hiredate date);
CREATE TABLE scott.emp
(empno NUMBER CONSTRAINT pk_emp PRIMARY KEY,ename VARCHAR2(10) CONSTRAINT nn_ename NOT NULL CONSTRAINT upper_ename CHECK (ename = UPPER(ename)),job VARCHAR2(9),mgr NUMBER CONSTRAINT fk_mgr REFERENCES scott.emp(empno),hiredate DATE DEFAULT SYSDATE, sal NUMBER(10,2) CONSTRAINT ck_sal CHECK (sal > 500),comm NUMBER(9,0) DEFAULT NULL, deptno NUMBER(2) CONSTRAINT nn_deptno NOT NULL CONSTRAINT fk_deptno REFERENCES scott.dept(deptno))PCTFREE 5 PCTUSED 75;
Display the Constraints in Table:
DESC USER_CONSTRAINTS;
SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE FROM USER_CONSTRAINTS WHERE TABLE_NAME='EMPLOYEES';
Storage Example
CREATE TABLE salgrade(grade NUMBER CONSTRAINT pk_salgrade RIMARY KEY USING INDEX TABLESPACE users_a,losal NUMBER,hisal NUMBER ) TABLESPACE human_resource STORAGE (INITIAL 6144 NEXT 6144 MINEXTENTS 1 MAXEXTENTS 5 );
PARALLEL Example
CREATE TABLE emp_dept PARALLEL AS SELECT * FROM scott.emp WHERE deptno = 10;
NOPARALLEL Example
CREATE TABLE emp_dept AS SELECT * FROM scott.emp WHERE deptno = 10;
Partitioned Table Example
CREATE TABLE stock_xactions (stock_symbol CHAR(5),stock_series CHAR(1), num_shares NUMBER(10),price NUMBER(5,2),trade_date DATE) STORAGE INITIAL 100K NEXT 50K) LOGGING PARTITION BY RANGE (trade_date) (PARTITION sx1992 VALUES LESS THAN (TO_DATE('01-JAN-1993','DD-MON-YYYY'))TABLESPACE ts0 NOLOGGING,PARTITION sx1993 VALUES LESS THAN TO_DATE('01-JAN-1994','DD-MON-YYYY'))TABLESPACE ts1,PARTITION sx1994 VALUES LESS THAN (TO_DATE('01-JAN-1995','DD-MON-YYYY'))TABLESPACE ts2);
Object Table Examples
Consider object type DEPT_T:
CREATE TYPE dept_t AS OBJECT(dname VARCHAR2(100),address VARCHAR2(200) );
Object table DEPT holds department objects of type DEPT_T:
CREATE TABLE dept OF dept_t;
CREATE OR REPLACE TYPE salesrep_t AS OBJECT(repId NUMBER,repName VARCHAR2(64));
CREATE TABLE salesreps OF salesrep_t;
REF Example
The following example creates object type DEPT_T and object table DEPT to store instances of all departments. A table with a scoped REF is then created.
CREATE TYPE dept_t AS OBJECT (dname VARCHAR2(100),address VARCHAR2(200) );
CREATE TABLE dept OF dept_t;
CREATE TABLE emp(ename VARCHAR2(100),enumber NUMBER,edept REF dept_t SCOPE IS dept );
The following statement creates a table with a REF column which has a referential constraint defined on it:
CREATE TABLE emp(ename VARCHAR2(100),enumber NUMBER,edept REF dept_t REFERENCES dept);
Create Table Using Select Statements:
CREATE TABLE EMP1 AS SELECT * FROM SCOTT.EMP;
CREATE TABLE DEPTNO AS SELECT * FROM SCOTT.DEPT ORDER BY DEPTNO ASC;
Constraints on Type Columns Example
1.CREATE TYPE address AS OBJECT(hno NUMBER,street VARCHAR2(40),city VARCHAR2(20),zip VARCHAR2(5),phone VARCHAR2(10) );
2. CREATE TYPE person AS OBJECT(name VARCHAR2(40),dateofbirth DATE, homeaddress address,manager REF person );
3.CREATE TABLE persons OF person(homeaddress NOT NULL UNIQUE (homeaddress.phone),CHECK (homeaddress.zip IS NOT NULL),CHECK (homeaddress.city <> 'San Francisco') );
Create Index
An index is a schema object that contains an entry for each value that appears in the indexed column(s) of the table or cluster and provides direct, fast access to rows. A partitioned index consists of partitions containing an entry for each value that appears in the indexed column(s) of the table. A function-based index is an index on expressions. It enables you to construct queries that evaluate the value returned by an expression, which in turn may include functions (built-in or user-defined).
PARALLEL Example
The following statement creates an index using 10 parallel execution servers, 5 to scan SCOTT.EMP and another 5 to populate the EMP_IDX index:
CREATE INDEX emp_idx ON scott.emp (ename) PARALLEL 5;
COMPRESS Example
To create an index with the COMPRESS clause, you might issue the following statement:
CREATE INDEX emp_idx2 ON emp(job, ename) COMPRESS 1;
Cluster Index Example
To create an index for the EMPLOYEE cluster, issue the following statement:
CREATE INDEX ic_emp ON CLUSTER employee;
No index columns are specified, because the index is automatically built on all the columns of the cluster key. For cluster indexes, all rows are indexed.
Partitioned Tables And Indexes
Maintenance of large tables and indexes can become very time and resource consuming. At the same time, data access performance can reduce drastically for these objects. Partitioning of tables and indexes can benefit the performance and maintenance in several ways:
We can devided the rows of a single table into multiple parts,Dividing the table's data in this manner is called "Partitioning the table". Partitioning is useful for very large tables and it is used for..
Improve the Qurey performance,it may be easier to load and delete the data in the partitions.
There are two type of prtitions

Range:
CREATE TABLE EMP1(ENO NUMBER PRIMARY KEY,NAME VARCHAR2(20),SAL NUMBER(8,2),
DEPTNO NUMBER REFERENCES DEPT(DEPTNO))
PARTITION BY RANGE(DEPTNO)
(PARTITION PART1 VALUES LESS THAN(20),
PARTITION PART2 VALUES LESS THAN(30));

Hash:
CREATE TABLE EMP1(ENO NUMBER PRIMARY KEY,NAME VARCHAR2(20),SAL NUMBER(8,2),
DEPTNO NUMBER REFERENCES DEPT(DEPTNO))
PARTITION BY HASH(DEPTNO)
PARTITIONS 2;
Composite Partitioning Tables
Composite partitioning allows range partitions to be hash subpartitioned on a different key. The greater number of partitions increases the possiblities for parallelism and reduces the chances of contention. The following example will range partition the table on invoice_date and subpartitioned these on the invoice_no giving a totol of 32 subpartitions:
CREATE TABLE invoices (invoice_no NUMBER NOT NULL, invoice_date DATE NOT NULL,
comments VARCHAR2(500)) PARTITION BY RANGE (invoice_date) SUBPARTITION BY HASH (invoice_no) SUBPARTITIONS 8
(PARTITION invoices_q1 VALUES LESS THAN (TO_DATE('01/04/2001', 'DD/MM/YYYY')),
PARTITION invoices_q2 VALUES LESS THAN (TO_DATE('01/07/2001', 'DD/MM/YYYY')),
PARTITION invoices_q3 VALUES LESS THAN (TO_DATE('01/09/2001', 'DD/MM/YYYY')),
PARTITION invoices_q4 VALUES LESS THAN (TO_DATE('01/01/2002', 'DD/MM/YYYY'));
Partitioning Indexes
There are two basic types of partitioned index:
Local - All index entries in a single partition will correspond to a single table partition (equipartitioned). They are created with the LOCAL keyword and support partition independance. Equipartioning allows oracle to be more efficient whilst devising query plans.
Global - Index in a single partition may correspond to multiple table partitions. They are created with the GLOBAL keyword and do not support partition independance. Global indexes can only be range partitioned and may be partitioned in such a fashion that they look equipartitioned, but Oracle will not take advantage of this structure.
Both types of indexes can be subdivided further:
Prefixed - The partition key is the leftmost column(s) of the index. Probing this type of index is less costly. If a query specifies the partition key in the where clause partition pruning is possible, that is, not all partitions will be searched.
Non-Prefixed - Does not support partition pruning, but is effective in accessing data that spans multiple partitions. Often used for indexing a column that is not the tables partition key, when you would like the index to be partitioned on the same key as the underlying table.
Local Prefixed Indexes
Assuming the INVOICES table is range partitioned on INVOICE_DATE, the followning are examples of local prefixed indexes:
CREATE INDEX invoices_idx ON invoices (invoice_date) LOCAL(PARTITION invoices_q1 TABLESPACE users,
PARTITION invoices_q2 TABLESPACE users,
PARTITION invoices_q3 TABLESPACE users,
PARTITION invoices_q4 TABLESPACE users);
Global Prefixed Indexes
Assuming the INVOICES table is range partitioned on INVOICE_DATE, the followning examples is of a global prefixed index:
CREATE INDEX invoices_idx ON invoices (invoice_date) GLOBAL PARTITION BY RANGE (invoice_date)
(PARTITION invoices_q1 VALUES LESS THAN (TO_DATE('01/04/2001', 'DD/MM/YYYY')) TABLESPACE users,
PARTITION invoices_q2 VALUES LESS THAN (TO_DATE('01/07/2001', 'DD/MM/YYYY')) TABLESPACE users,
PARTITION invoices_q3 VALUES LESS THAN (TO_DATE('01/09/2001', 'DD/MM/YYYY')) TABLESPACE users,
PARTITION invoices_q4 VALUES LESS THAN (MAXVALUE) TABLESPACE users);
Create Procedures
A procedure is a group of PL/SQL statements that you can call by name.
Stored procedures offer advantages in the areas of development, integrity, security, performance, and memory allocation.
CREATE TABEL EMP (EMPNO NUMBER, ENAME VARCHAR2 (30);
USING SELECT STATEMENT:
CREATE OR REPLACE PROCEDURE Get_Ename(Eno IN EMP.EMPNO%TYPE,
NAME OUT EMP.ENAME%ROWTYPE) AS
BEGIN
SELECT ENAME INTO NAME FROM EMP WHERE EMPNO=Eno;
END;
/ (OR)
CREATE OR REPLACE PROCEDURE Get_Ename(Eno IN number,
NAME OUT varcahr2) AS
BEGIN
SELECT ENAME INTO NAME FROM EMP WHERE EMPNO=Eno;
END;/
Create Variable: VARIABLE X VARCHAR2(30);
EXEC GET_ENAME(7788, :X)
PRINT X;
USING DELETE STATEMENT:
CREATE OR REPLACE PROCEDURE fire_emp1(Emp_id NUMBER) AS
BEGIN
DELETE FROM Emp_tab WHERE Empno = Emp_id;
END;
/
USING UPDATE STATEMENT:
CREATE PROCEDURE sam.credit (acc_no IN NUMBER, amount IN NUMBER) AS
BEGIN
UPDATE accounts
SET balance = balance + amount
WHERE account_id = acc_no;
END;
Create Functions
A stored function (also called a user function) is a set of PL/SQL statements you can call by name. Stored functions are very similar to procedures, except that a function returns a value to the environment in which it is called.
CREATE FUNCTION get_bal(acc_no IN NUMBER)
RETURN NUMBER
IS acc_bal NUMBER(11,2);
BEGIN
SELECT balance
INTO acc_bal
FROM accounts
WHERE account_id = acc_no;
RETURN(acc_bal);
END;

Create Sequence
A sequence is a database object from which multiple users may generate unique integers. You can use sequences to automatically generate primary key values.
CREATE SEQUENCE eseq INCREMENT BY 10;
CREATE SEQUENCE empno start with 1 increment by 1 maxvalue 100 minvalue 1 cycle cache 5;
Select empno.nextval from dual;
Select empno.currval from dual;
Create Schema
To create multiple tables and views and perform multiple grants in a single transaction.
To execute a CREATE SCHEMA statement, Oracle executes each included statement. If all statements execute successfully, Oracle commits the transaction. If any statement results in an error, Oracle rolls back all the statements.
Create Synonym
A synonym is an alternative name for a table, view, sequence, procedure, stored function, package, materialized view, Java class schema object,

CREATE SYNONYM market FOR scott.market_research;
CREATE PUBLIC SYNONYM emp FOR scott.emp@sales;
A synonym may have the same name as the base table, provided the base table is contained in another schema.
Create Tablespace
A tablespace is an allocation of space in the database that can contain schema objects. When you create a tablespace, it is initially a read-write tablespace.
This statement creates a tablespace named TABSPACE_2 with one datafile:

A database is divided into logical storage units called tablespaces, which group related logical structures together. For example, tablespaces commonly group all of an application's objects to simplify some administrative operations.

CREATE TABLESPACE tabspace_2
DATAFILE 'diska:tabspace_file2.dat' SIZE 20M
DEFAULT STORAGE (INITIAL 10K NEXT 50K MINEXTENTS 1 MAXEXTENTS 999)
Create Cluster
A cluster is a schema object that contains data from one or more tables, all of which have one or more columns in common. Oracle stores together all the rows (from all the tables) that share the same cluster key. They can be created to increase the performance of data retrieval.
Clustered Tables Related data stored together more efficiently
Non Clustered Tables Related data stored differently and taking up more space.
CREATE CLUSTER personnel (department_number NUMBER(2)) SIZE 512 STORAGE (INITIAL 100K NEXT 50K);
Adding Tables to a Cluster
The following statements add the EMP and DEPT tables to the cluster:
CREATE TABLE emp (empno NUMBER PRIMARY KEY, ename VARCHAR2(10) NOT NULL CHECK (ename = UPPER(ename)), job VARCHAR2(9), mgr NUMBER REFERENCES scott.emp(empno), hiredate DATE CHECK (hiredate < TO_DATE ('08-14-1998', 'MM-DD-YYYY')), sal NUMBER(10,2) CHECK (sal > 500), comm NUMBER(9,0) DEFAULT NULL, deptno NUMBER(2) NOT NULL ) CLUSTER personnel (deptno);

CREATE TABLE dept (deptno NUMBER(2),dname VARCHAR2(9),loc VARCHAR2(9)) CLUSTER personnel (deptno);
Create Trigger
A database trigger is
• A stored PL/SQL block associated with a table, a schema, or the database
• An anonymous PL/SQL block or a call to a procedure implemented in PL/SQL or Java
Oracle automatically executes a trigger when specified conditions occur.
Example:
CREATE TABLE departments(ID NUMBER(10) NOT NULL,DESCRIPTION VARCHAR2(50) NOT NULL);
ALTER TABLE departments ADD(CONSTRAINT dept_pk PRIMARY KEY (ID));
CREATE SEQUENCE dept_seq;
CREATE OR REPLACE TRIGGER dept_bir BEFORE INSERT ON departments
FOR EACH ROW
WHEN (new.id IS NULL)
BEGIN
SELECT dept_seq.NEXTVAL INTO :new.id FROM dual;
END;
/
CREATE OR REPLACE TRIGGER dept_bir
BEFORE INSERT ON departments
FOR EACH ROW
BEGIN
SELECT dept_seq.NEXTVAL
INTO :new.id
FROM dual;
END;
/
CREATE OR REPLACE TRIGGER dept_bir
BEFORE INSERT ON departments
FOR EACH ROW
BEGIN
IF new.id IS NOT NULL THEN
RAISE_APPLICATION_ERROR(-20000, 'ID cannot be specified');
ELSE
SELECT dept_seq.NEXTVAL
INTO :new.id
FROM dual;
END IF;
END;
/
Create User
CREATE USER sidney IDENTIFIED BY welcome DEFAULT TABLESPACE cases_ts QUOTA 10M ON cases_ts QUOTA 5M ON temp_ts QUOTA 5M ON system PROFILE engineer PASSWORD EXPIRE;

CREATE USER ops$george IDENTIFIED EXTERNALLY DEFAULT TABLESPACE accs_ts TEMPORARY TABLESPACE temp_ts QUOTA UNLIMITED ON accs_ts QUOTA UNLIMITED ON temp_ts;
Create View
To define a view, a logical table based on one or more tables or views. A view contains no data itself. The tables upon which a view is based are called base tables.

CREATE VIEW dept20 AS SELECT ename, sal*12 annual_salary FROM emp WHERE deptno = 20;

CREATE VIEW clerk (id_number, person, department, position) AS SELECT empno, ename, deptno, job FROM emp WHERE job = 'CLERK' WITH CHECK OPTION CONSTRAINT wco;

CREATE VIEW EMP_DTLS AS
SELECT E.EMPNO,E.ENAME,D.DNAME,E.SAL+NVL(COMM,0) "TOTALSAL" FROM EMP E,DEPT D WHERE D.DEPTNO=E.DEPTNO;

Join View Example
CREATE VIEW ed AS SELECT e.empno, e.ename, d.deptno, d.loc FROM emp e, dept d WHERE e.deptno = d.deptno

View created.
SELECT column_name, updatable FROM user_updatable_columns WHERE table_name = 'ED';

Read-Only View Example
CREATE VIEW clerk (id_number, person, department, position) AS SELECT empno, ename, deptno, job FROM emp WHERE job = 'CLERK' WITH READ ONLY;
Create Materialized View
For data warehousing purposes, a materialized view definition can include an aggregation (SUM, COUNT(x), COUNT(*), COUNT(DISTINCT x), AVG, VARIANCE, STDDEV, MIN, and MAX) and any number of joins. Such materialized views can be used in query rewrite, an optimization technique that transforms a user request written in terms of master tables into a semantically equivalent request that includes one or more materialized view. In a data warehousing environment, all detail tables must be local.
CREATE MATERIALIZED VIEW mv1 REFRESH FAST ON COMMIT
AS SELECT t.month, p.prod_name, SUM(f.sales) AS sum_sales
FROM time t, product p, fact f
WHERE f.curDate = t.curDate AND f.item = p.item
GROUP BY t.month, p.prod_name
BUILD IMMEDIATE;
DROP MATERIALIZED VIEW LOG ON parts;
ALTER Commands:
Alter Cluster
The following statement alters the CUSTOMER cluster in the schema SCOTT:
ALTER CLUSTER scott.customer SIZE 512 STORAGE (MAXEXTENTS 25);
ALTER CLUSTER scott.customer DEALLOCATE UNUSED KEEP 30 K;
ADD Constraints:
ALTER TABLE EMP ADD CONSTRAINTS PK_EMPNO PRIMARY KEY(EMPNO);
ALTER TABLE EMP ADD CONSTRAINTS FK_DEPTNO FOREIGN KEY(DEPTNO) REFERENCES DEPT(DEPTNO);
Alter Index
ALTER INDEX scott.customer INITRANS 5 STORAGE (NEXT 100K);
Alter Procedure
ALTER PROCEDURE henry.close_acct COMPILE;
Alter Sequence
ALTER SEQUENCE eseq MAXVALUE 1500;
Alter Table
Add Column Example
ALTER TABLE emp ADD(thriftplan NUMBER(7,2),loancode CHAR(1) NOT NULL);
Modify Column Examples
ALTER TABLE emp MODIFY (thriftplan NUMBER(9,2));

DISABLE Example
ALTER TABLE customers DISABLE UNIQUE (areaco, phoneno) CASCADE;
DROP PRIMARY KEY Example
ALTER TABLE t1 DROP (pk) CASCADE CONSTRAINTS;
ALTER TABLE t1 DROP (pk, fk, c1);
Drop Constraint Examples
ALTER TABLE dept DROP PRIMARY KEY CASCADE;
ALTER TABLE dept DROP UNIQUE (dname);
Alter Tablespace
ALTER TABLESPACE accounting BEGIN BACKUP;
ALTER TABLESPACE accounting END BACKUP;
Alter Trigger
ALTER TRIGGER reorder DISABLE;
ALTER TRIGGER reorder ENABLE;
Alter View
ALTER VIEW customer_view COMPILE;
DELETE COMMANDS
DELETE FROM temp_assign;
DELETE FROM emp WHERE JOB = 'SALESMAN'AND COMM < 100; DELETE FROM (select * from emp)WHERE JOB = 'SALESMAN'AND COMM < 100; DELETE FROM emp WHERE job = 'SALESMAN' AND COMM < 100 RETURNING sal INTO:1; Delete Table
DROP TABLE test_data;
RENAME dept TO emp_dept;
CREATE TABLE temporary (newname, col2, col3)AS SELECT oldname, col2, col3 FROM static;
DROP TABLE static;
RENAME temporary TO static;
Drop Columns
Logical Delete
On large tables the process of physically removing a column can be very time and resource consuming. For this reason you may decide to logically delete it:
ALTER TABLE table_name SET UNUSED (column_name);
ALTER TABLE table_name SET UNUSED (column_name1, column_name2);
Physical Delete
To physically drop a column you can use one of the following syntaxes, depending on whether you wish to drop a single or multiple columns:
ALTER TABLE table_name DROP COLUMN column_name;
ALTER TABLE table_name DROP (column_name1, column_name2);

Delete Cluster
DROP CLUSTER geography INCLUDING TABLES CASCADE CONSTRAINTS;
Delete Function
DROP FUNCTION riddley.new_acct;
Delete Index
DROP INDEX monolith;
Delete Procedure
DROP PROCEDURE kerner.transfer
Delete Tablespace
DROP TABLESPACE TableSpaceName INCLUDING CONTENTS CASCADE CONSTRAINTS;
Delete Trigger
DROP TRIGGER ruth.reorder;
Delete User
DROP USER bradley CASCADE;
Delete View
DROP VIEW view_data;
SELECT AND SUBQUERIES
SELECT * FROM EMP;
SELECT ‘SELECT * FROM ‘||TABLE_NAME||’;’ FROM USER_TABLES;
NULL Function
SELECT EMPNO, ENAME,SAL,COMM FROM EMP WHERE COMM IS NULL;
SELECT EMPNO,ENAME,SAL,COMM FROM EMP WHERE COMM IS NOT NULL;
SELECT SAL+NVL(COMM,0) FROM EMP;
GROUP BY Examples
SELECT * FROM emp WHERE deptno = 30;
SELECT ename, job, sal, deptno FROM emp WHERE NOT (job = 'SALESMAN' AND deptno = 30);
SELECT a.deptno "Department",a.num_emp/b.total_count "%Employees", a.sal_sum/b.total_sal "%Salary" FROM (SELECT deptno, COUNT(*) num_emp, SUM(SAL) sal_sum FROM scott.emp GROUP BY deptno) a,(SELECT COUNT(*) total_count, SUM(sal) total_sal FROM scott.emp) b ;
SELECT COUNT(*) * 100 FROM emp SAMPLE BLOCK (1);
SELECT deptno, MIN(sal), MAX (sal) FROM emp GROUP BY deptno;
SELECT deptno, MIN(sal), MAX (sal)FROM emp WHERE job = 'CLERK' GROUP BY deptno;
SELECT EMP_NO,COUNT(EMP_NO) FROM EMP_ATTENDANCE_DTLS WHERE
SUBSTR(TO_CHAR(ENTRY_DT,'DD/MM/YY'),4,5)='03/05' GROUP BY EMP_NO
Display the Top or Bottom level rows
SELECT LEVEL, MAX(SAL) FROM EMP WHERE LEVEL= 1 OR LEVEL=2 CONNECT BY PRIOR SAL > SAL GROUP BY LEVEL
SELECT LEVEL, MIN(SAL) FROM EMP WHERE LEVEL=2 OR LEVEL =3 CONNECT BY PRIOR SAL < SAL GROUP BY LEVEL SELECT EMPNO,ENAME,SAL FROM EMP A WHERE 3>=(SELECT COUNT(DISTINCT SAL) FROM EMP B WHERE B.SAL>=A.SAL) ORDER BY SAL DESC;

SELECT EMPNO,ENAME,SAL FROM EMP A WHERE 3>=(SELECT COUNT(DISTINCT SAL) FROM EMP B WHERE A.SAL>=B.SAL) ORDER BY SAL DESC;

SELECT EMPNO,ENAME,SAL FROM (SELECT * FROM EMP ORDER BY SAL DESC)
WHERE ROWNUM<=3; SELECT EMPNO,ENAME,SAL FROM (SELECT * FROM EMP ORDER BY SAL) WHERE ROWNUM<=3; Having Examples
SELECT deptno, MIN(sal), MAX(sal)FROM emp WHERE job = 'CLERK' GROUP BY deptno HAVING MIN(sal) < 1000; ORDER BY Examples
SELECT * FROM emp WHERE job = 'SALESMAN' ORDER BY comm DESC;
SELECT ename, deptno, sal FROM emp ORDER BY deptno ASC, sal DESC;
SELECT ename, deptno, sal FROM emp ORDER BY 2 ASC, 3 DESC;
FOR UPDATE Examples
SELECT empno, sal, comm FROM emp, dept WHERE job = 'CLERK' AND emp.deptno = dept.deptno AND loc = 'NEW YORK' FOR UPDATE;
SELECT empno, sal, comm FROM emp, dept WHERE job = 'CLERK' AND emp.deptno = dept.deptno AND loc = 'NEW YORK' FOR UPDATE OF emp.sal;
Table Collection Examples
CREATE TYPE ProjectType AS OBJECT(pno NUMBER, pname CHAR(31),budget NUMBER);
CREATE TYPE ProjectSet AS TABLE OF ProjectType;
Sub query Examples
SELECT ename, deptno FROM emp WHERE deptno =(SELECT deptno FROM emp WHERE ename = 'TAYLOR');
UPDATE emp SET sal = sal * 1.1 WHERE empno NOT IN (SELECT empno FROM bonus);
CREATE TABLE newdept (deptno, dname, loc) AS SELECT deptno, dname, loc FROM dept;
SELECT * FROM EMP_DTLS WHERE TOTALSAL= (SELECT MAX(TOTALSAL) FROM EMP_DTLS);
SELECT * FROM EMP_DTLS WHERE TOTALSAL >(SELECT TOTALSAL FROM EMP_DTLS WHERE EMPNO = 7369);
SELECT * FROM EMP_DTLS WHERE TOTALSAL <(SELECT TOTALSAL FROM EMP_DTLS WHERE EMPNO=7839) ORDER BY TOTALSAL; Equijoin Examples
This equijoin returns the name and job of each employee and the number and name of the department in which the employee works:
SELECT ename, job, dept.deptno, dname FROM emp, dept WHERE emp.deptno = dept.deptno;
SELECT ename, job, dept.deptno, dname FROM emp, dept WHERE emp.deptno = dept.deptno AND job = 'CLERK';
Ex:
SELECT L.EMP_LEAVE_ID,L.EMP_NO,L.LEAVE_REASON,M.NAME,M.SURNAME FROM EMP_LEAVE_DTLS L,MST_EMPLOYEES M WHERE L.EMP_NO=M.EMP_NO AND L.EMP_NO=1421;
Self Join Example
The following query uses a self join to return the name of each employee along with the name of the employee's manager:
SELECT e1.ename||' works for '||e2.ename "Employees and their Managers" FROM emp e1, emp e2 WHERE e1.mgr = e2.empno;
Outer Join Examples
This query uses an outer join to extend the results of the Equijoin example above:
SELECT ename, job, dept.deptno, dname FROM emp, dept WHERE emp.deptno (+) = dept.deptno;
SELECT ename, job, dept.deptno, dname FROM emp, dept WHERE emp.deptno (+) = dept.deptno AND job (+) = 'CLERK';
SELECT orderno, custno, TO_CHAR(orderdate, 'MON-DD-YYYY') "ORDERDATE" FROM orders;
The following outer join returns all customers and the dates they placed orders. The (+) operator ensures that customers who placed no orders are also returned:
SELECT custname, TO_CHAR (orderdate, 'MON-DD-YYYY') "ORDERDATE" FROM customers, orders WHERE customers.custno = orders.custno (+)
Inner Join
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME FROM EMP E,DEPT D WHERE
E.DEPTNO=D.DEPTNO
In Oracle 9i
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME FROM EMP E inner join DEPT D on
E.DEPTNO=D.DEPTNO
Left Outer Join
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME FROM EMP E,DEPT D WHERE
E.DEPTNO(+)=D.DEPTNO
In Oracle 9i
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME FROM EMP E left outer join DEPT D on
E.DEPTNO)=D.DEPTNO
Right Outer Join
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME FROM EMP E,DEPT D WHERE
E.DEPTNO=D.DEPTNO(+)
In Oracle 9i
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME FROM EMP E right outer join DEPT D on
E.DEPTNO)=D.DEPTNO
Full Outer Join
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME FROM EMP E,DEPT D WHERE
E.DEPTNO(+)=D.DEPTNO
UNION
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME FROM EMP E,DEPT D WHERE
E.DEPTNO=D.DEPTNO(+);
In Oracle 9i
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME FROM EMP E full outer join DEPT D on
E.DEPTNO)=D.DEPTNO
DISTINCT Example:
SELECT EMPNO,ENAME "Employee Name",SAL,JOB FROM EMP;
SELECT ENAME||JOB AS "EMP INFO" FROM EMP;
SELECT DISTINCT DEPTNO,JOB FROM EMP;
SELECT EMPNO,ENAME,SAL FROM EMP WHERE SAL BETWEEN 2000 AND 3000;
SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP WHERE DEPTNO IN(10,20);
SELECT EMPNO,ENAME,SAL FROM EMP WHERE ENAME LIKE'S%';
SELECT EMPNO,ENAME,SAL FROM EMP WHERE ENAME LIKE'%T';
SELECT EMPNO,ENAME,SAL FROM EMP WHERE JOB NOT IN('MANAGER','PRESIDENT');
SELECT EMPNO,ENAME,SAL FROM EMP ORDER BY SAL;
CHARACTER FUNCTIONS:
SELECT SUBSTR('SQL COMMANDS',1,3) FROM DUAL;
SELECT LOWER('ORACLE') FROM DUAL;
SELECT LENGTH('ORACLE') FORM DUAL;
SELECT INITCAP('ORACLE') FROM DUAL;
SELECT CONCAT(ENAME,JOB) FROM EMP;
SELECT LPAD(SAL,11,'*') FROM EMP; SELECT RPAD(SAL,11,'*') FROM EMP;
NUMBER FUNCTIONS:
SELECT ROUND(2356.2345,2),ROUND(2541.012,0),ROUND(3698.235,-1) FROM DUAL;
SELECT TRUNC(2356.2345,2),TRUNC(2541.012,0),TRUNC(3698.235,-1) FROM DUAL;
SELECT EMPNO,ENAME,SAL,MOD(SAL,2000) FROM EMP WHERE EMPNO=7566;
DATE FUNCTIONS:
SELECT SYSDATE FROM DUAL;
SELECT HIREDATE,HIREDATE+7,HIREDATE-7,SYSDATE-HIREDATE FROM EMP WHERE HIREDATE LIKE'%JUN%';
SELECT MONTHS_BETWEEN(SYSDATE,HIREDATE) FROM EMP WHERE EMPNO=7566;
SELECT HIREDATE,ADD_MONTHS(HIREDATE,3),ADD_MONTHS(HIREDATE,-3) FROM EMP WHERE DEPTNO=20;
SELECT HIREDATE,NEXT_DAY(HIREDATE,'FRIDAY'),NEXT_DAY(HIREDATE,6) FROM EMP WHERE DEPTNO=10;
SELECT SYSDATE,NEXT_DAY(SYSDATE,'FRIDAY'),NEXT_DAY(SYSDATE,2) FROM DUAL;
CANVERTION FUNCTIONS:
SELECT TO_CHAR(SYSDATE,'DAY,DDTH MONTH YYYY') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'HH:MI:SS') FROM DUAL;
SELECT TO_CHAR(SAL,'$9,0000') FROM EMP;
SELECT EMPNO,ENAME,SAL FROM EMP WHERE SAL>TO_NUMBER('1500');
SELECT * FROM EMP WHERE SUBSTR(HIREDATE,4,3)='JAN';
SELECT * FROM EMP WHERE SUBSTR(TO_CHAR(HIREDATE,'DD/MM/YY'),4,5)='01/82';
SELECT * FROM EMP WHERE SUBSTR(TO_CHAR(HIREDATE,'DD/MM/YYYY'),4,2)='01';
GENERAL FUNCTIONS:
SELECT USER FROM DUAL;
SELECT VSIZE('HELLO') FROM DUAL;
SELECT ENAME,JOB,SAL,DECODE(JOB,'CLERK',1.10*SAL,'MANAGER',2*SAL)"RECEIVED SALARY" FROM EMP;
SELECT DECODE(COMM,NULL,'NOT AVAILABLE',COMM) FROM EMP;
SELECT HIREDATE,DECODE(SUBSTR(HIREDATE,4,3),'DEC','EMPLOYEE JOINED IN DECEMBER','FEB','EMPLOYEE JOINED IN FEBRUARY',
HIREDATE) FROM EMP
SET OPARATORS:
UNION:
SELECT JOB,DEPTNO FROM EMP WHERE DEPTNO=10
UNION
SELECT JOB,DEPTNO FROM EMP WHERE DEPTNO=30;
UNION ALL:
SELECT JOB,DEPTNO FROM EMP WHERE DEPTNO=10
UNION ALL
SELECT JOB,DEPTNO FROM EMP WHERE DEPTNO=30;
INTERSECT:
SELECT JOB FROM EMP WHERE DEPTNO=10
INTERSECT
SELECT JOB FROM EMP WHERE DEPTNO=30;
MINUS:
SELECT JOB FROM EMP WHERE DEPTNO=10
MINUS
SELECT JOB FROM EMP WHERE DEPTNO=30;
TRUNCATE
TRUNCATE TABLE emp PRESERVE SNAPSHOT LOG;
TRUNCATE TABLE stock;
UPDATE
UPDATE emp SET comm = NULL WHERE job = 'TRAINEE';
UPDATE emp SET job = 'MANAGER', sal = sal + 1000, deptno = 20 WHERE ename = 'JONES';
INSERT
INSERT INTO dept VALUES (50, 'PRODUCTION', 'SAN FRANCISCO');
INSERT INTO emp (empno, ename, job, sal, comm, deptno)VALUES (7890, 'JINKS', 'CLERK', 1.2E3, NULL, 40);
INSERT INTO (SELECT empno, ename, job, sal, comm, deptno FROM emp) VALUES (7890, 'JINKS', 'CLERK', 1.2E3, NULL, 40);
Sub Query Example
INSERT INTO bonus SELECT ename, job, sal, comm FROM emp WHERE comm > 0.25 * sal OR job IN ('PRESIDENT', 'MANAGER');
INSERT INTO scott.accounts@sales (acc_no, acc_name) VALUES (5001, 'BOWER');
Sequence Example
INSERT INTO emp VALUES (empseq.nextval, 'LEWIS', 'CLERK', 7902, SYSDATE, 1200, NULL, 20);

GRANT PRIVILEGES AND ROLES
GRANT CREATE SESSION TO richard;
GRANT CREATE TABLE TO travel_agent;
GRANT READ ON DIRECTORY bfile_dir1 TO scott WITH GRANT OPTION;
GRANT ALL ON bonus TO jones WITH GRANT OPTION;
GRANT SELECT, UPDATE ON golf_handicap TO PUBLIC;
GRANT REFERENCES (empno), UPDATE (empno, sal, comm)ON scott.emp TO blake;


REVOKE PRIVILEGES AND ROLES
REVOKE DROP ANY TABLE FROM bill, mary;
REVOKE CREATE TABLESPACE FROM controller;



create TABLE : This is a DDL command in SQL that creates a new table in a database.

create TABLE table-name (column-name data-type [size] NOT NULL/DEFAULT default-value] CHECK (column-name 0) UNIQUE (column-name) PRIMARY KEY (column-name) FOREIGN KEY (column-name) REFERENCES table-name)
ALTER TABLE : This is a DDL command in SQL that modifies the structure of an existing table.
Syntax : ALTER TABLE table-name ADD (column-name data-type [size] [NOT NULL DEFAULT]...)
primary key definition / foreign key definition
DROP PRIMARY KEY / DROP FOREIGN KEY)
DROP TABLE : This is DDL command in SQL that deletes the an existing table. Once you delete a table, all data contained in it is lost and cannot be recovered. The storage space used by this table is also released.
Syntax : DROP TABLE table-name

Interacting with a Database :

SELECT : This is a DML command in SQL that retrieves data from the database in the form of query results. The command supports the following keywords and clauses :
FROM This keyword specifies the name of the table.
* This keyword selects all the columns of the table.
WHERE This keyword gives the search condition that specifies the data to be retrieved.
AND This operator is used to combine two or more search conditions.
ORDER BY This keyword sorts the query result on one or more columns.
GROUP BY This keyword groups the query result and lets you generate summary result for each group.
NULL values This value indicates that the data is not present.
Subquery This is the query that is place inside the main query. It passes its query result to the main query.
INSERT : This is a DML command in SQL that you use to add data in rows of a table.
SYNTAX : INSERT INTO table-name (column-names) VALUES (constant/NULL)
UPDATE : This is a DML command in SQL that you use to change data on rows of a table.
Syntax : UPDATE table-name SET column-name-value WHERE condition
DELETE : This is a DML command in SQL that removes one or more rows of data from a table.
Syntax : DELETE FROM table-name WHERE condition.
End-user's View of a Database :
Views : Views are relations that are derived from one or more source tables. Views have the following features:
Views let you restrict the access to data so that end-users see data relevant to them.
Views do not physically exist in the database and only their definition is stored by an RDBMS.
An RDBMS accesses the source tables for data to be retrieved from a view.
Any changes that users make to views do not reflect in the source tables if the view has been created using a Join condition.
Views created WITH CHECK OPTION allows for an added measure of security in a view. For example, the user will not be able to insert or update a row that could not be selected by the view-with check option prevents this from happening.
create VIEW : A view can be created using the create VIEW command.
Syntax : create VIEW view-name (column-names) AS query.
Retrieving Data from a View : Once you create a view, you can retrieve data from it using the SELECT command, just as you do for a table.
Restricting Access to a Database :
GRANT : This is a DCL command in SQL that you use to grant a specific set of authorities to one or more users.
Syntax : GRANT (SQL command) (column-names) ON table-name to user-name.
REVOKE : This is a DCL command in SQL that you use to take away a specific set of authorities from one or more users.
Syntax : REVOKE (SQL command) ON table-name to user-name


Introduction Materialized views
Materialized views are stored summaries of queries containing precomputed results. Materialized views greatly improve data warehouse query processing.The existence of a materialized view is transparent to SQL applications, so a DBA can create or drop materialized views at any time without affecting the validity of SQL applications.
Materialized views improve query performance by precalculating expensive join and aggregation operations on the database prior to execution time and storing these results in the database. The query optimizer can make use of materialized views by automatically recognizing when an existing materialized view can and should be used to satisfy a request. It then transparently rewrites the request to use the materialized view. Queries are then directed to the materialized view and not to the underlying detail tables or views. Rewriting queries to use materialized views rather than detail relations results in a significant performance gain.
Materialized views can be refreshed automatically whenever the data is changed in the underlying tables. The refresh method can be incremental (fast refresh) or complete. Incremental method re-populates only the changed data. Complete method truncates and rebuilds the view. The refresh process can be enabled by adding the REFRESH clause while creating the materialized view. You can suppress the refresh process for the entire life of the view.
Example 1 :
The following statement creates and populates a materialized view SALES_BY_MONTH_BY_STATE. The materialized view will be populated with data as soon as the statement executes successfully, and subsequent refreshes will be accomplished by reexecuting the materialized view's query.
CREATE MATERIALIZED VIEW sales_by_month_by_state
TABLESPACE my_ts
PARALLEL (10)
ENABLE QUERY REWRITE
BUILD IMMEDIATE
REFRESH COMPLETE AS
SELECT t.month, g.state, SUM(sales) AS sum_sales
FROM fact f, time t, geog g
WHERE f.cur_date = t.cur_date
AND f.city_id = g.city_id
GROUP BY month, state;

The fact table stores the actual data about the sales by month and state, time table has the day,month, year dimenstions and geog stores the state names. This view is built and populated with data immediately.
Lets asssume that you asked oracle to calculate the same values in a query and if query_rewrite is allowed on your server, the optimizer will automatically use the values in the above precomputed view.
NOTES:
1. Set QUERY_REWRITE_ENABLE=TRUE in init.ora
2. Set JOB_QUEUE_PROCESSES=1 ( 1 or more based on your requirements).
RESTRICTIONS:
1. Materialized views consume storage space. Be aware to provide storage parameters according to the data it holds.
2. There cannot be any set functions like UNION, MINUS in the underlying query for materialized views.
Syntax for Drop the users:
If user BRADLEY's schema contains no objects, you can drop BRADLEY by issuing the statement:
DROP USER bradley;

If BRADLEY's schema contains objects, you must use the CASCADE clause to drop BRADLEY and the objects:
DROP USER bradley CASCADE;

Clustered and Non-clustered Tables



PL/SQL

It Procedural Language, we can execute a block of statements at a time.
Structure of PL/SQL Program:
It contains Three Sections
DECLAR
Declaration of Variable, constraints and cursors;
BEGIN
Execution of SQL and PL/SQL Statements;
EXCEPTION
Exception Handlers;
END;
/
There are two types of PL/SQL blocs.
1. Anonymous Block: According to Oracle server it any PL/SQL block is not having any specific name is called “Anonymous Block”.
2. Name Block: According to Oracle server it any PL/SQL block is having specific name is called “Name Block”.
Datatypes: What ever datatypes SQL supports, the same datatypes PL/SQL support. And addition it support BOOLEN datatype.
CHAR it is fixed length the range is 32,767.
VARCHAR2 the range is 32,767.
CREATING A FILE: SQL> ED EX: ED ADDTION
EXECUT THE FILE : SQL> @ EX: @ ADDTION.
DISPLAY THE OUTPUT: SET SERVEROUTPUT ON;
Program for Adding Two Numbers:
DECLARE
A NUMBER :=&A;
B NUMBER :=&B;
C NUMBER;
BEGIN
C:=A+B;
DBMS.OUTPUT.PUT_LINE(‘SUM=’||C);
END;
/
DBMS.OUTPUT: It is a predefine Package is used to display the output on the screen.
PUT_LINE: It is a procedure defined inside of DBMS.OUTPUT package.

Finding the Length of String?
DECLARE
A NUMBER:=&A;
B NUMBER;
BEGIN
B:=LENGTH(A);
DBMS.OUTPUT.PUT_LINE(‘Length of’|| A ||‘is’|| B);
END;
/


Find the First and Last dist of String
DECLARE
A VARCHAR2(32767):='&A';
F CHAR;
L CHAR;
BEGIN
F:=SUBSTR(A,1,1);
L:=SUBSTR(A,-1);
DBMS_OUTPUT.PUT_LINE('First Char is'||F);
DBMS_OUTPUT.PUT_LINE('Last Char is'||L);
END;
/
Flow of PL/SQL Program:
1. SEQUENCIAL.
2. CONDITIONAL/SELECTIVE.
3. LOOPING/ ITERATION.
CONTROL STATEMENTS:
IF STATEMENT:
Syntax: IF CONDITION1 THEN
Statement to Execute;
ELSE
Statement to Execute;
END IF;

IF CONDITION1 THEN
Statement to Execute;
ELSIF CONDITION2 THEN
Statement to Execute;
ELSIF CONDITION3 THEN
Statement to Execute;
ELSE
Statement to Execute;
END IF;
Example:
DECLARE
A NUMBER:=&A;
B NUMBER:=&B;
C NUMBER:=&C;
D NUMBER;
BEGIN
IF A=1 THEN
D:=B+C;
ELSIF A=2 THEN
D:=B-C;
ELSE
DBMS_OUTPUT.PUT_LINE('INVALID OPTION');
END IF;
DBMS_OUTPUT.PUT_LINE('SUM '||D);
END;
/
Loops: If we want to execute the same statement number of time the we will use loops.
There are three types of loops.
1. Simple Loop: In simple loop if the condition is false then execute the given statement.
Syntax:
LOOP
EXIT WHEN CONDITION;
Statement to Execute;
END LOOP;
Example:
DECLARE
I NUMBER:=1;
BEGIN
LOOP
EXIT WHEN I>5;
DBMS_OUTPUT.PUT(' '||I);
I:=I+1;
END LOOP;
DBMS_OUTPUT.NEW_LINE();
END;
/
2. While Loop: If the condition is true then it will execute the given statement.
Syntax:
WHILE CONDITION LOOP
Statement to Execute;
END LOOP;
Example:
DECLARE
I NUMBER :=&I;
BEGIN
WHILE I<=5 LOOP DBMS_OUTPUT.PUT(' '||I); I:=I+1; END LOOP; DBMS_OUTPUT.NEW_LINE(); END; / 3. For Loop: Variable using For Loop is not require to DECLARE, No need of Increment and Variable using by the For Loop is Not editable.
Syntax:
FOR Variable in EXPRESSION1..EXPRESSION2 LOOP
Statement to Execute;
END LOOP;
Example:
BEGIN
FOR I IN 1..5 LOOP
DBMS_OUTPUT.PUT(' '||I);
END LOOP;
DBMS_OUTPUT.NEW_LINE();
END;
/
Print the given String in Reveres Order.
DECLARE
A VARCHAR2(32767):='&A';
--B VARCHAR2(32767)
C CHAR;
BEGIN
FOR I IN 1..LENGTH(A) LOOP
C:=SUBSTR(A,-I,1);
DBMS_OUTPUT.PUT(C);
END LOOP;
DBMS_OUTPUT.NEW_LINE();
END;
/
Find the given String is Palindrome or Not.
DECLARE
A VARCHAR2(32767):='&A';
B VARCHAR2(32767);
C CHAR;
BEGIN
FOR I IN 1..LENGTH(A) LOOP
C:=SUBSTR(A,-I,1);
B:=B||C;
END LOOP;
IF A=B THEN
DBMS_OUTPUT.PUT_LINE(A||' IS PALINDROME');
ELSE
DBMS_OUTPUT.PUT_LINE(A||' IS NOT PALINDROME');
END IF;
END;
/
Find the given Number is Amstrong Number or not.
Amstrong No: It sum of cube of all the digits=Amstrong No
Ex: 13+53+33=153.
DECLARE
A NUMBER :=&A;
C NUMBER:=0;
BEGIN
FOR I IN 1..LENGTH(A) LOOP
C:=C+POWER(SUBSTR(A,I,1),3);
END LOOP;
IF A=C THEN
DBMS_OUTPUT.PUT_LINE(A ||' IS AMSTRONG NUMBER');
ELSE
DBMS_OUTPUT.PUT_LINE(A ||' IS NOT AMSTRONG NUMBER');
END IF;
END;
/



Accessing data from the Tables using PL/SQL:
DECLARE
ENO NUMBER:=&ENO;
N VARCHAR2(32767);
S NUMBER;
J VARCHAR2(32767);
BEGIN
SELECT ENAME,SAL,JOB INTO N,S,J FROM EMP WHERE EMP.EMPNO=ENO;
DBMS_OUTPUT.PUT_LINE('Employee Name is '||N);
DBMS_OUTPUT.PUT_LINE('Employee Salary is '||S);
DBMS_OUTPUT.PUT_LINE('Employee job is '||J);
END;
/

Exception Handle:
In PL/SQL we have two types of errors one is ‘Syntax Errors’ which are encountered during the Compilation. Second one is ‘Runtime Errors’ which are encountered during the Runtime.

If the PL/SQL block is not compiled successfully, whatever transactions we done in the block, that will Rollback automatically.
Syntax:
Exception
When No_Data_Found Then
DBMS_OUTPUT.PUT_LINE(‘Record Not Existed..’);
Exception is used to handle runtime errors in PL/SQL program. It is two types
1. Predefine Exception
a. Define
b. Un define
2. User Define Exception.
Define Exception: It is the exception which is having Error Number with a specific Name.
Un Define Exception: It is the exception which is having Error Number without having any name.
Predefine Exception are
1. NO_DATA_FOUND
2. TOO_MANY_ROWS
3. DUP_VAL_ON_INDEX
4. VALUE_ERROR
5. INVALID_NUMBER
6. ZERO_DEVIDE
7. CURSOR_ALREADY_OPEN
8. INVALID_CURSOR
9. PROGRAM_ERROR
10. STORAGE_ERROR
11. LOGIN_DEFINE.



Example:

DECLARE
A NUMBER:=&A;
N EMP.ENAME%TYPE;
J EMP.JOB%TYPE;
S NUMBER;
INC NUMBER;
EXCESS_SALARY EXCEPTION;
BEGIN
SELECT ENAME,JOB,SAL INTO N,J,S FROM EMP WHERE EMPNO=A;
DBMS_OUTPUT.PUT_LINE('Employee Old Salary='||S);
IF S>=800 OR S<=1500 THEN INC:=500; ELSIF S>1500 OR S<=3000 THEN INC:=1000; ELSE INC:=1000; END IF; UPDATE EMP SET SAL=SAL+INC WHERE EMPNO=A; DBMS_OUTPUT.PUT_LINE('Employee Number='||A); DBMS_OUTPUT.PUT_LINE('Employee Name='||N); DBMS_OUTPUT.PUT_LINE('Employee Job='||J); DBMS_OUTPUT.PUT_LINE('Employee Incremented Salary='||S); IF S+INC>5500 THEN
RAISE EXCESS_SALARY;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Employee Number Not Exist');
WHEN EXCESS_SALARY THEN
UPDATE EMP SET SAL=5500 WHERE EMPNO=A;
DBMS_OUTPUT.PUT_LINE('EXCESS SALARY');
END;
/
CURSOR: It is a work area that can store the executed SQL Statement result data. It is used to handle the multiple records in PL/SQL program. It is two types
1. Implicit Cursor: System can open a cursor for internal processes such type of cursors are called ‘Implicit cursors’.
2. Explicit Cursor: Users can open a cursor for accessing the data, that type of user define cursors are called ‘Explicit Cursors’.
Handle the Cursors: There are three ways to handle the cursors.
1. Open the cursor using ‘open
2. Fetch data from cursor using ‘fetch
3. Close the cursor using ‘close
Attributes of Cursor:
1. %ISOPEN: It returns true if the cursor is open else it returns false
2. %FOUND: It returns true if the record fetch from the workspace else it returns false.
3. %NOTFOUND: It returns true if the record not fetch from the workspace else it returns true.
4. %ROWCOUNT: It returns the count of rows.
Example:
DECLARE
CURSOR C IS SELECT * FROM EMP;
E C%ROWTYPE;
TOT NUMBER:=0;
S NUMBER;
BEGIN
OPEN C;
DBMS_OUTPUT.PUT_LINE(RPAD('EMPNO',15,'-')||RPAD('NAME',20,'-')||RPAD('JOB',15,'-')||'SALARY');
DBMS_OUTPUT.PUT_LINE(RPAD('_',60,'_'));
LOOP
FETCH C INTO E;
EXIT WHEN C%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(RPAD(E.EMPNO,15,'-')||RPAD(E.ENAME,20,'-')||RPAD(E.JOB,15,'-')||E.SAL);
S:=E.SAL;
--DBMS_OUTPUT.PUT_LINE(S);
TOT:=TOT+S;
END LOOP;
DBMS_OUTPUT.PUT_LINE(RPAD('_',60,'_'));
DBMS_OUTPUT.PUT_LINE('Total Number of Rows='||C%rowcount);
DBMS_OUTPUT.PUT_LINE('Total Salary='||TOT);
DBMS_OUTPUT.PUT_LINE('Average Salary='||ROUND(TOT/C%ROWCOUNT,2));
CLOSE C;
END;
/
Using For Loop:
DECLARE
CURSOR C IS SELECT * FROM EMP;
E C%ROWTYPE;
TOT NUMBER:=0;
CTR NUMBER:=0;
BEGIN
DBMS_OUTPUT.PUT_LINE(RPAD('EMPNO',15,'-')||RPAD('NAME',20,'-')||RPAD('JOB',15,'-')||'SALARY');
DBMS_OUTPUT.PUT_LINE(RPAD('_',60,'_'));
FOR E IN C LOOP
DBMS_OUTPUT.PUT_LINE(RPAD(E.EMPNO,15,'-')||RPAD(E.ENAME,20,'-')||RPAD(E.JOB,15,'-')||E.SAL);
TOT:=TOT+NVL(E.SAL,0);
CTR:=C%ROWCOUNT;
END LOOP;
DBMS_OUTPUT.PUT_LINE(RPAD('_',60,'_'));
DBMS_OUTPUT.PUT_LINE('Total Number of Rows='||CTR);
DBMS_OUTPUT.PUT_LINE('Total Salary='||TOT);
DBMS_OUTPUT.PUT_LINE('Average Salary='||ROUND(TOT/CTR,2));
END;
/

PARAMETRIC CURSOR:

DECLARE
A NUMBER:=&DEPTNO;
CURSOR C(DNO NUMBER) IS SELECT * FROM EMP WHERE DEPTNO=DNO;
E C%ROWTYPE;
TOT NUMBER:=0;
CTR NUMBER;
BEGIN
OPEN C(A);
DBMS_OUTPUT.PUT_LINE(RPAD('EMPNO',15,' ')||RPAD('NAME',20,' ')||RPAD('JOB',15,' ')||'SALARY');
DBMS_OUTPUT.PUT_LINE(RPAD('_',60,'_'));
IF C%NOTFOUND THEN
RAISE_APPLICATION_ERROR(-20000,'Record Not Found');
END IF;
CLOSE C;
FOR E IN C(A) LOOP
DBMS_OUTPUT.PUT_LINE(RPAD(E.EMPNO,15,' ')||RPAD(E.ENAME,20,' ')||RPAD(E.JOB,15,' ')||E.SAL);
TOT:=TOT+NVL(E.SAL,0);
CTR:=C%ROWCOUNT;
END LOOP;
DBMS_OUTPUT.PUT_LINE(LPAD('_',60,'_'));
DBMS_OUTPUT.PUT_LINE('Number of Rows='||CTR);
DBMS_OUTPUT.PUT_LINE('Totla Salary='||TOT);
DBMS_OUTPUT.PUT_LINE('Average Salary='||ROUND(TOT/CTR,2));
END;
/
PROCEDURES & FUNCTIOS:

Procedure: A procedure is a group of PL/SQL statements that you can call by name. It may or may not return a value.
Syntax:
CREATE OR REPLACE PROCEDURE (parameter datatype) IS/AS
LOCAL DECLARATION;
BEGIN
EXECUTED STATEMENTS;
EXCEPTION
EXCEPTION HANDLER;
END;
/
Execution of Procedure: EXEC (Input values);
Procedure divided into 2 parts
1. Procedure Specifications: Before IS/AS is called procedure specification.
2. Procedure Body: After IS/AS is call body.
Once the procedure is created successfully it will crate object code that will store in the server. This object code is called Pseudo Code.
There are three types of Parameters in Procedure. IN, OUT, INOUT.

IN parameter is readable but not writable. It’s constant.
OUT parameter is writable not readable.
INOUT parameter is both readable and writable.




CREATE OR REPLACE PROCEDURE EMP_DTLS(ENO IN NUMBER,NAME OUT VARCHAR2,SALARY OUT NUMBER,D_NAME OUT VARCHAR2) IS
BEGIN
SELECT E.ENAME,E.SAL,D.DNAME INTO NAME,SALARY,D_NAME FROM EMP E,DEPT D WHERE E.DEPTNO=D.DEPTNO AND EMPNO=ENO;
DBMS_OUTPUT.PUT_LINE(RPAD('NAME',15,' ')||RPAD('SALARY',15,' ')||'Department');
DBMS_OUTPUT.PUT_LINE(LPAD('-',50,'-'));
DBMS_OUTPUT.PUT_LINE(RPAD(NAME,15,' ')||RPAD(SALARY,15,' ')||D_NAME);
END;
/
DECLAR VARIABLES;
SQL> VAR N VARCHAR2(30);
SQL> VAR S NUMBER;
SQL> VAR D VARCHAR2(30);

SQL> EXEC EMP_DTLS(7369,:N,:S,:D)

Functions: It should return a single value the advantage of function is used to Reusability, Readable:-Decreasing the coding.
Modularity: - Dividing the program into number of modules
Easy to Maintain.
Syntax: CREATE OR REPLACE FUNCTION ( Parameter Name Datatype) RETURN Datatype IS/AS
DECLARATION STATEMENTS;
BEGIN
EXECTION STATEMENTS;
EXCEPTION
EXCEPTION HANDLERS;
END;
/
EXAMPLES:

CREATE OR REPLACE FUNCTION PRIM(A NUMBER) RETURN VARCHAR2 IS
BEGIN
FOR I IN 2..A-1 LOOP
IF MOD(A,I)=0 THEN
RETURN 'IT IS NOT PRIM NUMBER';
EXIT;
END IF;
END LOOP;
RETURN 'IT IS PRIM NUMBER';
END;
/
EXEC: SELECT PRIM(23) FROM DUAL;
Finding the Employee Experience in EMP TABLE:
CREATE OR REPLACE FUNCTION EXPE(A NUMBER) RETURN NUMBER IS
X NUMBER;
BEGIN
SELECT ROUND(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12,0) INTO X FROM EMP WHERE EMPNO=A;
RETURN X;
END;
/
EXEC: SELECT EXPE(EMPNO) FROM EMP;
SELECT * FROM EMP WHERE EXPE(EMPNO)=23;

Finding the Month from the Given Date:

CREATE OR REPLACE FUNCTION MTH(A DATE) RETURN NUMBER IS
BEGIN
RETURN TO_CHAR(A,'MM');
END;
/
EXEC: SELECT MTH(SYSDATE) FROM DUAL;
SELECT MTH(HIREDATE) FROM DUAL;
SELECT * FROM EMP WHERE MTH(HIREDATE)=3;

How To Setup An Event Alert To Monitor The Updated Profile Options

How To Setup An Event Alert To Monitor The Updated Profile Options

Define an Event Alert to Monitor all updates on Profile Options.

Every time a Profile Option is updated the Event Alert will Trigger and an E-mail will be delivered showing the Profile Option updated, the User that updated the Profile Option, the Value that was entered and the Level the Profile Option was updated

1) Follow the Setup from Note:577392.1 How To Check Oracle Alert Setup?

2) Define the Alert on Table : FND_PROFILE_OPTION_VALUES
But as Select use
SELECT fu.user_name,
po.profile_option_name,
pv.profile_option_value,
pv.last_update_date,
pv.level_id,
DECODE (TO_CHAR (pv.level_id),
'10001', 'SITE',
'10002', 'APP',
'10003', 'RESP',
'10004', 'USER',
'???')
INTO &user_name,
&profile_option_name,
&profile_option_value,
&last_update_date,
&level_id,
&decode_level_id
FROM fnd_profile_options po, fnd_profile_option_values pv, fnd_user fu
WHERE po.profile_option_id = pv.profile_option_id
AND fu.user_id = pv.last_updated_by
AND pv.last_update_date > SYSDATE - 1
AND pv.ROWID = :ROWID

3) As Output Under Actions / Action Details
For Action Type : Message enter your E-mail Address in the To field and as Text enter

Profile Option Update Details :
Updated By, Profile Option, Value, Update date, Updated at X Level
&USER_NAME, &PROFILE_OPTION_NAME, &PROFILE_OPTION_VALUE, &LAST_UPDATE_DATE, &LEVEL_ID, &DECODE_LEVEL_ID

Some Tips About FNDLOAD

Data Synchronization  Data Synchronization is a process in which some setup data would be synchronized, and this would be more important w...