您的位置:首页 > 产品设计 > UI/UE

PL/SQL : Procedural Language / Structual Query Language and it is an exrension to SQL.

2015-03-11 22:52 441 查看
SQL is not very flexible and it cannot be made to react differently to differing sutuations easily. In SQL queries we normally tell database what we want but not tell it how to do it.

SQL : give commands, commands complete with ;

PL/SQL : follow the procedure, create programs (use SQL), using If conditions Else Elseif and loops (while loop, for loop, do while, control or check error, exceptions)

eg :

Declare

(to create all variables)

Begin

programs (SQL commands not DDL)

Exception

(execute programs on any error)

End;

note : if there is no need to declare variables, then there's no need to write Declare statement.

the minimal :

Begin

Select * from emp;

End;

write using SQL>

method 1 :

SQL>Begin

SQL> Select * from emp;

SQL>End;

SQL>

method 2 :

create a file (like notepad)

give the name as ABC.sal or ABC.pls(Procedural Language Script)

then you can run this file in SQL

PL/SQL allows you to work with the database with the ease of SQL, while giving you the power and flexibility or procedual constructs such as : Variables, Flow Control (If Else Condition), Error Handling, you can create a block of code containing several SQL statements and send them as a single request to the database. This improves performance.

in SQL :

DDL : Data Denifition Language

eg : Create table/view/sequence, Alter table/view/sequence, Drop table/view/sequence

DML : Data Manipulation Language

eg : Insert, Update, Delete

DCL : Data Control Language

eg : create user, grant user, revoke,

PL/SQL features

1.variables & constants : objects within PL/SQL that are used to store and manipulate values. Several data types are available, the more common ones beings, VARCHAR2, DATE and BOOLEAN.

2.SQL - All DML(Data manipulation language)type of SQL statements can be used directly whin PL/SQL

3.Flow Control : PL/SQL supports flow control statements such as IF, FOR, WHILE. These allow for conditional actions, branching and iterative(loop)control.

4.Built_in Functions : most functions that are available in SQL can ve used in a PL/SQL statemtns

5.Cursor Management : to process data returned from multiple-row queries. we can modify the data according to

6.Block Structure : PL/SQL programs are made up of blocks of code. blocks aare used to separate code.

7.Exception Handling : PL/SQL supports an elegant method for handling exceptions (errors) within code. the programmer can define his own exceptions. eg : trying to change the value od PK.

8.Composite Type : PL/SQL allows you to create composite data types, which typically relate to a row on a database table. eg : a single variable of row type can store the data from the while table record(many columns)

9. Sored Code : PL/SQL programs can ve stored within the database in the form of packages, procedures, functions and triggers. so we can run our programs any time we have stored in database in different forms.

eg :

%type : datatype from table columns

Stud_ID Student_table.student_ID%type;

Stud_ID Number; static Datatype

Dynamic datatype (can be changed)

static datatype variable

dynamic datatype variable

eg : variable_name table_name.column_name%type

eg : Stud_ID Student_table.Student_ID%type

variable to whole record/row %rowtype

eg : variable_name table_name%rowtype

eg : Student_rec Student_table%rowtype

display :

Student_rec.Name

Student_rec.Age

Student_rec.Student_id

variable name datatype

Student_name Varchar(20);

dynamic variable

Student_name Student_table.Name%type

(If someone changes the datatype of name in Student table, you have no need to change your PL/SQL program.)

record or row type variable

Student_row Student_table%rowtype

Cursor --> store many columns, many records

array of %rowtype variable

Cursor --> select * from emp; (store the data inside memory)

open cursor and get the data from cursor, update the data inside cursor, copu the cursor back to table, close the cursot.

Declare

Begin

Exception

End;

PL/SQL programs

1.functions (return something)

2.procedures (similar to function (can or cannot return ))

3.packages (biggest program)

4.cursors

5.triggers

PL/SQL Fundamentals

basic PL/SQL syntax

1. free format language : no given format, we can write the programs in any way.

2. PL/SQL statements can be written in many lines.

3. keywords cannot split in many lines.

4. identifiers (variables) must start with an alpha-character, can be up to 30 characters in length and cannot be a reserved word.

5. character and date literal (data) are enclosed in single quotes. ('')

6. each statement must end with a semicolon (;)

eg : Stud_name := 'ABC'; (to store data)

Stud_name = 'ABC'; (in IF condition)

all PL/SQL programs are made up of blocks. a PL/SQL program must contain at least one block. a block is made up of PL/SQL statements enclosed within the keywords, BEGIN and END, eg :

BEGIN

INSERT INTO table (col) VALUES('XX');

END;

for a variable declaration you can also include a DECLARE section, eg :

DECLARE

v_number NUMBER;

BEGIN

v_number := 10;

END;

for exception handling use the EXCEPTION keyword, eg :

DECLARE

v_number NUMBER;

BEGIN

v_number := 10;

EXCEPTION

WHEN OTHERS THEN

DBMS_OUTPUT.put_line('Error');

END;

eg :

DECLARE

Stud_ID Number;

BEGIN

Stud_ID := 100;

DBMS_OUTPUT.put_line('Student ID is : ' | | Stud_ID);

END;

(when you execute your program, it will show you the value of Stud_ID. you have to set serveroutput on first.)

SQL> Set serveroutput on / off

SQL> Show serveroutput (display the serveroutput state)

the PL/SQL block - multiple block

a PL/SQL program can consist of several in-line blocks, eg :

DECLARE

v_number NUMBER;

BEGIN

v_number := 10;

EXCEPTION

WHEN OTHERS THEN

DBMS_OUTPUT.put_line('Error 1');

END;

BEGIN

v_number := 20;

EXCEPTION

WHEN OTHERS THEN

DBMS_OUTPUT.put_line('Error 2');

END;

BEGIN

v_number := 30;

EXCEPTION

WHEN OTHERS THEN

DBMS.OUTPUT.put_line('Error 3');

END;

note : the blocks with only one declare must be in one file.

PL/SQL blocks can contain nested (inside) blocks. eg :

DECLARE

BEGIN

...outer block statements

DECLATE

... inner block declarations

BEGIN

...inner block statements

END;

... outer block statements

EXCEPTION

... outer block statements

END;

note : you can write nested blocks under BEGIN and EXCEPTION but not DECLARE.

there are several types of blocks :

Anonymous block : have no name and are generally stored in a host file or entered directly into SQL *Plus and executed just once.

Named blocks : very much the same as an anonymous block except the block is given a label.

Subprograms : Packages, Procedures and Functions are blocks of codes stored within the database. these blocks are executed via a specific call via the block name.

Triggers : these are also named blocks that are stored within the database. triggers are executed implicitly whenever the triggering event occurs. (Insert, update or delete)

Goto labele

eg :

Named blocks : name is enclosed in << and >> :

<<ABC>>

DECLARE

Stud_ID Number;

BEGIN

Stud_ID := 100;

if Stud_ID >100

goto <<XYZ>>

else

DBMS_OUTPUT.put_line(' ');

END;

<<my_block>>

DECLARE

v_number NUMBER;

BEGIN

v_number := 100;

END;

Subprograms : function to square a number :

CREATE OR REPLACE FUNCTION square(p_number IN NUMBER)

IS

BEGIN

RETURN p_number *2;

END;

Triggers : these are also named blocks that fire (execute) in response to a database event. (Insert, update or delete)

CREATE OR REPLACE TRIGGER audit

BEFORE DELETE ON items

FOR EACH ROW

BEGIN

INSERT INTO audit_table(item, description)

VALUES(:old.item,:old.description);

END;

Triggers : named PL/SQL blocks

Execute or run at event : insert, update, delete.

before insert, update, delete

after insert, update, delete

before delete on emp;

delete from emp;

before update on emp;

update from emp;

after insert on emp;

scope and visibility

install virtual box

instal second

install windows xp --> start program database 11g

conn scott/tiger

select * from tab;

disc

exit

0806036320 1

Simple Variable

Num_1 number(10);

Constant Variable

Declare

Num_1 Constant number(10) := 100;

Begin

From the database table

Num_1 emp.Empno%

Basic PL/SQL Syntax(rules)

1. free format language

2.PL/SQL statements can be written in many lines

3.keywords cannot split in many lines.

4.identifiers (variables) must start with an alpha-character, can be up to 30 characters in length and cannot be a reserved word.

5.character and date literal (data) are enclosed in single quotes. ('')

6. each statement must end with a semicolon (;)

Scope and visibility

the block in which an object is declared, including any nested blocks is the scope on an object.

if the variable in the inner block was also called x as in the outer block, then whilst in the inner block, x would refer to the x declared in the current block. x in the outer block still exists but has no visibility.

comments

single-line comments : start with two dashes : --

multiple-line comments : begin with : /* and end with : */

note : multiple comments cannot be nested.

eg :

show user

show serveroutput

set serveroutput on

Begin

DBMS_OUTPUT.put_line('Hello world');

END

clear buffer or cl buff

clear screen

using a variable

Declare

msg varchar2(50);

BEGIN

msg := ' Hello World';

DBMS_OUTPUT.put_line('msg');

END;

. : 退出编写程序

/ : run your program

ed : to open the editor

eg : to display the employee name from emp table

emp_name varchar2(25);

select ename into emp_name from emp where empno=7369; DBMS_OUTPUT

eg : to display 'Error' when error happens.

Declare

test number(10);

Begin

test:='ABC';

DBMS.OUTPUT.put_line('test');

Exception

when others then

DBMS_OUTPUT.put_line('Error');

End;

variables

a variable is simply a location in memory where you can store data of different types.

variables can be read or set during execution of a PL/SQL block, values from the database can be stored in variables as can literals and values of other variables.

all variables must be declared before they can be used. the declaration of a variable specifies the type and size of the data that the variable will hold.

variable declaration

all declaration must appear in the DECLARE section of your block.

syntax :

varname TYPE [CONSTANT] [NOT NULL] [:=value];

eg :

DECLARE

v_anumber1 NUMBER(10);

v_anumber2 NUMBER := 100;

v_astring VARCHAR2(1) NOT NULL :='Y';

v_astring2 VARCHAR2(1) NOT NULL DEFAULT 'Y';

variable initialization

if you declare a variable without specifying a default value, PL/SQL automatically initializes all variables without a default value to NULL.

variable type anchoring

if you know the type of a variable is directly related to a column on a table within the database then you can anchor the type of your variable to the type on the database,

eg : %type(single column), %rowtype(whole row or record)

eg : variable_name table_name.column_name%TYPE;

you can also anchor a variable type to another variable in the same program.

eg :

Declare

test emp.empno%type;

test1 test%type;

emp_rec emp%rowtype;

emp_rec1 emp_rec%type;

emp_name emp.ename%type;

Begin

Select ename into emp_name from emp where emp_no=1234;

Select * into emp_rec from emp where emp_no= 1111;

DBMS_OUTPUT.put_line(emp_rec.empno, emp_rec.ename);

DBMS_OUTPUT.put_line(emp_rec1.ename);

End;

eg :

v_item_id items.item_id%TYPE;

v_new_item v_item_id%TYPE;

variable constants

a variable can be declared as a constant (fixed) value by using the CONSTANT keyword within the varaible declaration. any attempt to change a constant value will cause an error to occur.

eg :

DECLARE

c_bad_status CONSTANT NUMBER :=5;

BEGIN

IF v_item_status = c_bad_status THEN

...

eg :

Declare

Const_variable constant number(10) := 25;

Begin

Constant_variable :=30; --ERROR

DBMS_OUTPUT.put_line(Constant_variable);

End;

assignments & expressions

assignments can appear anywhere within a block of code, not just the DECLARE section. an assignmetn is the storing of a value in a variable. assignment has the following basic syntax.

eg :

v_counter := 0;

v_name := 'This is the name';

v_date := TO_DATE('10-JAN-99','DD-MON-RR');

v_processed :- TRUE;

v_total := 5 * 10;

v_count := v_count + 50;

v_first_name := first_name(name_cur.full_name);

v_today := SYSDATE;

v_coolean := 5 > 10;

v_x_is_bigger_than_y : X < Y;

x_continue : A = B AND D > E;

v_valid_type := v_item_type LIKE 'QB%';

v_not_set := IS NULL v_number;

v_in_range := v_id BETWEEN 10 AND 50;

v_in_list : v_id IN(10,10,50,70,90);

note : DECODE and any group functions CANNOT be used.

GOTO Named Block <<name_of_block>>

eg :

Declare

test number(10);

Begin

test := 100;

if test > 75 then

goto ABC;

else

DBMS_OUTPUT.put_line(' less than 75');

end if;

<<ABC>>

Begin

DBMS_OUTPUT.put_line(' greater than 75');

End;

End;

PL/SQL from SQL*Plus

1. enter PL/SQL directly into the SQL buffer and run it.

2. create a PL/SQL script file and then execute that file from SQL*Plus.

eg : to run your program

/ : to run the last program you have just created.(without clear buffer)

ABC.pls (PL/SQL Script)

ABC.sql

2eg :

SAVE file_name.pls

GET file_name.pls

3 different methods to run script file.

/ : run script file

START file_name.pls : run script file

@file_name.pls : run script file

note : if there is any error in your program, you can view errors by querying the USER_ERRORS database view.

viewing the result

1.insert information into a table and query back the table.

2.use a SQL*Plus bind variable.

3.use the oracle supplied package DBMS_OUTPUT to send output to the screen.

1eg :

CREATE TABLE my_debug

(text1 VARCHAR2(500);

DECLARE

l_x NUMBER := 0L

BEGIN

INSERT INTO my_debug

VALUES ('Before='||TO_CHAR(l_x));

l_x := l_x +10;

INSERT INTO my_debug

VALUES ('After='||TO_CHAR(l_x));

END;

.

/

SELECT text1 FROM my_debug;

2eg :

VAR[IABLE] name [NUMBER]CHAR[(N)]|VARCHAR2[(N)]]

VAR result NUMBER

print result;

3eg :

SET serverout[put] ON|OFF [SIZE n]

SER serverout ON SIZE 1000000

note : if you do not give value of size, sometimes it will give an error message.

%type

%rowtype

1.create a table

eg :

Create table stud (stud_id number(10), stud_name varchar2(50), stud_age number(2))

Insert into stud VALUES (1001,'ABC', 20); (1002, 'XYZ', 21)

Declare

student stud%rowtype;

student1 student%type;

Begin

Select * into student from stud where stud_id = 1001;

DBMS_OUTPUT.put_line(student1.stud_id);

DBMS_OUTPUT.put_line(student1.stud_name);

DBMS_OUTPUT.put_line(student1.stud_age);

End;

how to use boolean values

Declare

true_false boolean;

id number(10) := 10;

Begin

--true_false := TRUE;

true_false := 5 > 10;

true_false := 5=5 AND 6,10;

true_false := id between 5 AND 15;

true_false := id in (1, 5, 10, 100);

if (true_false) = true then

DBMS_OUTPUT.put_line('TRUE');

else

DBMS_OUTPUT.put_line('FALSE');

End;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐