1.块结构:
PL/SQL程序被分割为称为块(block)的结构,块中包含PL/SQL程序语句。典型的PL/SQL块具有
以下的结构:
[DECLARE
declaration_statements
]
BEGIN
executable_statements
[EXCEPTION
exception_handling_statements
]
END;
语法元素:
declaration_statement :
声明了在块的其余部分中使用的变量。这些变量是块的局部变量。
executable_statment:
块的实际可执行语句。
exeception_handling_statement:
处理可执行语句可能发生的错误。注意:每条语句都要有(;)分号结尾,块使用END关键字结尾。例程:
DECLARE
width INTEGER :=2;
height INTEGER ;
area INTEGER ;
BEGIN
height :=3 ;
area :=width*height ;
DBMS_OUTPUT.PUT_LINE('Area='||area); //表示在屏幕上显示;
END;
/ //表示执行这个PL/SQL块;注意:必须在SQL*PLUS中提前输入:SET SERVEROUTPUT ON 才能显示的输出。2.变量类型:
变量名 变量类型 ;/ : = [初始数值] ;
id INTEGER ;
name VARCHAR2(20) :='BinMing'; * proname product.price%TYPE ; // (%TYPE) 表示proname 的类型要和product表中的price的类型一致。3.条件逻辑:
1.IF [条件1] THEN
[语句段];
ELSEIF [条件2] THEN
.
.
.
END IF ;
2.循环(简单循环/WHILE/FOR)
单循环:
LOOP
statements
END LOOP;
//一直循环语句段,除非显示的输入EXIT / EXIT WHEN 语句结束循环
WHILE循环:
WHILE condition LOOP
statements
END LOOP;example:
count:=0;
WHILE counter<6 LOOP
count :=count + 1 ;
END LOOP ;3.FOR循环:
FOR loop_variable IN [REVERSE] lower_bound..upper_bound LOOP
statements;
END LOOP;example:
FOR id IN 3..6 LOOP
DBMS_OUTPUT.PUT_LINE(id);
END LOOP;
4.游标的使用:步骤一: 声明变量来存储例值 :DECLARE
id products.id%TYPE;
......
......步骤二: 声明游标 :游标要放在声明部分中。CURSOR product_cursor IS
SELECT
id,name,price
FROM
products
ORDER BY
id; //声明了游标的类型或着说方法步骤三:打开游标 :
使用OPEN语句打开游标,必须放在块的可执行部分中。 OPEN product_cursor ;步骤四: 从游标中获取行:
使用 FETCH 语句读取游标中的行:
FETCH:
product_cursor;
INTO
id,name,price; //把值存储到上面声明的三个变量中.
// 如果游标返回可能包含很多行的话,就要循环取出每一行数据,
可以使用product_cursor%NOTFOUND决定虚幻何时结束。步骤五: 关闭游标:
CLOSE product_cursor;5.过程:
使用PL/SQL创建包含一组SQL语句和PL/SQL语句的过程。
可以使用这些过程将业务逻辑集中在数据库中,访问数据
库的任何程序都可以使用这些过程。 使用CREATE PROCEDURE 语句创建PL/SQL过程:
CREATE[OR REPLACE] PROCEDURE procedure_name //过程名字
[(parameter_name)[IN|OUT|IN OUT] type[, ...])] //过程使用的参数
{IS|AS}
{
body
};.IN 参数的默认模式。如果在过程运行时参数以有一个值,而且这个值在过程体中不能修改,
那么就应该指定这种模式。
.OUT 如果参数的值只在过程体中设置,那么就应该指定这种模式。
.IN OUT 如果在过程被调用时参数可能已经有一个值,但是这个值可以在过程体中修改,那
么就应该指定这种模式。
例子程序:
CREATE PROCEDURE update_product_price( p_product_id IN products.id%TYPE ;
p_factor IN NUMBER ;
) AS product_count INTEGER ; BEGIN
SELECT
COUNT(*)
INTO
product_count
FROM
products
WHERE
id = p_product_id; IF product_count = 1 THEN
UPDATE
products
SET
price = price * p_factor ;
COMMIT ;
END IF ; END update_product_price ;
/
http://clsoftprog.blog.ccidnet.com/blog/ccid/do_showone/tid_113990.html
PL/SQL程序被分割为称为块(block)的结构,块中包含PL/SQL程序语句。典型的PL/SQL块具有
以下的结构:
[DECLARE
declaration_statements
]
BEGIN
executable_statements
[EXCEPTION
exception_handling_statements
]
END;
语法元素:
declaration_statement :
声明了在块的其余部分中使用的变量。这些变量是块的局部变量。
executable_statment:
块的实际可执行语句。
exeception_handling_statement:
处理可执行语句可能发生的错误。注意:每条语句都要有(;)分号结尾,块使用END关键字结尾。例程:
DECLARE
width INTEGER :=2;
height INTEGER ;
area INTEGER ;
BEGIN
height :=3 ;
area :=width*height ;
DBMS_OUTPUT.PUT_LINE('Area='||area); //表示在屏幕上显示;
END;
/ //表示执行这个PL/SQL块;注意:必须在SQL*PLUS中提前输入:SET SERVEROUTPUT ON 才能显示的输出。2.变量类型:
变量名 变量类型 ;/ : = [初始数值] ;
id INTEGER ;
name VARCHAR2(20) :='BinMing'; * proname product.price%TYPE ; // (%TYPE) 表示proname 的类型要和product表中的price的类型一致。3.条件逻辑:
1.IF [条件1] THEN
[语句段];
ELSEIF [条件2] THEN
.
.
.
END IF ;
2.循环(简单循环/WHILE/FOR)
单循环:
LOOP
statements
END LOOP;
//一直循环语句段,除非显示的输入EXIT / EXIT WHEN 语句结束循环
WHILE循环:
WHILE condition LOOP
statements
END LOOP;example:
count:=0;
WHILE counter<6 LOOP
count :=count + 1 ;
END LOOP ;3.FOR循环:
FOR loop_variable IN [REVERSE] lower_bound..upper_bound LOOP
statements;
END LOOP;example:
FOR id IN 3..6 LOOP
DBMS_OUTPUT.PUT_LINE(id);
END LOOP;
4.游标的使用:步骤一: 声明变量来存储例值 :DECLARE
id products.id%TYPE;
......
......步骤二: 声明游标 :游标要放在声明部分中。CURSOR product_cursor IS
SELECT
id,name,price
FROM
products
ORDER BY
id; //声明了游标的类型或着说方法步骤三:打开游标 :
使用OPEN语句打开游标,必须放在块的可执行部分中。 OPEN product_cursor ;步骤四: 从游标中获取行:
使用 FETCH 语句读取游标中的行:
FETCH:
product_cursor;
INTO
id,name,price; //把值存储到上面声明的三个变量中.
// 如果游标返回可能包含很多行的话,就要循环取出每一行数据,
可以使用product_cursor%NOTFOUND决定虚幻何时结束。步骤五: 关闭游标:
CLOSE product_cursor;5.过程:
使用PL/SQL创建包含一组SQL语句和PL/SQL语句的过程。
可以使用这些过程将业务逻辑集中在数据库中,访问数据
库的任何程序都可以使用这些过程。 使用CREATE PROCEDURE 语句创建PL/SQL过程:
CREATE[OR REPLACE] PROCEDURE procedure_name //过程名字
[(parameter_name)[IN|OUT|IN OUT] type[, ...])] //过程使用的参数
{IS|AS}
{
body
};.IN 参数的默认模式。如果在过程运行时参数以有一个值,而且这个值在过程体中不能修改,
那么就应该指定这种模式。
.OUT 如果参数的值只在过程体中设置,那么就应该指定这种模式。
.IN OUT 如果在过程被调用时参数可能已经有一个值,但是这个值可以在过程体中修改,那
么就应该指定这种模式。
例子程序:
CREATE PROCEDURE update_product_price( p_product_id IN products.id%TYPE ;
p_factor IN NUMBER ;
) AS product_count INTEGER ; BEGIN
SELECT
COUNT(*)
INTO
product_count
FROM
products
WHERE
id = p_product_id; IF product_count = 1 THEN
UPDATE
products
SET
price = price * p_factor ;
COMMIT ;
END IF ; END update_product_price ;
/
http://clsoftprog.blog.ccidnet.com/blog/ccid/do_showone/tid_113990.html
解决方案 »
- 循环语句
- expdp 之后无法导入,如何处理
- oracle92中如何创建类型,类型和物理表的结果一样
- 机子重启后,oracle客户端连接时出现“tns: 无监听程序”的错误
- 一个简单语句问题,在线等
- 关于子查询
- ■■谁能回答谁就是高手!请问select table_name from user_tables;可以查看当前用户的表类似user_tables这样的表还有哪些?????
- 如何用SQL语句实调用export和import
- 数据链接
- oracle进程的问题
- 为什么oracle会自动执行 alter session set time-zone =
- 请教高手:没给字符串字段赋值,为什么该字段不是NULL呢
谢谢楼主
1.IF [条件1] THEN
[语句段];
ELSEIF [条件2] THEN
.
.
.
END IF ;3.条件逻辑:
1.IF [条件1] THEN
[语句段];
ELSIF [条件2] THEN
.
.
.
END IF ;