Sybase ASE
Sybase ASE
Induction to Sybase Adaptive Server Enterprise
White Paper
Contents
Introduction 4
ASE Architecture Basics 4
Adaptive Server Logon 5
Default System Databases 5
SQL 6
Transact - SQL (T-SQL) 6
Database Objects 7
Sybase Data Types 7
Basic SQLS and T SQL statement 8
Creating Table 8
Dropping Table 9
Altering Existing Tables 9
Adding Data to a Table 9
Selecting Data from a Table 10
Grouping of result set 12
Changing Existing Data in a Table 13
Deleting Data from Table 13
Equi joins , Natural Joins , Self Joins 14
Outer joins 16
Left Outer Join 16
Right Outer Join 16
Temporary Table 17
Views 17
Stored Procedure 18
Creating and executing stored procedures 18
Stored Procedures with Parameters 19
Returning information from stored procedures 19
Restrictions associated with stored procedures 20
Renaming stored procedures 20
Dropping stored procedures 21
Triggers in Sybase 21
Inserted and deleted table 22
Trigger restrictions 22
Disabling/Enabling triggers 22
Dropping Triggers 23
Global Variables used in Stored Procedures and Triggers 23
Transaction and Batches 23
Transactions 23
Batching 25
end Essential T-SQL commands 25
Some History of ASE 25
Other Sybase Database Products 25
Competitors & market share 25
Conclusion 25
Introduction
ASE is short for "Adaptive Server Enterprise", the relational database management software manufactured and sold by Sybase, Inc. It was Architect by Dr.Robert Epstein and Tom Haggin.Earlier Sybase called this RDBMS as “Sybase SQL Server. The product was renamed from SQL Server to Adaptive Server Enterprise (ASE) when version 11.5 was released .ASE is a versatile, enterprise-class RDBMS which is especially good at handling OLTP workloads. ASE is used intensively in the financial world (banks, stock exchanges, insurance companies), in E-commerce, as well as in virtually every other area.
The most recent ASE release is ASE version 15.0.3; the previous major release is version 12.5.x. The latest flavor of ASE is ASE Cluster Edition, a high-availability version of ASE similar to Oracle's RAC
ASE runs on the main flavors of UNIX, on Linux, on Windows NT/200x, and on MacOS X.
Sybase ASE is a proprietary, commercial software product. Yet, free versions of ASE are available as well
ASE Architecture Basics
A Sybase server consists of:
1. Two processes, data server and backup server.
2. Devices which house the database; one database (master) contains system and configuration data
3. A configuration file which contains the server attributes.
Memory Model:
The Sybase memory model consists of:
1. The program area, which is where the data server executable is stored.
2. The data cache, stores recently fetched pages from the database device.
3. The stored procedure cache, which contains optimized SQL calls.
The Sybase data server runs as a single process within the operating system; when multiple users are connected to the database, only one process is managed by the OS.
Adaptive Server Logon
Each ASE server can contains multiple databases apart from the default system databases. Each database contains multiple objects like tables, stored procedures, views etc. A user has one logon (login id/password) for the whole server. This is called the server user name. A user must be added to a database within the server before the user can access that database. The user's name within the database is just called a "user name”. A user has one server user name for the whole server and one database user name for each database he's been in. Each database has one user designated as the database owner or dbo. The dbo is privileged within the database.
A server user name may not be the same as the corresponding database username. It's generally a good idea to keep them the same. When a user logins to the database server, the user is put into his default database (different for different users).
By default an SQL query will look for a table name in the current database.
Default System Databases
Following are the system databases that are installed automatically when you install Adaptive server
Master – Controls user databases and operation of Adaptive Server as a whole. If the master database fails or gets repaired then server will become unavailable until you repair it.
Model – This is used by Adaptive Server as a template for creating new user databases. Each time the create database command is issued, SQL Server makes a copy of model.
Sybsystemprocs – It contains the Sybase System Stored Procedures
Sybsystemdb –All Sybase servers (version > 12.0) must have a sybsystemdb database. Adaptive Server uses this database for tracking transactions and during recovery. In addition, it is used for applications using two-phase commit and Distributed Transaction Management (DTM).
Note: The two-phase commit protocol allows client applications to coordinate transaction updates across two or more Adaptive Servers and treats those transactions as a single transaction. Two-phase commit guarantees that either all or none of the databases in the participating Adaptive Servers are updated.
Tempdb -Stores temporary objects, including temporary tables
Optionally, you can also install:
• The auditing database, sybsecurity
• The sample databases, pubs2 and pubs3
• The dbcc database, dbccdb
• The Job Scheduler database, sybmgmtdb
SQL
SQL (Structured Query Language) is a high-level language used in relational database systems. Originally developed by IBM's San Jose Research Laboratory in the late 1970s, SQL has been adopted by, and adapted for, many relational database management systems. It has been approved as the official relational query language standard by the American National Standards Institute (ANSI) and the International Organization for Standardization (ISO).
Almost all modern Relational Database Management Systems like Sybase ,MS SQL Server, Microsoft Access, MSDE, Oracle, DB2, Sybase, MySQL, Postgres and Informix use SQL as standard database language.
Although all those RDBMS use SQL, they use different SQL dialects. For example Sybase specific version of the SQL is called T-SQL, Oracle version of SQL is called PL/SQL, MS Access version of SQL is called JET SQL, etc.
SQL includes commands not only for querying (retrieving data from) a database, but also for creating new databases and database objects, adding new data, modifying existing data, and other functions.
Transact - SQL (T-SQL)
Sybase has extended SQL with procedural control statements. The extended SQL is called Transact-SQL.
Transact-SQL includes the following procedural extensions:
• Conditional execution (if..then)
• Looping (while)
• Variables
• Procedures calling procedures (much more on this later)
• Error handling
Database Objects
Database stores data in a set of database objects. Following are the Adaptive Server database objects
1. Table is a collection of rows; each row has set of associated columns
2. Rule allows to specify what user can or can’t enter into a particular column
3. Default is a value assigned to a column if the user doesn’t explicitly provide a value
4. Stored procedure is a named collection of SQL and control statements
5. Trigger is a stored procedure that fires when insert/update/delete happens in a table
6. Views is a named SELECT statement that is stored in a database as an object
7. Referential integrity constraints require that data being inserted in specific
Columns already have matching data in the specified table and columns
8. Check integrity constraints limit the values of data inserted into columns.
NOTE: Indexes are not considered as database object by Adaptive Server and hence not listed in sysobjects
Sybase Data Types
A data type is simply a kind of information: text, numbers, and so on. Using data types allows Sybase SQL Server to sort your information, perform calculations on your data, and to search through your data successfully. Here are the main Sybase data types
|Exact Numeric Data types |
|Data Type |Bytes |
|Tinyint |1 (0 to 255) |
|Smallint |2 (-32,768 to 32,767) |
|Integer |4 |
|Decimal(p,[s]) |2-17 |
|Numeric(p,[s]) |2-17 |
Note: p ( Precision. Specifies the total number of digits that can be stored
S ( Scale. Specifies the maximum number of digits that can be stored to the right of the decimal point
|Approximate Numeric Data Types |
|Data Type |Bytes |
|Float (P) |4 - 8 |
|Double P |8 |
|Real |4 |
|Date/Time |
|Data Type |Bytes |
|Smalldatetime |4 (Jan 1, 1900 to Jun 7 2079) |
|Datetime |(Jan 1, 1753 to Dec 31 9999) |
|Character Numeric |
|Data Type |Bytes |
|Char(n) |N |
|Varchar(n) |Actual Entry Length |
|Nchar (n) |n * @@ncharsize |
|Nvarchar(n) |@@ncharsize * no of characters |
|Monetary data types for representing currency values |
|Data Type |Bytes |
|Smallmoney |4 |
|Money |8 |
Basic SQLS and T SQL statement
Creating Table
The CREATE TABLE statement has an extremely broad range of options that are documented in the Sybase Reference manual , so only a small subset of options are described here. The basic syntax for creating a table is as follows:
Create table (column_name datatype , [, column-name datatype]...)
By default the column is NOT NULL. Table name can be max 30 chars long
Eg. : create table titles
(title_id tid not null Primary Key,
title varchar(80) not null,
type char(12),
pub_id char(4) null,
price money null,
advance money null,
royalty int null,
total_sales int null,
notes varchar(200) null,
pubdate datetime,
contract bit not null)
Note: It’s also possible to create a table from an existing table using the Select into clause
select pub_id, pub_name into newtable from publishers
A table called newtable is created, using two of the columns in the four-column table publishers. Since this statement includes no where clause, data from all the rows (but only the two specified columns) of publishers is copied into newtable.
If you just want the structure of the table with no data then
Select * into newtable from publishers where 1 = 2
Dropping Table
Basic SQL syntax for dropping a table is
Drop table
Eg: Drop table titles
Altering Existing Tables
Use the alter table command to change the structure of an existing table.
Following alterations can be done using the alter table command.
a) Add columns and constraints
b) Change column default values
c) Add either null or non-null columns
d) Drop columns and constraints
e) Change locking scheme
f) Convert column data types
g) Convert the null default value of existing columns
h) Increase or decrease column length
The syntax of the alter table command is
alter table table_name
[add column_name datatype [identity | null |not null] [, column_name datatype [identity |null | not null]]]
[drop column_name [, column_name]
[modify column_name {[data_type][[null] | [not null]]}
[, column_name datatype [null | not null]]]
Eg: alter table titles add description varchar(100)
alter table titles modify title varchar(90)
alter table titles drop royalty
Adding Data to a Table
The INSERT statement adds new rows to a table
You can use the insert command to add rows to the database in two ways; with the values keyword or with a select statement:
• The values keyword specifies values for some or all of the columns in a new row. A simplified version of the syntax for the insert command using the values keyword is:
insert table_name
values (constant1, constant2, ...)
• You can use a select statement in an insert statement to pull values from one or more tables (up to a limit of 16 tables, including the table into which you are inserting). A simplified version of the syntax for the insert command using a select statement is:
insert table_name
select column_list
from table_list
where search_conditions
Here is the full syntax for the insert command:
insert [into] [database.[owner.]] {table_name |
view_name} [(column_list)]
{values (constant_expression
[, constant_expression]...) | select_statement}
Few Sample INSERT statements are given below
a) insert into dept values (5, ‘Sales’, 500, ‘10/26/1998’)
b) insert into employee (ename, edoj, emgr_id, edeptid, esal, rec_createddt)
values (‘ADAM’, ‘12/01/2007’,10, 5,5000,‘12/01/2007’)
c) insert into temp_dept select * from dept
d) insert into temp_employee (ename, edoj, emgr_id, edeptid, esal, rec_createddt)
select ename, edoj, emgr_id, edeptid, esal, rec_createddt
from employee where edeptid = 10
Selecting Data from a Table
The select command retrieves data stored in the rows and columns of database tables using a procedure called a query. A query has three main parts: the select clause, the from clause, and the where clause
A simple syntax of a select statement is:
select select_list
from table_list
where search_conditions
The select clause specifies the columns you want to retrieve. The from clause specifies the tables to search. The where clause specifies which rows in the tables you want to see.
Few Simple Select Statements are given below
Select * from publishers
Select pub_id, pub_name, city, state from publishers
select Publisher = pub_name, pub_id from publishers
Select pub_name "Publisher's Name" from publishers
Select title_id,(total_sales * price) - (advance /2) from titles
The where clause in a select statement specifies the search conditions that determine which rows are retrieved. Search conditions, or qualifications, in the where clause includes:
• Comparison operators (=, , and so on)
• Eg: where advance * 2 > total_sales * price
• Ranges (between and not between)
Eg: where total_sales between 4095 and 12000
• Lists (in, not in)
Eg: where state in ("CA", "IN", "MD")
• Character matches (like and not like)
Eg: where phone not like "415%"
• Unknown values (is null and is not null)
Eg: where advance is null
• Combinations of search conditions (and, or)
Eg : where advance < 5000 or total_sales between 2000 and 2500
Following are few sample Select statements using where clause
1. select title_id, newprice = price * $1.15
from pubs2..titles
where advance > 5000
2. select title_id, total_sales
from titles
where total_sales between 4095 and 12000
3. select au_lname, state
from authors
where state in ("CA", "IN", "MD")
Select emp_name from employee where Created_by like ‘USER%’
The where keyword can also introduce:
• Join conditions
• Subquery
When you join two or more tables, the columns being compared must have similar values—that is, values using the same or similar datatypes.
There are several types of joins, such as equijoins, natural joins, and outer joins. The most common join, the equijoin, is based on equality. The following join finds the names of authors and publishers located in the same city:
select au_fname, au_lname, pub_name
from authors, publishers
where authors.city = publishers.city
Because the query draws on information contained in two separate tables, publishers and authors, you need a join to retrieve the requested information. This statement joins the publishers and authors tables using the city column as the link:
where authors.city = publishers.city
You can embed a join in a select, update, insert, delete, or subquery
A subquery is a select statement that is nested inside another select, insert, update, or delete statement, inside a conditional statement, or inside another subquery. They are also called inner queries and they appear within a where or having clause of another SQL statement, or in the select list of a statement.
Following is an example of Select statement using a Subquery
select au_lname, au_fname
from authors
where au_id in (select au_id from titleauthor where royaltyper 5000 group by type
3. Select type, avg(advance) from titles where advance > 1000 and advance < 10000 group by type
You can group by maximum of 16 columns
Changing Existing Data in a Table
Use the update command to change single rows, groups of rows, or all rows in a table. If an update statement violates an integrity constraint, the update does not take place and an error message is generated. The update is canceled, for example, if it affects the table's IDENTITY column, or if one of the values being added is the wrong datatype, or if it violates a rule that has been defined for one of the columns or datatypes involved.
A simplified version of the update syntax for updating specified rows with an expression is:
update table_name
set column_name = expression
where search_conditions
Following are few sample update statements
1. update authors
set au_lname = "Health", au_fname = "Goodbody"
where au_lname = "Blotchet-Halls"
2. update titleauthor
set title_id = titles.title_id
from titleauthor, titles where titleauthor.title_id=titles.titles_id
Deleting Data from Table
The DELETE command deletes one or more rows in a table
A Simplified version of Delete Syntax is
delete [from]
[[database.]owner.]{view_name | table_name}
[where search_conditions]
The where clause specifies which rows are to be removed. When no where clause is given in the delete statement, all rows in the table are removed
Following are few sample delete statements
1. Delete titles
2. Delete from titles
3. delete titles from authors, titles, titleauthor where titles.title_id = titleauthor.title_id and authors.au_id = titleauthor.au_id and city = "Big Bad Bay City"
Deleting all rows from table using delete command requires log space to perform this and its very slow. Use truncate table to delete all rows in a table. It is almost always faster than a delete statement with no conditions, because the delete logs each change, while truncate table just logs the deallocation of entire data pages. As with delete, a table emptied with truncate table remains in the database, along with its indexes and other associated objects, unless you enter a drop table command.
You cannot use Delete/truncate table if another table has rows that reference it through a referential integrity constraint. Delete the rows from the foreign table, or truncate the foreign table and then Truncate /Delete the primary table.
The syntax of truncate table is:
truncate table [[database.]owner.]table_name
For example, to remove all the data in sales table use the below SQL:
truncate table sales
Equi joins , Natural Joins , Self Joins
Equi Joins: Joins that match columns on the basis of equality (=) are called equijoins. Equijoins compare the values in the columns being joined for equality and then include all the columns in the tables being joined in the results.
Eg : select * from authors, publishers where authors. city = publishers. city
In the results of this statement, the city column appears twice. By definition, the results of an equijoin contain two identical columns
Natural Join: The result of equijoins can be altered to eliminate repeating column. The new result is natural join.
The query that results in the natural join of publishers and authors on the city column is:
select publishers.pub_id, publishers.pub_name,
publishers.state, authors.*
from publishers, authors
where publishers.city = authors.city
The column publishers.city does not appear in the results
You can use more than one join operator to join more than two tables or to join more than two pairs of columns. These “join expressions” are usually connected with and, although or is also legal
Eg:
select au_fname, au_lname, pub_name
from authors, publishers
where authors.city = publishers.city
and authors.state = publishers.state
Self Join: Joins that compare values within the same column of one table are called self-joins. To distinguish the two roles in which the table appears, use aliases, or correlation names.
select emp.emp_name,mgr.emp_name
from employees emp, employees mgr
where emp.employee_id= mgr.employee_id
NOTE : The condition for joining the values in two columns does not need to be equality. You can use any of the other comparison operators: not equal (!=), greater than (>), less than (=), and less than or equal to ( and ! publishers.state
and pub_name = "New Age Books"
Outer joins
Joins that include all rows, regardless of whether there is a matching row, are called outer joins. Adaptive Server supports both left and right outer joins. For example, the following query joins the titles and the titleauthor tables on their title_id column. It is an example of left outer join.
Left Outer Join
select *
from titles, titleauthor
where titles.title_id *= titleauthor.title_id
It selects all rows from titles even though there is no matching title_id in titleauthor table. For rows with no corresponding title_id in titleauthor table, it will show null values for titleauthor data
Right Outer Join
select *
from titles, titleauthor
where titles.title_id =* titleauthor.title_id
It selects all rows from titleauthor even though there is no matching title_id in title table. For rows with no corresponding title_id in title table, it will show null values for title data
Sybase supports both Transact-SQL and ANSI outer joins. Transact-SQL outer joins (shown in the above example) use the *= command to indicate a left outer join and the =* command to indicate a right outer join. ANSI outer joins use the keywords left join and right join to indicate a left and right join, respectively. Sybase implemented the ANSI outer join syntax to fully comply with the ANSI standard.
The above left outer join example rewritten as an ANSI outer join will look as below:
select *
from titles left join titleauthor
on titles.title_id = titleauthor.title_id
The two methods of writing joins, ANSI or Transact-SQL, are equivalent. However Sybase recommends that your applications use ANSI outer joins because they unambiguously specify whether the on or where clause contains the predicate.
Temporary Table
Create temporary tables either by preceding the table name in a create table statement with a pound sign (#) or by specifying the name prefix "tempdb..".
Temporary tables created with a pound sign are accessible only by the current Adaptive Server session: users on other sessions cannot access them. These nonsharable, temporary tables are destroyed at the end of each session. The first 13 bytes of the table's name, including the pound sign (#), must be unique. Adaptive Server assigns the names of such tables a 17-byte number suffix. (You can see the suffix when you query tempdb..sysobjects.)
Temporary tables created with the "tempdb.." prefix are stored in tempdb and can be shared among Adaptive Server sessions. Adaptive Server does not change the names of temporary tables created this way. The table exists either until you restart Adaptive Server or until its owner drops it using drop table.
Views
View is a named SELECT statement that is stored in a database as an object. A view is derived from one or more real tables (called base tables) whose data is physically stored in the database.
Only the definition of a view is stored in the database. Not the separate copies of data.
Example:
create view emp_v as
select eid, ename, edeptid
from employee
where edeptid not in (5, 10)
Advantages of views:
1. Views allow to focus, simplify, and customize each user’s perception of the tables.
2. Views also provide a security mechanism by allowing users to access a subset of rows or columns in one or more tables.
3. Define frequently used joins, projections, and selections as views
Note: Views can also be based on more than one table
Stored Procedure
A stored procedure is a named collection of SQL statements or controlof-flow language.
Stored procedures can
• Take parameters
• Call other procedures
• Return a status value to a calling procedure or batch to indicate success or failure and the reason for failure
• Return values of parameters to a calling procedure or batch
• Be executed on remote Adaptive Servers
The procedures stored in the sybsystemprocs database whose names begin with “sp_”
are known as system procedures, because they insert, update, delete and report on data
in the system tables.
Stored procedures can serve as security mechanisms, since a user can be granted
permission to execute a stored procedure, even if she or he does not have permissions on
the tables or views
Creating and executing stored procedures
The complete syntax for create procedure is:
Create procedure [owner.]procedure_name
@parameter_name datatype [= default] [output],
@parameter_name datatype [= default] [output]]
...
…
[with recompile]
as {SQL_statements | external name dll_name}
Here is the complete syntax statement for execute:
[exec[ute]] [@return_status = ]
[[[server .]database.]owner.]procedure_name[ ;number]
[[@parameter_name =] value |
[@parameter_name =] @variable [output]
[, [@parameter_name =] value |
[@parameter_name =] @variable [output]...]]
[with recompile]
Stored Procedures with Parameters
A parameter is an argument to a stored procedure.
Eg: create proc au_info @lastname varchar(40), @firstname varchar(20)
As
Executing the proc with parameter
execute au_info Ringer, Anne
If you supply the parameters in the form “@parameter = value” you can supply them in any order.
Eg: execute au_info @firstname= Anne ,@lastname=Ringer
Default parameters
You can assign a default value for the parameter in the create procedure statement. This value, which can be any constant, is used as the argument to the procedure if the user does not supply one.
create proc pub_info @pubname varchar(40) = "Algodata Infosystems" ,@pubid int=null
as
Returning information from stored procedures
Stored procedures can return the following types of information:
1. Return status – indicates whether or not the stored procedure completed successfully.
2. Return parameters – report the parameter values back to the caller, who can then use
conditional statements to check the returned value.
Return Status can take any of the following values
|Value |Meaning |
|0 |Procedure Executed Without Error |
|-1 |Missing Object |
|-2 |Data Type Error |
|-3 |Process Was Chosen as Dead Lock Victim |
|-4 |Permission Error |
|-5 |Syntax Error |
|-6 |Miscellaneous User Error |
|-7 |Resource Error Such as out of space |
|-8 |Non –Fatal Internal Problem |
|-9 |System Limit was Reached |
|-10 |Fatal Internal Inconsistency |
|-11 |Fatal Internal Inconsistency |
|-12 |Table or Index is Corrupt |
|-13 |Database is corrupt |
|-14 |Hardware Error |
Restrictions associated with stored procedures
The create procedure definition itself can include any number and kind of SQL statements,
except use of these create statements:
• create view
• create default
• create rule
• create trigger
• create procedure
The maximum number of parameters in a stored procedure is 255.
When both a create procedure statement and an execute statement include the
output option with a parameter name, the procedure returns a value to the caller.
create procedure mathtutor
@mult1 int, @mult2 int, @result int output
as
select @result = @mult1 * @mult2
Output parameter while executing the proc
exec mathtutor 5, 6, @result output
Renaming stored procedures
Synatx for renaming stored procedure is
sp_rename objname, newname
Eg: sp_rename mathtutor mathtutor1
Dropping stored procedures
Syntax for dropping stored procedure is
drop proc[edure] [owner.]procedure_name [, [owner.]procedure_name] ...
Eg: drop proc mathtutor
Triggers in Sybase
Trigger is a special type of SP that gets executed automatically when any DML operation takes place on a table.
Triggers are used to
1. Enforce referential integrity.
2. Cascade changes to related tables.
3. Apply complex restrictions than that enforced using rules.
4. Perform analysis before and after changes to the table.
Triggers cannot have the following:
1. create and drop commands.
2. alter table, alter database, truncate table.
3. Load database and transactions.
4. Grant and revoke statements.
5. update statistics
6. reconfigure
7. disk init, disk mirror, disk refit, disk reinit, disk remirror, disk unmirror
8. select into
Syntax for creating Trigger in Sybase is
create trigger [owner.]trigger_name
on [owner.]table_name
{for {insert, update, delete}
as SQL_statements
Eg: create trigger emp_trigger
on emp
for delete
as
delete payment from payment, deleted where payment.empid = deleted.empid
Since triggers execute as part of a transaction, the following statements are not allowed in a trigger:
• All create commands, including create database, create table, create index, create
• procedure, create default, create rule, create trigger, and create view
• All drop commands
• alter table and alter database
• truncate table
• grant and revoke
• update statistics
• reconfigure
• load database and load transaction
• select into
Inserted and deleted table
Trigger maintains two internal tables which can be accessed only by trigger. It has no
existence outside the trigger. All the new rows inserted in the trigger table are also inserted into inserted table. All the deleted rows from trigger table are inserted into deleted table.
Trigger restrictions
• A table can have a maximum of three triggers: one update trigger, one insert trigger, and one delete trigger.
• Each trigger can apply to only one table. However, a single trigger can apply to all three user actions: update, insert, and delete.
• You cannot create a trigger on a view or on a temporary table, though triggers can
reference views or temporary tables
• The writetext statement will not activate insert or update triggers.
• You cannot create triggers on system tables
• You cannot use triggers that select from a text column or an image column of the inserted or deleted table
• Truncate table cannot fire a trigger
Disabling/Enabling triggers
Syntax: alter table [database_name.[owner_name].]table_name
{enable | disable } trigger [trigger_name]
Eg: alter table pubs2 disable del_pubs
alter table pubs2 enable del_pubs
Dropping Triggers
drop trigger [owner.]trigger_name [, [owner.]trigger_name]...
Eg: Drop Trigger del_pubs
Global Variables used in Stored Procedures and Triggers
Sybase has special global variables which, which should really be called system variables.
These are predefined variables which hold system related information. All global variables start with a "@@"
The most interesting global (system) variables are:
|Global Variable |Purpose |
|@@error |@error contains 0 if the last transaction is successful. otherwise @@error contains the last error number |
| |generated by the system |
|@@identity |@@identity contains the last value inserted into an IDENTITY column in |
| |the current user session. |
|@@sqlstatus |@@sqlstatus contains status information resulting from the last fetch |
| |statement for the current user session. (0-fetch successful, 1- Error, 2- No data) |
|@@rowcount |Contains the number of rows affected by the last query. |
|@@transtate |Keeps track of the current state of a transaction |
| |(0- Transaction in Progress, 1- Success, 2-Statement aborted, 3- Transaction Aborted) |
|@@servername |he name of the Sybase dataserver. |
|@@version |What version of the Sybase server you are using. |
Transaction and Batches
Transactions
A transaction represents a set of database operations which either complete successfully or rollback so that no modifications at all are made. Sybase transactions start with an explicit "begin transaction" statement and end with the standard "commit transaction". These statements have to occur in pairs. In Sybase, if a single "select", "insert", "update", or "delete" is executed, the single statement is treated as if there is a "begin transaction" before the statement and a "commit transaction" after the statement. Thus by default, each insert, update, and delete statement is considered a single transaction. You can use the following commands to create transactions:
begin transaction – marks the beginning of the transaction block.
Syntax : begin {transaction | tran} [transaction_name]
transaction_name is the name assigned to the transaction. It must conform to the rules for
identifiers. Use transaction names only on the outermost pair of nested begin/commit or
begin/rollback statements.
save transaction – marks a savepoint within a transaction:
Syntax : save {transaction | tran} savepoint_name
savepoint_name is the name assigned to the savepoint. It must conform to the rules for
identifiers.
commit – commits the entire transaction:
Syntax : commit [transaction | tran] [transaction_name]
rollback – rolls a transaction back to a savepoint or to the beginning of a transaction:
Syntax : rollback [transaction | tran] [transaction_name | savepoint_name]
Transactions allow Adaptive Server to guarantee:
• Consistency – simultaneous queries and change requests cannot collide with each other,
and users never see or operate on data that is partially through a change.
• Recovery – in case of system failure, database recovery is complete and automatic.
Example:
begin transaction royalty_change
update titleauthor set royaltyper = 65 from titleauthor, titles where royaltyper = 75
If(@@ERROR != 0)
rollback transaction royalty_change
update titleauthor set royaltyper = 35 from titleauthor, titles where royaltyper = 25
save transaction percentchanged
If(@@ERROR != 0)
rollback transaction percentchanged
commit transaction royalty_change
Checking the state of transactions
The global variable @@transtate keeps track of the current state of a transaction. Adaptive
Server determines what state to return by keeping track of any transaction changes after a
statement executes.
@@transtate may contain the following values:
|Value |Meaning |
|1 |A transaction is in progress.A transaction is in effect.Previous statement executed successfully |
|2 |Transaction Succeeded. Transaction completed and committed its changes |
|3 |Statement aborted .The previous statement was aborted.No effect on the transaction |
|4 |Process Was Chosen as Transaction aborted .The transaction aborted and rolled back any changes |
Batching
There is limited space provided to the log segment. While running big transaction, it can lead to the log suspend due to not having enough space available to complete the transaction. When you have long transaction and it crosses the log segment threshold, it is called open transaction.
To prevent the log suspend problem you need to run the transaction in small batches which is enough for the log size. For running multiple transactions in a database you need to put proper batches in your transaction so that log is not blown up.
For example if you are deleting large volume of data, use batching while deleting.
set rowcount 10000
while (@rowcount != 0)
begin
delete from TABLE where data between ‘20080101’ and ‘20080130’
select @rowcount = @@ROWCOUNT
end
Essential T-SQL commands
Important commands to be on fingertips: -
select db_name() – returns the name for current database.
select @@servername – returns the current database server.
sp_who – reports current processes with users and database info.
sp_depends – displays information about objects dependencies.
sp_help – summary information about database object.
Some History of ASE
ASE started its life in the mid-eighties as "Sybase SQL Server". For a number of years Microsoft was a Sybase distributor, reselling the Sybase product for OS/2 and (later) NT under the name "Microsoft SQL Server".
Around 1994, Microsoft basically bought a copy of the source code of Sybase SQL Server and then went its own way. As competitors, Sybase and Microsoft have been developing their products independently ever since. Microsoft has mostly emphasised ease-of-use and "Window-ising" the product, while Sybase has focused on maximising performance and reliability, and catering to the high end of the OLTP market.
When releasing version 11.5 in 1997, Sybase renamed its product to "ASE" to better distinguish itself from "MS SQL Server". Because of the common background, there are still many similarities in today's versions of ASE and MS SQL Server: it is relatively simple to learn one if you already know the other
In the early days, Sybase SQL Server was the first true client-server RDBMS which was also capable of handling real-world workloads. In contrast, other DBMSs have long been monolithic programs; for example, Oracle only "bolted on" client-server functionality in the mid-nineties. Also, Sybase SQL Server was the first commercially successful RDBMS supporting stored procedures and triggers, and a cost-based query optimizer.
The technical quality of ASE has always been, and still is, recognized throughout the IT industry. As a technology-driven company, Sybase has always been better at writing good software and building great products than at marketing those products. In my opinion, this is the main reason why today's market share of ASE is smaller than that of Oracle or Microsoft SQL Server.
Incidentally, the name 'Sybase' is said to have been derived from the words 'system' and 'database'.
Other Sybase Database Products
Apart from ASE, Sybase also sells two other database products, called ASIQ -- "Adaptive Server IQ" -- and SQL Anywhere or ASA -- "Adaptive Server Anywhere" (note that "Adaptive Server" by itself doesn't identify one specific Sybase product):
ASIQ (or just "IQ" for short) is a database for DSS-type applications (Decision Support Systems); it is not suitable for OLTP. ASIQ is very good in answering ad-hoc queries that would be very difficult to optimize in an RDBMS. For example: which female customers have shoe size 8 and bought a blue dress this month ? ASIQ performance is incredible. Also, ASIQ is unique in being the only such product where the total data volume actually shrinks (for other vendor's products, the data volume typically expands signficantly, often by an order of magnitude).
SQL Anywhere (also referred to as ASA) is a fully functional RDBMS, but typically used in smaller systems (as opposed to the large-scale ASE installations). ASA was originally known as Watcom SQL, which was acquired by Sybase in the 90's. This was renamed to SQL Anywhere/ASA; it's often referred to just as "Anywhere".
ASA runs on just about any piece of computing hardware including DOS, PalmOS, Windows and Unix. A light-weight variety is used in equipment such as mobile phones; Sybase claims to be market leader in this mobile market segment.
Sybase sells many other products, including two other databases discussed above like Replication server etc .But it is still best known for ASE. For this reason, you may hear people talking about "Sybase" when they're referring to ASE.
Competitors & market share
The main competitors of Sybase ASE are Microsoft SQL Server, IBM's DB2 and Oracle (Informix has been swallowed by IBM). Competition in the database market is fierce, especially Oracle likes to picture Sybase as an almost-dead, irrelevant company, whose customers would do themselves a big favour if they'd switch to Oracle. I think the real reason for those attacks is the fact that Sybase has a very profitable and loyal customer base (especially financials, but also government, telco, healthcare), which Oracle would love to snatch away. Apparently though, those customers have their reasons to stay with Sybase... (while we're at it, go here for some puns on Oracle).
On a technical note, a major advantage of Sybase ASE over Oracle is its more efficient use of the underlying hardware: an Oracle server consists of a handful of OS processes, continuously competing for CPU. In contrast, ASE has only one OS process for doing the same work, thus strongly reducing overhead. In addition, ASE's transaction logging mechanism is more efficient than Oracle's in terms of disk I/O usage. In other words, ASE gets significantly more end-user performance from the same hardware than Oracle would, due to a fundamentally different, and more efficient architecture.
It is widely believed by DBAs with both Sybase and Oracle experience that a Sybase ASE environment is significantly cheaper to operate and maintain than a comparable Oracle environment. Some DBAs claim that, in their experience, you need about five times more DBAs for Oracle than for Sybase ASE. That number may be on the upper end of the scale, but it seems safe to say that you need only half the DBAs for Sybase than you do for Oracle.
It is a fact that the market share of ASE is smaller than that of the other three products mentioned above. People sometimes wonder if this means that ASE is no good -- doubts that will certainly be fueled by the competition. The plain fact that Wall Street (among others) runs for a large part on ASE and other Sybase products should be an indication of the quality and reliability of the Sybase products.
It's another fact that Oracle is bigger than Sybase, but that's hardly an argument against Sybase. After all, the size of a company is not necessarily an indication of the quality or reliability of its products: if that were true, the world wouldn't be complaining about Microsoft so much.
Open-source products like MySQL and PostGreSQL cannot really be compared with ASE, as they're aimed at an entirely different class of applications. Typically these are used in environments with not many concurrent users, no high availability/recoverability requirements, not-so-large database sizes, or with a predominantly read-only workload. In other words, these products are not suited for the enterprise-level computing requirements addressed by ASE.
Conclusion
Over the past year, Forrester interviewed many Sybase customers who use Sybase Adaptive Server Enterprise (ASE). A majority of these customers rated Sybase ASE as a highly reliable database management system (DBMS) with strong database features, very good technical support, and the ability to meet or exceed their requirements to support mission-critical applications. Sybase remains committed to ASE, focusing on advanced features and innovation, especially in the areas of performance, continuous availability, scalability, security, manageability, and XML
................
................
In order to avoid copyright disputes, this page is only a partial summary.
To fulfill the demand for quickly locating and searching documents.
It is intelligent file search solution for home and business.
Related download
- solutions chapter 1 sql and data test your thinking
- mysql documentation mysql by chapter page
- nonstop sql a distributed high performance high
- sql access and ibm drda microsoft azure
- microsoft office access 2003 inside out
- database standard review checklist accenture
- sql is a standard computer language for accessing and
- sql create database statement maggotty high cape it
Related searches
- ase valvular regurgitation
- ase guidelines regurgitation
- ase mitral regurg
- ase guidelines mitral regurgitation
- ase lvh guidelines
- ase guidelines for mitral regurgitation
- ase prosthetic aortic valve
- ase guidelines bioprosthetic valve
- ase prosthetic valve
- ase certification testing centers
- ase certification refrigerant certification
- ase practice test