---------------------------PL/SQL基础 ---------------
-----------------/*pl/sql基本结构*/
DECLARE
n NUMBER;
BEGIN
n:= CEIL(123/12);
dbms_output.put_line(n);
END;
DECLARE
--设置默认值
m VARCHAR2(10) DEFAULT 'te';
--常量的定义
n CONSTANT NUMBER DEFAULT 5;
BEGIN
m := m || '32'||4;
dbms_output.put_line(m||',n等于'||n);
END;
------记录类型变量
--%type
DECLARE
l test6.id%TYPE;
m test6.name%TYPE;
BEGIN
SELECT * INTO l,m FROM test6;
dbms_output.put_line('l='||l||',m='||m);
END;
--记录类型
--record 类型
DECLARE
TYPE test_data IS RECORD
(
m test6.id%TYPE,
n VARCHAR2(100)
);
test_record test_data;--记录类型变量
BEGIN
SELECT ID,NAME INTO test_record FROM test6;
dbms_output.put_line(test_record.m||','||test_record.n);
END;
--%rowtype
--使用rowtype类型变量
DECLARE
t test6%ROWTYPE;
BEGIN
SELECT * INTO t FROM test6;
dbms_output.put_line(t.id||' , '||t.name);
END;
--索引表类型
--待深究
DECLARE
TYPE t IS TABLE OF test6%ROWTYPE
INDEX BY BINARY_INTEGER;
s t;
BEGIN
SELECT * INTO s(1) FROM test6;--获取第一行数据
dbms_output.put_line(s(1).id);
END;
--varray 变长数组
DECLARE
--定义变长数组的长度
TYPE ary IS VARRAY(100) OF VARCHAR2(20);
vary ary:=ary('12','d','e3');
BEGIN
--为数组中元素赋值
vary(2):='fick';
--数组下标从1 开始
dbms_output.put_line(vary(3));
END;
---计算 开方 ((12+18)/10+17)**2
DECLARE
rst NUMBER;
BEGIN
-- ** 乘方
rst := SQRT(((12+18)/10+17)**2);
dbms_output.put_line(rst);
END;
----------------------------pl/sql 中的结构控制语句-----------------------
--if con then sta else if elsif
DECLARE
a NUMBER;
b NUMBER;
BEGIN
---一个指定范围内的随机数
a := dbms_random.value(100,300);
b := dbms_random.value(1,300);
--if 条件 then 逻辑
-- else 逻辑 end if;
IF a>b AND a<200 then
dbms_output.put_line('a大于b,a小于200,并且a='||a||',b='||b);
--不支持 else if
ELSIF a>b AND a>=200 then
dbms_output.put_line('a大于b且a大于等于200,并且a='||a||',b='||b);
ELSE
dbms_output.put_line('a='||CEIL(a)||',b='||FLOOR(b));
END IF ;
dbms_output.put_line('条件执行完成');
END;
---case 条件控制语句
DECLARE
a VARCHAR2(10) :='10';
BEGIN
--case 语句
CASE a
WHEN '5' THEN
dbms_output.put_line('a=5');
WHEN '10' THEN
dbms_output.put_line('a=10');
ELSE
dbms_output.put_line('fuck');
--结束 case语句
END CASE;
END;
-- 带有条件的case语句
DECLARE
b NUMBER(10,0):=102;
BEGIN
CASE
WHEN b>10 AND b<100 THEN
dbms_output.put_line('b大于10且小于100');
WHEN b<=10 THEN
dbms_output.put_line('b小于等于10');
ELSE
dbms_output.put_line('b大于等于100');
END CASE;
END;
------------------------------loop 循环控制语句---------------------------
-----------------******* for循环 *****--------------
--计算1-10的和
DECLARE
rest NUMBER(10,0) :=0;
BEGIN
FOR t IN 1..10 loop
rest := rest+t;
END LOOP;
dbms_output.put_line(rest);
dbms_output.put_line('循环已经结束');
END;
-------基本的loop循环----
DECLARE
r NUMBER(10,0) :=1;
BEGIN
LOOP
r := r+1;
--退出条件
EXIT WHEN r>6;
END LOOP;
dbms_output.put_line(r);
dbms_output.put_line('退出loop');
END;
----while 循环----
DECLARE
s NUMBER(6,0):=1;
BEGIN
WHILE s<10
LOOP
s :=s+2;
END LOOP;
dbms_output.put_line(s);
dbms_output.put_line('退出while循环');
END;
转载于:https://my.oschina.net/u/2284956/blog/354648