Tuesday, July 21, 2009

MIME AND ITS TYPE

MIME Overview
by Mark Grand
Internet e-mail allows mail messages to be exchanged between users of computers around
the world and occasionally beyond… to space shuttles. One of the main reasons that
Internet e-mail has achieved such wide use is because it provides a standard mechanism
for messages to be exchanged between over 1,000,000 computers connected to the
Internet.
The standards that are the basis for Internet e-mail were established in 1982. Though they
were state of the art in 1982, in the intervening years they have begun to show their age.

The 1982 standards allow for mail messages that contain a single human readable message
with the restrictions that:
• the message contains only ASCII characters.
• the message contains no lines longer than 1000 characters.
• the message does not exceed a certain length
The 1982 standards do not allow EDI to be transmitted through Internet mail, since EDI
messages can violate all of these restrictions. There are a number of other types of
messages and services that have are supported by other mail standards that have been
designed more recently. In June of 1992 a new Internet mail standard was approved. This
new standard is called MIME.
MIME is an acronym for Multipurpose Internet Mail Extensions. It builds on the older
standard by standardizing additional fields for mail message headers that describe new
types of content and organization for messages.
MIME allows mail messages to contain:
• Multiple objects in a single message.
• Text having unlimited line length or overall length.
• Character sets other than ASCII.
• Multi-font messages.
• Binary or application specific files.
• Images, Audio, Video and multi-media messages.
MIME defines the following new header fields:
1. A MIME-Version header field, which uses a version number to declare that a
message conforms to the MIME standard.
2. A Content-Type header field, which can be used to specify the type and subtype
of data in the body of a message and to fully specify the encoding of such data.
2.a. A Text Content-Type value, which can be used to represent textual
information in a number of character sets and formatted text description
languages in a standardized manner.
2.b. A Multipart Content-Type value, which can be used to combine several
body parts, possibly of differing types of data, into a single message.
2.c. An Application Content-Type value, which can be used to transmit
application data or binary data.
2.d. A Message Content-Type value, for encapsulating a mail message.
2.e. An Image Content-Type value, for transmitting still image (picture) data.
2.f. An Audio Content-Type value, for transmitting audio or voice data.
2.g. A Video Content-Type value, for transmitting video or moving image
data, possibly with audio as part of the composite video data format.
3. A Content-Transfer-Encoding header field, that specifies how the data is
encoded to allow it to pass through mail transports having data or character set
limitations.
4. Two optional header fields that can be used to further describe the data in a
message body, the Content-ID and Content-Description header fields.
MIME is an extensible mechanism. It is expected that the set of content-type/subtype pairs
and their associated parameters will grow with time. Several other MIME fields, such as
character set names, are likely to have new values defined over time. To ensure that the
set of such values develops in an orderly, and public manner, MIME defines a registration
process which uses the Internet Assigned Numbers Authority (IANA) as a central registry
for such values.
To promote interoperability between implementations, the MIME standard document
specifies a minimal subset of the above mechanisms that are required for an
implementation to claim to conform to the MIME standard.
2
MIME Technical Summary
MIME is defined by an Internet standard document called RFC 1341. This document
summarizes the contents of RFC 1341. Sufficient detail is presented here to understand
the capabilities of MIME. For sufficient detail to implement MIME please read RFC 1341.
MIME allows messages to contain multiple objects. When multiple objects are in a MIME
message, they are represented in a form called a body part. A body part has a header and
a body, so it makes sense to speak about the body of a body part. Also, body parts can be
nested in bodies that contain one or multiple body parts.
The Content-Type values, subtypes, and parameter names defined in the MIME standard
are not case insensitive. However, many parameter values are case sensitive
The MIME standard is written to allow MIME to be extended in certain ways, without
having to revise the standard. MIME specifies sets of values that are allowed for various
fields and parameters. The provides a procedure for extending these sets of values by
registering them with an entity called the Internet Assigned Numbers Authority (IANA).
The MIME-Version Header Field
MIME is designed to be compatible with older Internet mail standards. In particular, it is
compatible with RFC 822. If a mail reading program receives a message that is a MIME
message then it will likely perform additional processing for the MIME message that it
would not perform for non-MIME messages. In order to allow mail reading programs to
recognize MIME messages, MIME messages are required to contain a MIME-Version
header field. The MIME-Version header field specifies the version of the MIME standard
that the message conforms to.
As of this writing there is only version (1.0) of the MIME standard. Messages that comply
with the standard must include a header field, with the following verbatim text:
MIME-Version: 1.0
The MIME-Version header field is required at the top level of a message. It is not required
for each body part of a multipart entity. It is required for the embedded headers of a body
of type "message" if and only if the embedded message is claimed to be MIME-compliant.
The Content-Type Header Field
The Content-Type field describes the data contained in the body fully enough that the
mail reader can pick an appropriate mechanism to present the data to the user, or
otherwise deal with the data in an appropriate manner.
The Content-Type header field is used to specify the nature of data in the body or body
part, by giving type and subtype identifiers, and by providing parameters that may be
3
needed for certain types. After the type and subtype names, the remainder of the header
field is a set of parameters, specified in an attribute/value notation. The set of meaningful
parameters differs for different types. The order of parameters is not significant.
Comments are allowed (in accordance with RFC 822 rules) in structured header fields by
placing them in parentheses.
The top-level Content-Type is used to declare the general type of data, while the subtype
specifies a specific format for that type of data. Thus, a Content-Type of Image/xyz is
enough to tell a mail reader that the data is an image, even if the mail reader has no
knowledge of the specific image format xyz. Such information can be used, to decide
whether or not to show a user the raw data from an unrecognized subtype — such an
action might be reasonable for unrecognized subtypes of Text, but not for unrecognized
subtypes of Image or Audio. For this reason, registered subtypes of Audio, Image, Text,
and Video, should not contain embedded information that is really of a different type.
Such compound types are usually represented using the Multipart or Application
types.
Parameters are modifiers of the content-subtype. Although most parameters make sense
only with certain content-types, others are “global” in the sense that they might apply to
any subtype. For example, the Boundary parameter, which is used to indicate how body
parts are separated from each other, makes sense only for the Multipart content-type.
The Charset parameter might make sense with several content-types.
The MIME standard defines seven content-types. The authors of the MIME standard state
that the set of seven types is “substantially complete”. They expect additional supported
types to be accommodated by creating new subtypes of the seven initial top-level types.
The MIME standard, functioning as a constitution for the MIME community, states that
new standard content types can be defined only by revising the standard (as opposed to
the registration procedure for other types of extensions). However, MIME does provide
for the use of non-standard content types. Non-standard content-types can be used, but
must be given names starting with X-. Future standard content type names will not begin
with X-.

The syntax for the content type header field is
Content-Type := type "/" subtype [";" parameter]…
The defined content types are:
Application
indicates data that does not fit into any of the other categories, such as
uninterpreted binary data or information to be processed by a mail-based
application. In addition to the following subtypes, it is likely that additional
subtypes will be defined for applications such as mail-based scheduling
systems, spreadsheets and EDI.
4
Application/Octet-Stream
indicates uninterpreted binary data, which a mail reading program
may simply offer to write the information into a file. Possible
parameters for Application/Octet-Stream include:
Name
a suggested name for the binary data if stored as a file.
Type
the general type or category of binary data. This is intended for
human recipients rather than for automated processing.
Conversions
the operations that performed on the data before putting it the
body. Note that the standard defines no conversion values.
Any conversion values that do not begin with X- must be
preceded by a published specification and by registration with
IANA.
Padding
the number of bits of padding that were appended to the
bitstream comprising the actual contents to produce the
enclosed byte-oriented data. This is useful for enclosing a
bitstream in a body when the total number of bits is not a
multiple of the byte size.
Application/ODA
indicates a body containing information encoded according to the
Office Document Architecture (ODA) standards, using the ODIF
representation format. For Application/ODA, the Content-Type
line should also specify an attribute/value pair that indicates the
document application profile (DAP), using a Profile parameter.
Thus an appropriate header field might look like this:
Content-Type: application/oda;
profile=Q112
Consult the ODA standard for further information.
Application/PostScript
indicates a body containing a postscript document.
Audio
Indicates audio data. Audio requires an audio output device (such as a
speaker or a telephone) to “display” the contents.
Audio/Basic
The content of the Audio/Basic subtype is audio encoded using 8-
bit ISDN u-law. When this subtype is present, a sample rate of 8000
Hz and a single channel is assumed.
5
Image
Image data. Image requires a display device (such as a graphical display, a
printer, or a FAX machine) to view the information.
Image/Jpeg
indicates an image in JPEG format.
Image/Gif
indicates an image in GIF format.
Message
indicates an encapsulated message.
Message/Rfc822
indicates that the body contains an encapsulated message, with the
syntax of an RFC 822 message.
Message/Partial
indicates a partial message, allowing fragmented transmission of
bodies too large to be passed through mail transport facilities.
Message/Partial indicates that the body contains a fragment of a
larger message.
Three parameters are required in a Content-Type field of type
Message/Partial: The first, Id, is a unique identifier, as close to
world-unique as possible, used to match the parts together. The
second, Number, an integer, is the part number indicating where this
part fits into the sequence of fragments. The third, Total, another
integer, is the total number of parts. Total is required on the final
part, and optional on earlier parts.
Message/External-Body
indicates that the actual body data are not included, but merely
referenced. In this case, the parameters describe a mechanism for
accessing the external data.
When a body or body part is of type Message/External-Body, it
consists of a header, a blank line, and the message header for the
encapsulated message. If another blank line appears, this ends the
message header for the encapsulated message. However, since the
encapsulated message's body is itself external, it does not appear in
the area that follows. For example, consider this message:
Content-type: message/external-body;
access-type=local-file;
name=/u/nsb/Me.gif
Content-type: image/gif
THIS IS NOT REALLY THE BODY!
6

The area at the end, which constitutes a phantom body, is ignored
for most external-body messages. However, it may be used to
contain auxiliary information for a “mail-server”.
The only parameter of Message/External-Body that is always
mandatory is Access-Type. Its other parameters are mandatory or
optional depending on the value of Access-Type. The values
defined for the Access-Type parameter are FTP, ANON-FTP, TFTP,
AFS, LOCAL-FILE, and MAIL-SERVER. Except for values beginning
with X-, other values must be registered with IANA.
The standard also specifies additional parameters that are to be
used in conjunction with the various access types.
In addition to access-type specific parameters, the standard defines
the following parameters which are optional for all access types:
• The Expiration parameter is used to specify a date after
which the existence of the external data is not guaranteed.
• The Size parameter is used to specify the size of the data.
Multipart
indicates data consisting of multiple body parts; each having its own data
type. It is possible to tell where each body part begins and ends because
each body part is preceded by a special string called an encapsulation
boundary; the last body part is followed by a closing boundary.
The boundary strings used are specified by a mandatory parameter called
Boundary. The encapsulation boundary is an end of line followed by two
hyphens followed by the boundary parameter value of the Content-Type
header field. The closing boundary is the same as the encapsulation
boundary with the addition of two hyphens at the end of the line.
The encapsulation boundary must not appear inside any of the
encapsulated parts. It is crucial that the composing user agent be able to
choose and specify the unique boundary that will separate the body parts.
Encapsulation boundaries may be no longer than 70 characters, not
counting the blank line and leading hyphens.
Thus, a typical multipart Content-Type header field might look like:
Content-Type: multipart/mixed; boundary=gc0y0pkb9ex
This indicates a body consisting of several body parts, each having a
structure syntactically identical to an RFC 822 message, except that the
header area may be completely empty, and each part is preceded by the line
--gc0y0pkb9ex
The closing boundary following the last body part indicates that no further
body parts will follow. It is identical to the preceding encapsulation
boundaries, with the addition of two more hyphens at the end of the line:
7
--gc0y0pkb9ex--
There is room for additional information prior to the first encapsulation
boundary and following the final boundary. These areas are often blank.
Anything appearing before the first or after the last boundary is ignored.
As a simple example, the following multipart message has two parts, both
plain text, one explicitly typed and one implicitly typed:
From: Nathaniel Borenstein
To: Ned Freed
Subject: Sample message
MIME-Version: 1.0
Content-type: multipart/mixed;
boundary="simple boundary"
This is the preamble. It is to be ignored, though it is
a handy place for mail composers to include an
explanatory note to non-MIME compliant readers.
--simple boundary
This is implicitly typed plain ASCII text.
--simple boundary
Content-type: text/plain; charset=us-ascii
This is explicitly typed plain ASCII text.
It DOES end with a line break.
--simple boundary--
This is the epilogue. It is also to be ignored.
The use of a Content-Type of multipart in a body part within another
multipart entity is explicitly allowed. In such cases, care must be taken to
ensure that each nested multipart entity uses a different boundary delimiter.
The use of the multipart Content-Type with only a single body part may
be useful in certain contexts, and is explicitly permitted.
Multipart/Mixed
indicates multiple independent body parts to be viewed serially.
Multipart/Alternative
is syntactically identical to Multipart/Mixed. Each part is an
“alternative” version of the same information. Mail readers should
recognize that the content of the parts are interchangeable. The
mail reader should either choose the “best” type based on the user's
environment and preferences, or offer the user the available
alternatives. Generally, choosing the best type means displaying
only the last part that can be displayed. This may be used, for
example, to send mail in a fancy text format in such a way that it
can easily be displayed anywhere:
From: Nathaniel Borenstein
To: Ned Freed
Subject: Formatted text mail
8
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary=boundary42
--boundary42
Content-Type: text/plain; charset=us-ascii
...plain text version of message goes here....
--boundary42
Content-Type: text/richtext
.... richtext version of same message goes here ...
--boundary42
Content-Type: text/x-whatever
.... fanciest formatted version of same message
goes here
...
--boundary42--
In this example, users whose mail system understood the
text/x-whatever format would see only the fancy version, while
other users would see only the richtext or plain text version,
depending on the capabilities of their system.
Some mail reading programs that recognize more than one of the
formats will offer the user a choice of which format to view. This
makes sense, for example, if mail includes both a nicely formatted
image version and an easily edited text version. The point is that
multiple versions of the same data are not automatically shown.
Either the user is shown the last recognized version or explicitly
given the choice.
Multipart/Parallel
is syntactically identical to Multipart/Mixed. However, in a
parallel body, all of the body parts are intended to be presented
simultaneously on hardware and software that are capable of doing
so. Composing agents should be aware that many mail readers will
lack this capability and will show the parts serially in any event.
Multipart/Parallel will likely be used for multimedia messages
that combine such message types as text, audio and/or video.
Multipart/Digest
Indicates that each of the body parts is an RFC 822 mail message.
Multipart/Digest is syntactically identical to Multipart/Mixed,
except that the default Content-Type value for a body part is
changed from Text/Plain to Message/Rfc822.
Text
The text Content-Type is for sending material that is principally textual
in form. It is the default Content-Type. A Charset parameter may be
9
used to indicate the character set of the text. The default Content-Type
for Internet mail is text/plain; Charset=US-ASCII.
The value of the Charset parameter is not case sensitive. Allowable
values are US-ASCII, ISO-8859-1, ISO-8859-2, … and ISO-8859-9. The
default value for Charset is US-ASCII.
Text/Plain
indicates plain (unformatted) text. No special software is required
to get the full meaning of the text, aside from support for the
indicated character set. Other subtypes should be used for enriched
text in forms where application software may enhance the
appearance of the text, but such software must not be required in
order to get the general idea of the content. Possible future
subtypes include any readable word processor format.
Text/Richtext
indicates a simple portable word processing format that is defined
by the MIME standard. It is a very small subset of SGML. Mail
readers that implement Richtext may implement only a subset of
it.
When a mail composing program is given a file in a word
processing format to send and there is no standardized subtype for
that format, then the message composing program may reformat the
file into richtext format which will preserve more of the original
formatting information than reformatting the file to plain ASCII.
Video
indicates that the body contains a time-varying-picture image, possibly with
color and coordinated sound. The term Video is used very generically and
does not refer to any particular technology or format. It is not meant to
preclude subtypes such as animated drawings encoded compactly.
Video/Mpeg
indicates video coded according to the MPEG standard.
X-TypeName
This is any type name that begins with X-. A Content-Type value
beginning with X- is a private value, to be used by consenting mail systems
by mutual agreement. The standard specifies no subtypes.
No type may be specified without a subtype.
The standard allows the use of additional sub-types without having to change the
standard. However, it is important to insure that sub-types used by different user
communities of MIME do not conflict. It would be confusing if Content-Type:
application/foobar meant two different things. The standard specifies two
mechanisms for defining new Content-Type subtypes:
10
1. Private values (starting with X-) may be defined between cooperating mail
composing and reading programs without outside registration. Use of this
mechanism requires knowing that the reader of the message will not mistake the
content type for something other than originally intended.
2. New standard values must be registered with IANA. Where intended for public
use, the formats they refer to must also be defined by a published specification.
Messages that do not have a Content-Type field in their header are displayed by user
agents as if Content-Type: Text/plain; Charset=US-ASCII had been specified.
When a mail reader encounters mail with an unknown Content-Type value, it will
generally treat it as equivalent to application/octet-stream.
The Content-Transfer-Encoding Header Field
Many Content-Types which could usefully be transported via e-mail are represented, in
their “natural” format, as 8-bit character or binary data. Such data cannot be transmitted
over some transport protocols. For example, SMTP (Simple Mail Transfer Protocol is an
Internet standard for transporting e-mail defined by a document called RFC 821) restricts
mail messages to 7-bit ASCII data with lines no longer than 1000 characters.
MIME provides two mechanisms for re-encoding such data into a 7-bit short-line format.
The Content-Transfer-Encoding header field indicates the mechanism used to perform
such an encoding. The Content-Transfer-Encoding field indicates the transformation
that has been used to represent the body in an acceptable manner for transport.
The possible values for the Content-Transfer-Encoding field are:
BASE64
QUOTED-PRINTABLE
8BIT
7BIT
BINARY
x-EncodingName
These values are not case sensitive. That is, Base64, BASE64 and bAsE64 are all
equivalent. An encoding type of 7BIT requires that the body is already in a 7-bit mailready
representation. That is the default value: Content-Transfer-Encoding: 7BIT is
assumed if the Content-Transfer-Encoding header field is not present.
Both BASE64 and the QUOTED-PRINTABLE imply an encoding that consists of lines no
longer than 76 ASCII characters. In other respects the two encoding schemes are very
different.
The encoding scheme implied by QUOTED-PRINTABLE is most appropriate for data that
consists primarily of printable ASCII characters. Using this encoding method, printable
ASCII character are represented as themselves. The equals sign (=) serves as an escape
character. Any character that is not a printable or white space ASCII character is
11
represented as an equals sign followed by two hexadecimal digits. An equals sign in the
message is also represented in this way. Lines that are longer than 76 characters are cut
off after the 75th character and the line ends with a equals sign.
The advantages of using the QUOTED-PRINTABLE encoding for message that are mostly
printable ASCII characters are that few additional characters are required and the message
can be read by human beings who to not have a MIME aware mail reading program. As an
example, here is an EDI interchange in QUOTED-PRINTABLE encoding:
ISA*00* *00* *01*987654321 *12*8005551234 *910=
607*0111*U*00200*110000777*0*T*>
GS*PO*987654321*8005551234*920501*2032*7721*X*002003
ST*850*000000001
BEG*00*NE*MS1112**920501**CONTRACT#
REF*IT*8128827763
N1*ST*MAVERICK SYSTEMS
N3*3312 NEW HAMPSHIRE STREET
N4*SAN JOSE*CA*94811
PO1*1*25*EA***VC*TP8MM*CB*TAPE8MM
PO1*2*30*EA***VC*TP1/4*CB*TAPE1/4INCH
PO1*3*125*EA***VC*DSK31/2*CB*DISK35
CTT*3
SE*11*000000001
GE*1*7721
IEA*1*110000777
Except for the ISA segment having been wrapped onto two lines, the QUOTED-PRINTABLE
encoding of the interchange is identical to its 7BIT representation.
The BASE64 encoding mechanism is well suited for representing binary files. It represents
any sequence of three bytes as four printable ASCII characters. The same interchange as
shown above but using the BASE64 encoding would look like:
SVNBKjAwKiAgICAgICAgICAqMDAqICAgICAgICAgICowMSo5ODc2NTQzMjEgICAgICAqMTIq
ODAwNTU1MTIzNCAgICAgKjkxMDYwNyowMTExKlUqMDAyMDAqMTEwMDAwNzc3KjAqVCo+CkdT
KlBPKjk4NzY1NDMyMSo4MDA1NTUxMjM0KjkyMDUwMSoyMDMyKjc3MjEqWCowMDIwMDMKU1Qq
ODUwKjAwMDAwMDAwMQpCRUcqMDAqTkUqTVMxMTEyKio5MjA1MDEqKkNPTlRSQUNUIwpSRUYq
SVQqODEyODgyNzc2MwpOMSpTVCpNQVZFUklDSyBTWVNURU1TCk4zKjMzMTIgTkVXIEhBTVBT
SElSRSBTVFJFRVQKTjQqU0FOIEpPU0UqQ0EqOTQ4MTEKUE8xKjEqMjUqRUEqKipWQypUUDhN
TSpDQipUQVBFOE1NClBPMSoyKjMwKkVBKioqVkMqVFAxLzQqQ0IqVEFQRTEvNElOQ0gKUE8x
KjMqMTI1KkVBKioqVkMqRFNLMzEvMipDQipESVNLMzUKQ1RUKjMKU0UqMTEqMDAwMDAwMDAx
CkdFKjEqNzcyMQpJRUEqMSoxMTAwMDA3NzcK
BASE64 bears some resemblance to uuencode in both appearance and function. However,
uuencode uses characters that may not be processed properly by an EBCDIC gateway.
The values 8bit, 7bit, and binary all imply that no encoding has been performed.
However, they are useful to indicate of the kind of data contained in the object, and
therefore of the kind of encoding that might need to be performed for transmission in a
given transport system. 7bit means that the data is all represented as short lines of ASCII
data. 8bit means that the lines are short, but there may be non-ASCII characters. Binary
means that not only may non-ASCII characters be present, but also that the lines are not
necessarily short enough for SMTP transport.
12
The difference between 8bit and binary is that binary does not require adherence to
any limits on line length. 8bit and binary are intended for compatibility with future
Internet e-mail transport standards and with gateways to non-Internet environments. As
of this writing there are no standardized Internet e-mail transports for which it is legitimate
to include unencoded 8-bit or binary data in mail bodies.
Note that the five values defined for the Content-Transfer-Encoding field imply
nothing about the Content-Type other than the algorithm by which it was encoded or the
transport system requirements if unencoded.
Some implementations may support additional Content-Transfer-Encoding values (it is
permitted but strongly discouraged by the standard). Any such additional values must
have names that begin with X- to indicate its non-standard status For example:
Content-Transfer-Encoding: x-my-new-encoding.
If a Content-Transfer-Encoding header field appears as part of a message header, it
applies to the entire body of that message. If a Content-Transfer-Encoding header
field appears as part of a body part's headers, it applies only to the body of that body part.
If a message or body part is of type Multipart or Message, the
Content-Transfer-Encoding must be 7bit, 8bit or Binary.
The encoding mechanisms defined here explicitly encode all data in ASCII. Thus, for
example, suppose a message or body part has header fields such as:
Content-Type: text/plain; charset=ISO-8859-1
Content-transfer-encoding: base64
This should be interpreted to mean that the body is a Base64 ASCII encoding of data that
was originally in ISO-8859-1, and will be in that character set again after decoding.
Optional Content-ID Header Field
It may be desirable to allow one body to reference another. Accordingly, bodies may be
labeled using the Content-ID header field, which is syntactically identical to the RFC 822
Message-ID header field: Content-ID values should be be as unique as possible.
Optional Content-Description Header Field
The ability to associate descriptive information with a body is often desirable. For
example, it may be useful to mark an Image body as “a picture of the Space Shuttle
Endeavor.” Such text may be placed in the Content-Description header field.
13
Summary
Using MIME-Version, Content-Type, and Content-Transfer-Encoding header fields,
it is possible to include arbitrary types of data objects in RFC 822 conformant mail
messages. No restrictions imposed by RFC 821 or RFC 822 are violated. MIME has been
designed to avoid problems caused by additional restrictions imposed by some Internet
mail transport mechanisms. The Multipart and Message content types allow mixing and
hierarchical structuring of objects of different types in a single message. Further content
types provide a mechanism for tagging messages or body parts as audio, image, or other
kinds of data. A parameter syntax allows further specification of data format details,
particularly the specification of alternate character sets. Additional optional header fields
provide mechanisms for certain extensions deemed desirable by many implementors.
Finally, a number of useful content types are defined for general use by consenting user
agents, notably Text/Richtext, Message/Partial, and Message/External-Body.
To promote interoperability between user agents, the MIME standard specifies a minimal
subset of MIME features a user agent must support to be considered MIME conformant.
A Complex Multipart Example
The outline of a complex multipart message follows. This message has five parts to be
displayed serially: two introductory plain text parts, an embedded multipart message, a
richtext part, and a closing encapsulated text message in a non-ASCII character set. The
embedded multipart message has two parts to be displayed in parallel, a picture and an
audio fragment.
MIME-Version: 1.0
From: Nathaniel Borenstein
Subject: A multipart example
Content-Type: multipart/mixed;
boundary=unique-boundary-1
This is the preamble area of a multipart message. Mail readers that
understand multipart format should ignore this preamble.
If you are reading this text, you might want to consider changing to
a mail reader that understands how to properly display multipart
messages.
--unique-boundary-1
Some text appears here...
[Note that the preceding blank line means
no header fields were given and this is text,
with charset US ASCII. It could have been
done with explicit typing as in the next part.]
--unique-boundary-1
Content-type: text/plain; charset=US-ASCII
This could have been part of the previous part, but illustrates
explicit versus implicit typing of body parts.
14
--unique-boundary-1
Content-Type: multipart/parallel; boundary=unique-boundary-2
--unique-boundary-2
Content-Type: audio/basic
Content-Transfer-Encoding: base64
… base64-encoded 8000 Hz single-channel
u-law-format audio data goes here …
--unique-boundary-2
Content-Type: image/gif
Content-Transfer-Encoding: Base64
… base64-encoded image data goes here…
--unique-boundary-2--
--unique-boundary-1
Content-type: text/richtext
This is richtext.Isn't it
cool?
--unique-boundary-1
Content-Type: message/rfc822
From: (name in US-ASCII)
Subject: (subject in US-ASCII)
Content-Type: Text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: Quoted-printable
… Additional text in ISO-8859-1 goes here …
--unique-boundary-1--
15


Tuesday, July 7, 2009

all query summary of oracle syntav

Primary key constraints
This constraint avoids duplication of rows and does not allow NULL values, when enforced in a column or set of columns. A a result it is used to identify a row. A table can have only one primary key. If a primary key constraint is assigned to more than one column(i.e) or combination of columns it is said to be a composite primary key (or simply a composite key), which can contain a maximum of 16 columns. Primary key constraint cannot be defined in an alter table command when the table contains rows having NULL values.

Run and Check your out put
- select * from emp;
- select deptno, dname, loc from dept;
- select empno, ename, salary, hiredate from emp;

- select ename,salary, salary+100 from emp;
- select ename, salary, (salary*12)+100 from emp;
- select ename,slary, (salary*12)+comm. from emp;
- select ename,salary, (salary*12)+nvl(comm,0) from emp;

- select ename “Full Name”, salary*12 “Annual Salary” from emp;
- select enamejob from emp;
- select ename’ is a ‘job “Emp Detail” from emp;

- select deptno from emp;
- select distinct deptno from emp;
- select distinct deptno, job from emp;

- In SQL, we can display the structure of a table using the DESCRIBE command. The command shows the column names and data types, as well as whether a column must contain data or not.
- desc emp;
- describe emp;

Comparison Conditions
= > >= < <= <> BETWEEN…AND… IN(set) LIKE IS NULL

We can display rows based on a range of values using the BETWEEN range condition. The range that we specify contains a lower limit and an upper limit.
To test for values in a specified set of values, use the IN condition. The IN condition is also known as the membership condition.
We may not always know the exact value to search for. We can select rows that match a character pattern by using the LIKE condition. The character pattern-matching operation is referred to as a wildcard search. Two symbols can be used to construct the search string. Ie. %(zero or more characters) and _ (single character).
The NULL conditions include the IS NULL condition and the IS NOT NULL condition. The IS NULL condition tests for nulls. A null value means the value is unavailable, unassigned, unknown, or inapplicable. Therefore, we cannot test with = because a null cannot be equal or unequal to any value.

- select empno, ename,job, deptno from emp where deptno=20;
- select empno, ename, salary from emp where lastname=’Lama’;
- select * from emp where hiredate=’01-JAN-95’ and salary>=5000 and lastname=’Smith’;
- select ename,slary from emp where salary between 2300 and 3500;
- select empno,ename,salary,mgr from emp where deptno in(20,30,40);
- select ename,hiredate from emp where hiredate like ‘%95’;
- select ename from emp where ename like ‘_e%’;
- select ename,mgr from emp where mgr is null;
- select ename,salary,comm. from emp where comm. is null;
- select empno, ename,job,salary from emp where salary>=1000 and job like ‘SYS%’;
- select empno, ename,job,salary from emp where salary>=1000 or job like ‘SYS%’;
- select empno, ename from emp where job in (‘MANAGER’, ‘CLERK’, ‘PEON’);

The order of rows returned in a query result is undefined. The ORDER BY clause can be used to sort the rows. If we use the ORDER BY clause, it must be the last clause of the SQL statement. We can specify an expression, or an alias, or column position as the sort condition. Syntax:

SELECT expression
FROM table
WHERE conditions
ORDER BY columns [ASCDESC];

If the ORDER BY clause is not used, the sort order is undefined, and the oracle server may not fetch rows in the same order for the same query twice. Use the ORDER BY clause to display the rows in a specific order.
To reverse the order in which rows are displayed, specify the DESC keyword after the column name in the ORDER BY clause.

- select ename, job, depatno, hiredate from emp order by hiredate;
- select ename, job ,deptno, hiredate from emp order by hiredate desc;
- select empno, ename, salary, salry*12 Annsal from emp order by annsal;
- select ename, deptno, salary from emp order by deptno,salary desc;

Displaying records from multiple tables.
Sometimes we need to use data from more than one table. Here we can fetch record using SELECT statement from two or more than two tables using equality and nonequality joins.

Cartesian Products:
When a join condition is invalid or omitted completely, the result is a Cartesian product, in which all combinations of rows are displayed. All rows in the first table are joined to all rows in the second table.
A Cartesian product tends to generate a large number of rows, and the result is rarely useful. You should always include a valid join condition in a WHERE clause, unless you have a specific need to combine all rows from all tables. Cartesian products are useful for some tests when you need to generate a large number of rows to simulate a reasonable amount of data.
A Cartesian product is generated if a join condition is omitted. The example to display employee name and department name, we write the statements like:
> select ename, dname from emp, dept;

JOIN: When data from more than one table in the database is required, a join condition is used. Rows in one table can be joined to rows in another table according to common values existing in corresponding columns, that is, usually primary and foreign key columns. Syntax:
……. Where table1.column=table2.column;


Remember
• when writing a SELECT statement that joins tables, precede the column name with the table name for clarity and to enhance database access.
If the same column name appears in more than one table, the column name must be prefixed with the table a name. (………where emp.deptno=dept.deptno; )
• To join n tables together, we need a minimum of n-1 join conditions.

Equi-Join:
To determine an employee’s department name, we compare the value in the deptno column in the emp tablw with the deptno values in the dept table. The relationship between the emp and dept tables is an equi-join, ie., values in the deptno column on both tables must be equal. Frequently , this type of join involves primary anf foreign key complements.
Note: Equijoins are also called simple joins or inner joins.
 select emp.empno, emp.ename, emp.deptno, dept.deptno, dept. dname, dept.loc from emp, dept
where emp.deptno=dept.deptno;

Here; the SELECT clause specifies the column names to retrieve, the FROM clause specifies the two tables that the database must access and the WHERE clause specifies how the table are to be joined.

You need to qualify the names of the column in the WHERE clause with the table name to avoid ambiguity. Without the table prefixes, the deptno column could be from either the dept table or the emp table. It is necessary to add the table prefix to execute you query.
If there are not common column names between the two tables, there is no need to qualify the column. However, using the table prefix improves performance, because you tell the Oracle Server exactly where to find the columns.
Qualifying column names with table names can be very time consuming, particularly if table names are lengthy.

 select empno,ename,dname,dloc from emp e, dept d where e.deptno=d.deptno

 select empno,ename,dname,dloc from emp e, dept d where e.deptno=d.deptno
and lastname=’Smith’;

Non-Equi Join:
An non-equi join is a join condition containing something other than an equality operator. The relationship between the emp table and the salgrade table has an example of a non-equijoin. A relationship between the two tables is that the salary column in the emp table must be between the value in the lowsal and hisal columns of the salgrade table. The relationship is obtained using an operator other than equals(=).
 select e.ename,e.salary,s.grade from emp e,salgrade s
where e.salary between s.losal and s.hisal;

Here the example creates a non-equijoin to evaluate an employee’s salary grade. The salary must be between any pair of the low and high salary ranges.

Outer Join
The missing rows can be returned if an outer join operator is used in the join condition. The operator is a plus sign enclosed in parentheses(+), and it is placed on the “side” of the join that is deficient in information. This operator has the effect of creating one or more null rows, to which one or more rows from the non-deficient table can be joined. Syntax:

SELECT column1,column2,column3,..
FROM table1,table2,..
WHERE table1.column(+)=table2.column; or WHERE table1.column=table2.column(+);

Here; table1.column(+), is the outer join symbol, which can be placed on either side of the WHERE clause condition, but not on both sides.
SELECT e.ename,e.deptno,d.deptno FROM emp e, dept d WHERE e.deptno(+)=d.deptno;

The deficient value form employee table will be displayed. Ie. There will be null value at emp table under which department no there is no employee.
Here; The outer join operator can appear on only one side of the expression- the side that has iformatio0n missing. It returns those rows from one table that have no direct match in the other table.

Self Join (Joining a table to Itself or Reflexive Join)
Sometimes we need to join a table to itself. To find the name of each employee’s manager, we need to join the EMP table to itself, or perform a self join. For example, to find the name of SMITH, we need;
- find SMITH in the EMP table by looking at the ename columns.
- Find the manager number for SMITH by looking at the MGR column.
- And find the name of the manager with empno by looking at the empno column. TO DO SO…

SELECT E.emono,E.ename,M.empno,M.ename FROM emp E, emp M WHERE E.mgr=M.empno;

Now again; (check output)
Select worker.ename ’ works for ‘manager.ename from emp worker,emp manager
where worker.mgr=manager.empno;

Here; The example joins the emp table to itself. To simulate two tables in the FROM clause, there are two aliases, namely worker and manager, for the same table emp. In this example, the WHERE clause contains the join that means “where a worker’s manager number matches the employee number for the manager”.

Practise
1. Create a query that displays employee name, department numbers, and all the employees who work in the same department as a given employee. Give each column an appropriate label.
2. Create a query that displays the name,job, department name, salary and grade for all employees.
3. Create a query to display the name and hiredate of any employee hired after employee SMITH.

Aggregate Function (Group Function)
Group functions operate on sets of rows to give one result per group. Types of Group functions.
Syntax: groupfunction([DISTINCTALL]exp)
AVG(n)): average value of n, ignoring null values
COUNT(): number of rows, *-including duplicate records count, DISTINCT count non duplicate records
MAX(): maximum value of expression, ignoring null values
MIN(): minimum value of expression, ignoring null values
SUM(): sum values of n, ignoring null values.

DISTINCT makes the function consider only non-duplicate values, ie. To suppress the counting of any duplicate values within a column. ALL makes it consider even value including duplicates. The default is ALL and therefore does not need to be specified. Here all group functions ignore null values.

 select avg(comm.) from emp; this will not give right answer
 select avg(nvl(comm.,0)) from emp; this will the right answer
All group functions ignore null values in the column. In the example above, the average is calculated based only on the rows in the table where a valid value is stored in the comm. column.

All group functions have treated the table as one large group of information. At times we need to divide the table of information into smaller groups. This can be done by using the GROUP BY clause.
We can use the GROUP BY clause to divide the rows in a table into groups. We can then use the group functions to return summary information for each group. The syntax is
select statement group by ;
Remember:
- if we include a group function in a SELECT clause, we cannot select individual results as well, unless the individual column appears in the GROUP BY clause.
- Using a where clause, we can exclude rows before dividing them into groups.
- We cannot use a column alias in the GROUP BY clause.
- When using the GROUP BY clause, make sure that all columns in the SELECT list that are not group functions are included in the GROUP BY clause.

 select avg(sal) from emp group by deptno; display each department’s average salary
 select deptno,avg(sal) from emp group by deptno; display deptno with their average salary.
 Select deptno, job, sum(sal) from emp group by deptno,job; groups within group
 Select deptno, count(ename) from emp; this statement is wrong
 Select deptno, avg(sal) from emp where avg(sal) >5000 group by deptno; this is wrong

The WHERE clause cannot be used to restrict groups. The SELECT statement on the example results is an error because it uses the WHERE clause to restrict the display of average salaries of those deparements that have an average salary greater than 5000. here, we use the HAVING clause to specify which group are to be displayed, and thus, we further restrict the groups on the basis of aggregate information.
 Select deptno, avg(sal) from emp having avg(sal)>5000 group by deptno;
 Select deptno, max(sal) from emp group by deptno having max(sal)>5000;
 Select job,sum(sal) from emp where job <> ‘MANAGER’ group by job having sum(sal)>5000 order by sum(sal); this is extra, check it out what is it for.

Subqueries (queries within queries)
A subquery is a SELECT statement that is embedded in a clause of another SELECT statement. We can build powerful statements out of simple ones by using subqueries. We can place the subquery in a number of SQL clauses including: The WHERE clause, The GAVING clause, The FROM clause.
- Enclose subqueries in parentheses.
- Place subqueires on the right side of the comparison condition.

Types of subqueries
1. Single-Row subqueries: Queries that return only one row from the inner SELECT statement.
Use single-row comparison operators: = > >= < <= <>
2. Multiple-Row subqueries: Queries that return more than one row from the inner SELECT statement.

Suppose we want to write a query to find out who earns a salary greater than SMITH’s slary. To solve this problem we need two queries: one to find what SMITH earns, and a second query to find who earns more than that amount. We can solve this problem by combining the two queries, placing one query inside the other query. Here the inner query or the subquery returns a value that is used by the outer query or the main query. Using a subquery is equivalent to perform two sequential queries and using the result of the first query as the search value in the second query.

 select ename from emp where sal> (select sal from emp where ename=’SMITH’); display emp’s whose salary is greater than that of SMITH’s salary.
 Select ename, job from emp where job=(select job from emp where empno=2324); display the employee names whose job is like that of empno 2324’s job.
 Select ename,job,sal from emp where sal=(select Min(sal) from emp); shows emp name job with salary with sal is the minimum salary from all.

Return more than one row. Use multiple-row comparison operators.
IN- Equal to any member in the list.
ANY- Compare value to each value returned by the subquery.
ALL- Compare value to every value returned by the subquery.

Suqueries that return more than one row are called multiple row subqueries. We use a multiple-row operator, instead of a single row operator, with a multiple row subquery. The multiple row operator expects one or more values.
Find the employees who earn the same salary as the minimum salary for each department.
 Select ename,sal, deptno from emp where sal in(select min(sal) from emp group by deptno);

Here ANY operator compares a value to each value returned by subquery. The example displays employees who are not MANAGER and whose slary is less than that of any MANAGER.
 Select empno, ename,job, sal from emp where sal < job="’MANAGER’)">’MANAGER’;

The ALL operator compares a value to every value returned by a subquery. The example displays employees whose salary is less than the salary of all employees with a job ie MANAGER and whose job is not MANAGER.
 Select empno, ename,job, sal from emp where sal < job="’MANAGER’)">’MANAGER’;

Data Manipulation Language (DML)
- all new rows to a table INSERT
- modify existing rows in a table UPDATE
- remove existing rows from a table DELETE
DML is a core pare of SQL, when we want to add, update or delete data in the database, we execute a DML statement. A collection of DML statements that form a logical unit of work is called a transaction.
Consider a banking database. When a bank customer transfers money from a saving account to a checking account, the transaction might consist of three separate operation; decrease the savings account, increase the checking account, and record the transaction in the transaction journal. The Oracle server must guarantee that all three SQL statements are perform to maintain the accounts proper balance. When something prevents one of the statements in the transaction from executing other statements of the transaction must be undone.
Add new rows to a table by using the INSERT statement. Syntax: only one row at a time.
INSERT INTO table ([column1, column2,column3,…]) VALUES (value1,value2, value3,….);
Eg.
While entering values enclose character and date values within single quotation marks. List values in the default order of the columns in the table.
 insert into dept (deptno, dname, loc) values(50, ‘Computer Dept’,’Pokhara’);
 insert into dept (deptno,dname) values(60,’Extra Dept’); only two values are inserted here.

 Insert into emp (emno,ename,sal,comm,hiredate,job,mgr,deptno)
values(1111, ‘Ramesh’, 2200,10,’12-JAN-91’,MANAGER,2222,30);
if column order is in sequence as per entered value; write like this
 Insert into emp values(1111, ‘Ramesh’, 2200,10,’12-JAN-91’,MANAGER,2222,30);
If you want to enter date value of your own type style
 Insert into emp
values(1111,‘Ramesh’,2200,10,to_date(’DEC-3-1991’,’MON-DD-YYYY’),MANAGER,22,30);
Coping value from another table and insert into other
 Insert into employee select * from emp;
 Insert into employee select * from emp where deptno=20;

Common errors that can occur during user input:
- Mandatory value missing for a NOT NULL column
- Duplicate value violates uniqueness constraint.
- foreign key constraint violated
- CHECK constraint violated
- Data type mismatch
- Value too wide to fit in column.

Update statement (to modify existing records into the table)
Syntax: update table set column=value, column=value,… where condition;

 update emp set deptno=70 where empno=2222; update information for selected records
 update employe set deptno=20; update information for all employee

Extras
 update employee set job=(select job from employee where empno=2222);
 update employee set job=(select job from employee where empno=2222) where empno=3333;

Removing a Row or Delete statement (to remove existing rows from a table )
Syntax: delete [from] table where [condition];

 delete from dept where deptno=20;
 delete from dept where dname=’FINANCE’;
 delete from emp; to delete all records
 delete from emp where sal>5000 and deptno=20;
we cannot delete a row that contains a primary key that is used as a foreign key I another table.
 Delete from department where deptno=20;

Data Control Language (DCL)
A transaction begins when the first DML statement is encountered and ends when one of the following occurs:
- A COMMIT or ROLLBACK statement is issued.
- A DDL statement, such as CREATE, is issued.
- A DCL statement is issued.
- The user exits from SQL


Statement Description
COMMIT Ends the current transaction by making all pending data changes permanent.
SAVEPOINT name Marks a savepoint within the current transaction
ROLLBACK ROLLBACK ends the current transaction by discarding all pending data changes.
ROLLBACK TO SAVEPAOINT name ROLLBACK TO SAVEPOINT rolls back the current transaction to the specified savepoint, there by discarding any changes and or savepoints created after the savepoint to which we are rolling back.


Creating a New Table
Data Definition Language (DDL)
Database objects are TABLE, VIEW, SEQUENCE, INDEX, SYNONYM.

An Oracle database can contain multiple data structures. Each structure should be outlined in the database design so that it can be created during the build stage of database development.
Table: stores data
View: subset of data from one or more tables.
Index: improves the performance of some queries

In Database; table can be created at any time, even while users are using the database. We need to name database tables and columns according to the standard rules for naming any Oracle database object.
- table and column names must being with a letter and be 1 to 30 characters long.
- Names must contain only the characters A-Z, a-z, 0-9, _ (underscores) $ and # are legal character.
- Names must not duplicate

Create table to store data by executing the SQL CREATE TABLE statement. This statement is one of the data definition language (DDL) statements, which are used to create, modify, or remove database structure.
The Syntax:
CREATE TABLE tablename
( column1 datatype,
column2 datatype,
…….
……..
);
Eg.
CREATE TABLE dept
( deptno number(2),
dname varchar2(14),
loc varchar2(12));
here the example creates the dept table, with three attributes/columns deptno, dname and loc. It further confirms the creation of the table by issuing the DESCRIBE command.
Ie. > desc dept; or
> describe dept;

Oracle Datatypes: varchar2(size), char(size), number(p,s), date, long, clob, row , bfile, rowid...

 create table newtable as select * from emp;
 create table newtable1 as select * from emp where deptno=20;

alter table tablename add (column datatype(size) )
alter table modify (column datatype(size))
alter table drop(column)

drop table employee;

rename dept to department;

truncate table tablename;

What is Views?
Ie. Logical subsets or combinations of data by creating views of tables. A view is a logical table based on a table or another view. A view contains no data of its won but is like a window through which data from tables can be viewed or changed. The tables on which a view is based are called base tables. View is for
- to restrict data access because the view can display selective column from the table.
- Views can be used to make simple queries to retrieve the result of complicated queries. For example, views can be used to query information from multiple tables without the user knowing how to write a join statement.
- to provide data independence ie. One view can be used to retrieve data from several tables.
- to present different views of the same data.

Advantages:
- views restrict access to the data because the view can display selective columns from the table.
- Views can be used to make simple queries to retrieve the results of complicated queries. For example, views can be used to query information from multiple tables without the user knowing how to write a join statements.
- Views provide groups of users access to data according to their particular criteria.


Syntax
CREATE OR REPLACE [FORCENOFORCE] VIEW view-name [alias1,alias2,…..]
AS SELECT statements
WITH CHECK OPTION
WITH READ ONLY;

CREATE OR REPLACE:- creates or re-creates the view if it already exists
FORCE:- creates the view regardless of whether or not the base tables exists
NOFORCE:- creates the vie only if the base tables exist ie. Default
view-name:- is the name of the view
alias:- specifies names for the expressions selected by the view’s query. The number of aliases must match the number of expressions selected by the view.
WITH CHECK OPTION:- specifies that only rows accessible to the view can be inserted or updated. Ie. To perform referential integrity checks through vies. Ie. Integrity level check
WITH READ ONLY:- ie. Ensures that no DML operations can be performed on this view.

Eg.
create or replace view myview20 as select empno,ename,sal,deptno from emp where deptno=20;

There are two classifications for views: simple and complex. The basic difference is related to DML (INSERT, UPDATE, and DELETE) operation.
A simple view is one that: - derives data from only one table. Contains no functions or group of data.
A complex view is one that:- derives data from many tables, contains functions or group of data.


Eg. To create a view, empview20, that contains details of employees in department 20.
> create view empview20 as select empno, ename, sal from emp where deptno=20;
> desc view20; to describe the structure o the view created.
> select * from tab; to check whether created or not.
> select * from empview20;

 create or replace view empview30 (idno,name, salary, dno) as select empno, ename, sal, deptno from emp where deptno=30;

To modify the view created, we can create the same view name again with new structure. Now to create a complex view. Ie. Create a complex view that contains group functions to display values from two tabes.

 create view deptnosum (name,minsal,maxsal, avgsal)
as select d.dname,min(e.sal),max(e.sal), avg(e.sal) from emp e, dept d
where e.deptno=d.deptno group by d.dname;

Modifying Views; With the OR REPLACE option, a view can be created even if one exists with this name already, thus replacing the old version of the view for its owner. That means that the view can be altered without dropping, re-creating, and regranting object privileges.

Set Operators
( to combine multiple queries into a single query)

UNION, INTERSECT and MINUS are useful in constructing queries that refer to different tables. They combine the results of two or more select statements into one result. A query many therefore consist of two or more SQL statements linked by one or more set operators. Set operators are often called vertical joins, because the join is not according to rows between two tables, but columns.

It is possible to construct queries with many set operators. If multiple set operators are used, the execution order for the SQL statements is from top to bottom.

The SET Operatos combine the results of two or more component queires into one result. Queries containing SET operators are called compound queries.




UNION INTERSECT MINUS

Operator Returns
UNION All distinct rows selected by either query
UNION ALL All rows selected by either query, including all duplicates
INTERSECT All distinct rows selected by both queries
MINUS All distinct rows that are selected by the first SELECT statement and not selected in the second SELECT statement

All SET operators have equal precedence. If a SQL statement contains multiple SET operators, the Oracle server evaluates them from left (top) to right (bottom).

The UNION Operator
The UNION operator returns all rows selected by either query. Use the UNION operator to return all rows from multiple tables and eliminate any duplicate rows.
Remember:
- The number of columns and the data types of the columns being selected must be identical in all the SELECT statements used in the query. The names for the columns need not be same.
- UNION operates over all of the columns being selected.
- NULL values are not ignored during duplicate checking.
- By default the output is sorted in ascending order.

UNION ALL operator to return all rows from multiple queries. Unlike UNION, duplicate rows are not eliminated and the output is not sorted by default. The DISTINCT keyword can’t be used.
Eg.
To return all distinct rows retrieved by either of the queries, enter
SELECT JOB FROM EMP WHERE DEPTNO=10
UNION
SELECT JOB FROM EMP WHERE DEPTNO=30;

To return all rows (including duplicates) retrieved by either of the queries,
SELECT JOB FROM EMP WHERE DEPTNO=10
UNION ALL
SELECT JOB FROM EMP WHERE DEPTNO=30;

The INTERSECT Operator
This operator returns all rows common to multiple queries.
Remember:
- the number of columns and the data types of the columns being selected must be identical in all the SELECT statements used in the query. The names for the columns need not be same.
- Not ignore the NULL values.
Eg.
To return only rows retrieved by both of the queries, enter:
SELECT JOB FROM EMP WHERE DEPTNO=10
INTERSECT
SELECT JOB FROM EMP WHERE DEPTNO=30;

The MINUS operator
Use the MINUS operator to return rows returned by the first query that are not present in the second query ( the first SELECT statement MUNUS the second SELECT statement).
Remember:-
- The number of columns and the data types of the columns being selected by the SELECT statements in the queries must be identical in all the ELECT statements used in the query. The names of the columns need not be identical.

Eg.
To return all rows retrieved by first query that are not in the second, enter:
SELECT JOB FROM EMP WHERE DEPTNO=10
MINUS
SELECT JOB FROM EMP WHERE DEPTNO=30;

Order By
ORDER BY can only be used once in a query that employs set operators. I used, the ORDER BY clause must be placed at the end of the query. Also, because you may select different columns in each SELECT you cannot name the columns in the ORDER by clause. Instead, columns in the ORDER BY must be referred to by their relative positions in the SELECT list.
SELECT EMPNO,ENAME,SAL FROM EMP
UNION
SELECT ID,NAME,SALARY FROM EMP_HISTORY
ORDER BY 2;
Notice that on the ORDER BY clause a numeral (2) is used to represent the position of the ENAME column on the SELECT list. This means that rows will be sorted in ascending employee name order.

Rules when using Set Operators
1 SELECT statements must select the same number of columns
2 Corresponding columns must be of the same data type
3 Duplicate rows are automatically eliminated (DISTINCT can’t be used)
4 Column names from the first query appear in the result.
5 ORDER BY clause appears at the end of statements.


Subqueries
A subquery is a SELECT statement that is embedded in a clause of another SQL statement, called parent statement.
The subquery (inner query) returns a value that is used by the parent statement. Using a nested subquery is equivalent to performing two sequential queires and using the result of the inner query as the search value in the outer query (main query).

A sub query is a SELECT statement that is nested within another SELECT statement and which returns intermediate results.
Syntax:
SELLECT column1, column2,….
FROM table
WHERE column=(SELECT column FROM table WHERE condition);

The subquery is often referred to as a subselect or inner select; it generally executes first and its output is used to complete the query condition for the main or outer query. Using subqueries allows a developer to build powerful commands out of simple once. The nested subquery can be very useful when you need to select rows from a table with a condition that depends on the data in the table itself.

Single Row Subqueries
To find the employee who earns the minimum salary in the company, two steps must be taken. Ie
Find the minimum salary
select min(sal) from emp;
Find the employee who earns the minimum salary.
select ename,job, sal from emp where sal=(lowest salary which is unknown);
We can combine the two commands as a nested subquery:
Select ename,jon,sal from emp where sal=(select min(sal) from emp);

select ename,job,sal from emp where sal < (select avg(sal) from emp; How are nested subqueries processed? A SELECT statement can be considered as a query block. The example above consists of two query blocks- the main query and the inner query. The inner select statement or query block is executed first, producing a query result: 800. The main query block is then processed and uses the value returned by the inner query to complete its search condition. In essence, the main query would finally look like this: SELECT ENAME,SAL, DEPTNO FROM EMP WHERE SAL=800; In the above example, the 800 is a single value. The subquery that returned the value 0f 800 is called a single row subquery. When a subquery returns only one row, a single row comparison or logical operator should be used. For example =,<,>,<=..etc. To find all employee who have the same job as BLACK we would enter: SELECT ENAME,JOB FROM EMP WHERE JOB=(SELECT JOB FROM EMP WHERE ENAME=’BLAKE’); The inner query returns BLAKE’s job title which is then used on the right hand side of the main query’s WHERE clause. Subqueries that return more than one row? The following query attempts to find the employees who earn the lowest salary in each department. SELECT ENAME,SAL, DEPTNO FROM EMP WHERE SAL IN (SELECT MIN(SAL) FROM EMP GROUP BY DEPTNO);A Here; notice that the inner query has a GROUP BY clause. This means that it may return more than one value. We therefore need to use a multi-row comparison operator. In this case, the IN operator MUST be used because it expects a list of values. The result obtained does not show the department in which the qualifying employees work. In addition, because we are only comparing salary values, the inner query could return a value simply because it matches the lowest salary for one of the departments, not necessarily the employee’s own department. Therefore, the query should be rewritten in order to match the combination of employee’s salary and department number with the minimum salary and department number: Errors Encountered - When a subquery returns more than one row and a single row comparison operator is used, SQL *Plus issues the error message. Select ename,sal,deptno from emp where sal=(select min(sal) from emp group by deptno); - If the inner query returns no rows, you get the error. Select ename,job from emp where job=(select job from emp where ename=’om’); SOME/ANY or ALL Operators The ANY or ALL operators may be used for subqueries that return more than one row. They are used on the WHERE or HAVING clause in conjunction with the logical operators (=,!=,<,>,>=,<=). ANY (or its synonym SOME) compares a value to each value returned by a subquery. To display employees who earn more than the lowest salary in Department 30. SELECT ENAME,SAL,JOB,DEPTNO FROM EMP WHERE SAL>SOME(SELECT DISTINCT SAL FROM EMP WHERE DEPTNO=30);

The lowest salary in Department 30 is $950 (JAMES’s). the main query has returned employees who earn a salary that is greater than the lowest salary in department 30. So ‘>NY’ means more than the minimum. ‘=ANY’ is equivalent to IN.
When using SOME/ANY, the DISTINCT keyword is frequently used to prevent rows from being selected several times.

ALL compares a value to every value returned by a subquery.
The following query finds employees who earn more than every employee in Department 30.
SELECT ENAME,SAL,JOB,DEPTNO
FROM EMP
WHERE SAL>ALL(SELECT DISTINCT SAL FROM EP WHERE DEPTNO=30);

The highest salary in Department 30 is $2850 (BLAKE’s), so the query has returned those employees whose salary is higher than $2850. That is , greater than the highest salary for Department 30, and consequently more than every salary in that department.
The NOT operator can not be used within, ANY or ALL.

Index
(a table or other data structure used to determine the location of rows in a file that satisfy some condition)

Index is a database object. Its purpose is to increase the performance of data retrieval thereby provide faster access path to the table data. Indexes can be created on more than one column of a table. The syntax is given below.

create index on (column1, column2,….)

Eg. SQL> create index ind1 on price(prodid);

Note:-
- indexes are independent of data. They can be dropped or created whenever needed and their presence or absence will not affect the table.
- Columns of type long, long row cannot be index.
- An index may contain upto 16 columns.

Oracle(DB) indexes have two main purposes
1). To speed up the retrieval of rows via a particular key.
2). To enforce uniqueness on values in a column, usually primary key values.

The use of indexes is strongly recommended to achieve better performance, and generally one of the first indexes to be created on a table is the index on the primary key columns(s).

Saturday, July 4, 2009

Health promotion in Nepalese context

Health promotion in Nepalese context
Increasing health awareness and developing positive attitudes and behavior towards healthier living is still a crucial need of the people to cope an alarming health problem like communicable and non-communicable diseases, which are still the leading causes of morbidity and mortality of the people. Emerging diseases such as Japanese Encephalitis, Viral Hepatitis and STD including HIV/AIDS pose increasing threats to the health and well being of the people of the country. Tobacco use, excess use of alcohol, inadequate physical activity, obesity, improper food habit and polluted environment has significant role in increasing burden of communicable and non-communicable diseases in the nation. Similarly, mental health, oral health, hearing impairment, blindness, cardiovascular diseases, diabetes, hypertension, malignancies and problems of elderly are the health issues that need to be addressed effectively by controlling and reducing risk factors and other as necessary.

Nepal is facing several public health problems such as communicable diseases like malaria, kala-azar, tuberculosis, leprosy, encephalitis, meningitis, diarrheas and acute respiratory infections, vaccine preventable diseases, nutritional deficiency problem like malnutrition, Vitamin A deficiency, Iodine deficiency, Anemia, dewormin, poor environmental conditions and high population growth. The health programs related to curative, preventive, promotive and rehabilitative services are regarded to have Health Education, Information and Communication (HEIC) as a core component to bring a desired change in health behavior of the people of Nepal.

The national health education, information and communication centre (NHEICC) is responsible for IEC activities for health promotion. The centre develops and produces various IEC and advocacy materials for the target audience that include people and communities in general, vulnerable population, patients and health system managers and personnel. Messages and materials are disseminated using electronic and print media, health institutions, schools, community groups etc. As a result of the IEC interventions over the years, people’s health awareness has increased, as reflected in higher coverage of immunization and increased demand for health care services. Health education corners have been established in more than 38 districts hospitals and health centre, in which video set including health related VHS cassettes have been provided by the NHEICC. The observance of World Health Day, World No Tobacco Day and other events by the centre has its own impact in terms of sensitization and commitment. However, promotive and preventive health care is yet to be adequately integrated into the mainstream of health services. The people in general, lack of knowledge and awareness about priority health problems, emerging diseases and the importance of their role and healthy practices that contribute significantly to health promotion and protection. Integrated approach involving communities, schools, health facilities and other institutions/organizations is presently lacking.

The organizational wide expectation for this biennium is that capacity for governance, stewardship, planning and implementation of multisectoral health promotion policies and programmes strengthened at country and regional levels, based on gender sensitive approaches to promoting health and well-being throughout and the regional expectation is to National comprehensive health promotion policies and strategies developed and implemented. Office specific result WHO support to integrated health promotion interventions through a network of communities, schools and health institutions. Office specific expected result, product for network mechanism developed, linking selected communities, schools and health facilities for undertaking health promotion activities at individual, family, community and institutional levels. Plan of action mainly focus on health promotion integrated approach and collaborative manner for the set up of the modalities of selected village development committees with coordination sectoral ministries, partners, health institutions, schools, different committees members, communities and family members for effective health massage for preventive , promotive and curative aspect for knowledge, attitude and practices for their areas.

Support for developing integrated approach to health promotion in coordination with other partner through the existing technical committees under the Chairmanship of Director General, Department of Health Services to look the key health issues such as reproductive health, child health, communicable diseases, non-communicable diseases and other main health issues to plan and implement IEC and BCC activities in an integrated and participative manner towards health promotion. Support on baseline survey and advocacy meeting to develop action plan in two VDCs/and schools about knowledge, awareness and practices. It was taken two VDCs (300 household in each VDCs) of Lalitpur districts. Organized advocacy meeting to discuss about the major health issues of the selected community to share the knowledge of IEC/BCC activities and to match need based IEC/BCC activities and to increase awareness among selected community people (300 person) regarding major health issues and the ways to prevent. Support to development, production and dissemination of IEC materials to raise awareness among general public about the causes, ways of prevention and control of major health problems and to ensure positive change in their health behaviors and improve the health status of general public by facilitating them to make right decisions about their health. Organize to celebration of parents’ day conducted in two VDCs of Lalitpur district to highlight the importance of health promotion at the family level .Parents, students and school teachers have major role and responsibility in promoting health at family as well as community level. Celebration of 2006 and 2007, World Health Day is an annual event of WHO through out the country with different programmes. Every year slogan and theme on the aspect of health related message.

Technical back up from the Regional Office, Director, NMH Visited for interaction and implementation status of the programmes. Visit of Director, NMH,SEARO is quite useful for his feedback regarding further planning and implementation of the health promotion and other related areas. Participation with national focal point of Regional Consultation on Regional Strategy for health Promotion for South-East Asia, Chiang Mai, Thailand on 26-29 June 2006. On that workshop sharing experiences by countries and organizations review of the Regional strategy for health promotion. After discussion recommendations on health promotion needs to be managed as well as sustained by involving various partners, allocation of resources and gathering evidence of the effectiveness at all levels.

Main Issues and Challenges:
Lack of knowledge and awareness about priority of health problems on communicable and non communicable diseases, tobacco control activities, disability, injury prevention and role of their healthy practices for health promotion.
Lack of proper approach, using of IEC materials and equipments at all levels.
Inadequate proper trained manpower at all levels to give the proper health promotion message
Inadequate awareness program and active community participation
Inadequate appropriate multi-media campaign and relevant advocacy materials for IEC/BCC.
Security, political instability and restriction movement of relevant staff for the community level activities for the implementation of planned activities in time
Technical input and coordination with other partners but implementation part with concerning programme manager and their staff in the field level for quality of the programme.
Lack of proper coordination among relevant sectoral ministries and partners
Inadequate supervision, monitoring and evaluation of the programmes for further planning and implementation.

History of Public health in world

History of Public health in world

Introduction
Health promotion has been defined by the 2005 Bangkok charter for Health Promotion in Globalized World as "the process of enabling people to increase control over their health and its determinants, and thereby improve their health”. Means of health promotion include health education and social marketing.
The "first and best known" definition of health promotion, promulgated by the American Journal of Health Promotion since at least 1986, is "the science and art of helping people change their lifestyle to move toward a state of optimal health”. This definition was derived from the 1974 Lalonde report from the Government of Canada, which contained a health promotion strategy "aimed at informing, influencing and assisting both individuals and organizations so that they will accept more responsibility and be more active in matters affecting mental and physical health. Another predecessor of the definition was the 1979 Healthy People report of the Surgeon General of the United States, which noted that health promotion "seeks the development of community and individual measures which can help people to develop lifestyles that can maintain and enhance the state of well-being".
At least two publications led to a "broad empowerment/environmental" definition of health promotion in the mid-1980s.
In 1984 the world Health organization (WHO) Regional Office for Europe defined health promotion as "the process of enabling people to increase control over, and to improve, their health”. In addition to methods to change lifestyles, the WHO Regional Office advocated "legislation, fiscal measures, organizational change, community development and spontaneous local activities against health hazards" as health promotion methods.
In 1986, Jake Epp, Canadian Minister of National Health and welfare, released Achieving health for all: a framework for health promotion which also came to be known as the "Epp report”. This report defined the three "mechanisms" of health promotion as "self-care"; "mutual aid, or the actions people take to help each other cope"; and "healthy environments”.
The WHO, in collaboration with other organizations, has subsequently co-sponsored international conferences on health promotion as follows:
First International Conference on Health Promotion, Ottawa, 1986, which resulted in the “Ottawa charter for Health Promotion”. According to the Ottawa Charter, health promotion.
"is not just the responsibility of the health sector, but goes beyond healthy life-styles to well-being" "aims at making political, economic, social, cultural, environmental, behavioural and biological factors favourable through advocacy for health" "focuses on achieving equity in health" "demands coordinated action by all concerned: by governments, by health and other social and economic sectors, by nongovernmental and voluntary organization, by local authorities, by industry and by the media" "should be adapted to the local needs and possibilities of individual countries and regions to take into account differing social, cultural and economic systems"
In addition, the Ottawa Charter conceptualized "health promotion action" as "Build Healthy Public Policy," "Create Supportive Environments," "Strengthen Community Actions," "Develop Personal Skills," "Reorient Health Services" (i.e., "beyond its responsibility for providing clinical and curative services"), and "Moving into the Future."
2nd International Conference on Health Promotion, Adelaide, 1988, which resulted in the "Adelaide Recommendations on Healthy Public Policy”.
3rd International Conference on Health Promotion, Sundsvall, 1991, which resulted in the "Sundsvall Statement on Supportive Environments for Health”.
4th International Conference on Health Promotion, Jakarta, 1997, which resulted in the “Jakarta Declaration on Leading Health Promotion into the 21st century”. 5th Global Conference on Health Promotion, Mexico City, 2000, which resulted in the "Mexico Ministerial Statement for the Promotion of Health”
6th Global Conference on Health Promotion, Bangkok, 2005, which resulted in the “Bangkok Charter for health promotion in Globalized world”.
Altogether, the documents produced by conference attendees emphasized "investing in health promotion beyond an individual, disease-oriented, behaviour-change model”.
Objective
To overview the history of health promotion in world.
Methodology
The study carried out will be a descriptive study. It will be prepared with the help of secondary data extracted from various internet sites, journals, documents and books. Different reports and magazines related to history of health promotion will also be studied.
2.1 Study Design
The study will descriptive type done with the help of secondary sources.
2.2 Study Area
The study will be global.
2.3 Data collection Methods
Various Internet sites, journals, books and reports.
2.4 Study time
The time duration of the study was started from January, 2009.
2.6 Limitations of study
The study will only be based in the secondary data, it may not reflect complete scenario.

Findings
Origin of health promotion
Henry Sigerist is the first person to use the term “health promotion” with anything like its modern meaning. In 1946, Sigerist described the four major tasks of medicine as the promotion of health, the prevention of illness, the restoration of the sick, and rehabilitation. No one would disagree with that today. In an earlier work, Sigerist had defined health along similar lines to those later used by the World Health Organization (WHO), which said in its Constitution: “Health is a state of complete physical, mental, and social well-being and not merely the absence of disease or infirmity.” Sigerist’s historical analysis of health and its relevance for human welfare, had led him to consider health in a social sense, and he wrote:

A healthy individual is a man who is well balanced bodily and mentally, and well adjusted to his physical and social environment. He is in full control of his physical and mental faculties, can adapt to environmental changes, so long as they do not exceed normal limits, and contributes to the welfare of society according to his ability. Health therefore is not simply the absence of disease; it is something positive, a joyful attitude towards life, and a cheerful acceptance of the responsibilities that life puts upon the individual.

Obviously, there have been numerous attempts to define the kind of health that should be promoted and preserved, and almost all have been rooted in a concept of wholeness or integrity. It is particularly intrigued by Fritjof Capra’s perception of that same wholeness in the systems approach to life in general and in the origin of this concept with respect to health, in contrast with the reductionist approach that has dominated Western thinking for 300 years. He writes:
Although everybody knows what it feels like to be healthy, it is impossible to give a precise definition; health is a subjective experience whose quality can be known intuitively, but can never be exhaustively described or quantified. Nevertheless, we may begin our definition by saying that health is a state of well-being that arises when the organism functions in a certain way.

To Capra, “a certain way” means that the various systems are in “a dynamic balance that involves the physical and psychological aspects of the organism, as well as its interactions with its natural and social environment.”
Definitions such as those given by Sigerist, WHO, and perhaps Capra have been criticized as not being useful, because they approximate a utopian state of eternal happiness to which all humankind will probably aspire, but give little basis for quantification and are difficult to promote. I have always firmly held, however, that one of the great challenges for us mortals is to grasp those things that we know intuitively to be real and vital for our wholeness, but that we cannot see or touch or measure. I am often cheered by the anecdote that Einstein had a sign in his office that read, “not everything that counts can be counted and not everything that can be counted counts.” A more useful approach would be to examine the proposals that can be made to improve what we know to be deficient, knowing that we have to be incremental in the major changes to be made.
Beyond the aspect of definitional precision, we accept that there is some intrinsic value to health itself, and that health is also valued for making it possible to work and to enjoy leisure. Let me refer again to Sigerist, who, in a lecture on health that was part of a series on “Religion in the Light of Sci- ence and Philosophy,” examined the background to the notion of health as something valuable for itself and to be promoted, taking us back to classical Greek society. The health of individuals—free ones, at any rate—was one of the centerpieces of the Greeks’ existence, and represented the condition of perfect equilibrium. The attention they paid to their diet and exercise to maintain perfect health seems almost narcissistic to us today. But then came the Roman domination of the Hellenic culture, and this engendered a more utilitarian and pragmatic approach. Subsequently, Christian understanding and practice in health were founded more on hygiene and were certainly more catholic, as opposed to the aristocratic focus of the Greeks.
A plausible thesis might be that this catholic approach to health waxed and waned, but found its crescendo in the great movements of the eighteenth and nineteenth centuries, which saw men like Allison, Villerme, Virchow, and Chadwick emphasize the social origins of the poor hygiene that caused the illnesses of the underprivileged. The means of preventing ill health were to be found in social and sanitary engineering. It has been said that the growth of the germ theory of disease and the impressive advances in medical science and technology led to a decline in interest in the sanitary and social measures that are necessary for the people’s health, and there has been a virtual hijacking of care for the public’s health by an increasingly medicalized system.5 This may well be so.
However, one of the most significant events of modern times that emphasized very much the social among the other dimensions of health was the landmark publication of the Lalonde report—A New Perspective on the Health of Canadians—in 1974.6 This has rightly been hailed as a watershed in our thinking about the public’s health, as the report focused on population health and those factors that influence it. It elaborated the “health field” concept with four components: biology, environment, lifestyle, and health care organization. These have been modified subsequently, but the basic concept remains: there are factors that influence or determine health beyond the capability of the health care services.7 It is interesting that in putting forward the notion of health promotion, the report grounded the major strategy in the changing of lifestyles, and clearly focused this more on the individual.
The timing of this approach and its geographical origin are of interest. I wish to pose here a long historical sweep in which the world—at least the Western world—has moved from an aristocratic approach of the promotion of the health of the few, through the prevention of the disease of the many, to a stage in which we now advocate for the complementarity between the prevention of the disease of the many and the promotion of the health of the many. It is a matter of speculation whether this growth of interest in applying health promotion to the many would ever have taken place if there had not already existed a sizable portion of the world’s population that could afford to be less preoccupied with the prevention of diseases, although these still constituted a scourge for much of the world’s poor and socially marginalized. And it is perhaps not accidental that the impetus for the focus on health promotion for the many should have arisen in Canada, which is often credited with maintaining a more egalitarian approach in all health matters. The current force driving us to see the relevance of both approaches is undoubtedly the increasing interconnectedness that is characterized as globalization.
It is not uncommon to propose that the State be assigned the responsibility for health promotion as an integral function of public health. This view is not new, and Virchow, in his crusade for medical reform in 1848, wrote:
[The State] must help everyone to live a healthy life. This simply follows from the conception of the state as the moral unity of all individuals composing it, and from the obligation of universal solidarity.

But today, even The State’s competence to deal with those areas that are traditionally recognized as the very bread and butter of public health has been put in question. Laurie Garrett, in her book Betrayal of Trust, points out with gripping detail that the occurrence of recent epidemics and the possibility of even many others occurring are frightening proof that the nations of the world have betrayed the trust placed in them by their people, and that there has been a collapse of global public health. There is inherent trust to protect the public, especially from the threat and reality of infectious disease.
She writes:
The only way to cope with the developing world’s overwhelming problems is to build effective public health systems. Such services monitor the health and wellbeing of its citizens, identify problems in the environment
and among the members of its community, and establish public health practices to address these problems, including the problem of whether proper health care is accessible to all.
Given the numerous gaps that exist in providing even basic surveillance of diseases—such as of plague, which has been with us from biblical times— and the feeling that somehow some of the more fundamental bases of public health are being ignored, it is a major challenge to demonstrate the relevance of health promotion as a concept grounded in principles that are equally valid for those who still feel pressed to do battle against preventable diseases. We have fortunately left behind us the stage in which there was a sterile polarization between the State’s attention to the health of the population versus the health of the individual. There is no doubt of the applicability of the strategies of health promotion to individual behavior. And while there is no negating that the State has the responsibility to make the social environment as favorable as possible for individual behavior, or that individual behavior is facilitated and reinforced by the group’s behavior, there is no avoiding the importance of individual volition and responsibility.
The Ottawa Charter still represents the essential formulation of what health promotion is about, and it says clearly that health promotion action means building healthy public policy, creating supportive environments, strengthening community action, developing personal skills, and reorienting the health services. I will not discuss these in detail, as, except perhaps for the first, they are relatively easy to understand. I have always been intrigued by the concept of healthy public policy, however, and the Second International Conference on Health Promotion, held in Adelaide, Australia, which dealt specifically with this, advanced our understanding considerably.

I understand public policy to mean the guide or framework for State action, and healthy public policy means for me those guides that seek to promote or restore health. One problem I face is that since the determinants of health are so expansive and touch almost all aspects of life, then healthy public policy would apply to almost all State policy. Indeed, the recommendations from the Adelaide Conference defined healthy public policy as one “characterized by an explicit concern for health and equity in all areas of policy and by accountability for health impact.”

We note the reference to all areas of policy. Therefore, if income inequality is associated with poor health outcomes, for example, then healthy public policy would entail measures for income redistribution. With the current movement towards a system of social organization that favors increasing income inequality, a public policy to address this possible cause of ill health obviously becomes problematic. The political implications of policy formulation over such a wide range of issues are numerous, and many of them would clearly lie outside the purview of the traditional health sector. In addition, the possibility of convincing other sectors to adopt policies intentionally because of their impact on health, poses difficulties in the majority of our political systems.
The matter becomes more complicated when State action is called for in areas that lie outside of what may be called traditional public health but that are still focused on communicable diseases. Communicable diseases un- doubtedly poses threats to the body public, and there is not likely to be any questioning of the State’s responsibility here, as there are clear population interests. But in those cases in which the externalities are minimal, it will be difficult to engage citizen interest, which is often one of the prerequisites for the generation of any public policy. Buchanan, in his theory of public choice, explains why individuals in their private capacity in economic terms seek to “maximize their utility function, but as voters acting in a political process have entirely different perceptions on what is appropriate.” Thus, many of those health policies that do not have obvious individual benefit are unlikely to generate popular enthusiasm. In general, we in health have very little concept about how these political processes move towards the formation of policies and how to influence them.
From the perspective of an organization like ours, one of the most important decisions we can make is to advocate for specificity in addressing healthy public policy. We cannot address all the policy aspects of all the possible determinants of health. Similarly, it is obvious that the principal strategies of health promotion can find application in almost all aspects of the work of a health organization, and throughout this report there will be numerous examples of the health promotion focus. Health promotion is applicable to the actions taken to prevent and control noncommunicable and communicable diseases, although much of the very early focus was on the noncommunicable diseases those that were supposed to be attributable to unhealthy lifestyles and practices. Health promotion finds application in the area of environmental health, as well, and some of the essential aspects of primary environmental care, for example, are grounded in the health promotion strategies. It was, therefore, a conscious decision to structure our Division of Health Promotion and Protection so that it would not have to deal with every application of the strategies of health promotion to every possible health problem. Our Division, in fact, is based on the logic that by concentrating on its three programmatic areas it could show most clearly the application of and results from the critical strategies.
Health promotion is very much here to stay. We have gone past much of the polemic that attended the characterization of any field of study and practice. It is for us to show that there is a practical application of the concepts embedded in health promotion and that, in the final analysis, the efforts in this field result not only in our populations enjoying health, but also in every citizen glorying in the health he or she enjoys. It may not be something new under the sun, but the sun may now be shining more brightly upon it.
Health promotion is the process of enabling people to increase control over, and improve their health. To reach a state of complete physical, mental and social well-being, an individual or group must be able to identify and to realize aspirations, to satisfy needs, and to change or cope with the environment. Health is, therefore, seen as a resource for everyday life, not the objective of living. Health is a positive concept emphasizing social and personal resources, as well as physical capacities. Therefore, health promotion is not just the responsibility of the health sector, but goes beyond healthy life-styles to well being." (World Health Organization (WHO) Ottawa, 21 November 1986)
"Any planned measure which promotes health or prevents disease, disability and premature death." (Tones 1987