Oracle PL/SQL
语法结构
方括号表示语法的可选部分。您必须具有BEGIN和END语句,并且必须至少有一个可执行语句。
[DECLARE]--声明开始关键字
/*这里是声明部分,包括PL/SQL中的变量、常量以及类型等*/
BEGIN--执行部分开始的标志
/*这里是执行部分,是整个PL/SQL块的主体部分,该部分在PL/SQL块中必须存在,
可以是SQL语句或者程序流程控制语句等*/
[EXCEPTION]--异常开始部分的关键字
/*这里是异常处理部分,当出现异常时程序流程可以进入此处*/
END;--执行结束标志
---测试一,end的后面必须加上;
BEGIN
dbms_output.put_line('hello world2');
END;
数据库输出
DECLARE NUM INT:=1;
BEGIN
dbms_output.put_line(NUM);
dbms_output.put_line('hello world2');
END;

DECLARE NUM NUMBER(8,2);
BEGIN
NUM:=100/6;
dbms_output.put_line(NUM);
END;

查询结果赋值
DECLARE NUM NUMBER(8,2);
BEGIN
SELECT number into NUM FROM table where rownum=1;
END;
变量声明
Oracle PL / SQL变量 - 码农教程 (manongjc.com)
声明变量
语法
variable_name datatype
[
[NOT NULL]
{:=|DEFAULT}expression
];
--常量声明
constant_name CONSTANT datatype
[NOT NULL]
{:=|DEFAULT}expression;
主要变量后面是;
DECLARE
d_birthday DATE;
i_emp_count SMALLINT := 0; --给出默认值
n_char CHAR DEFAULT 'O'; --default与:=一样
BEGIN
NULL;
END;
%TYPE
锚指向使用关键字%TYPE将PL / SQL数据类型定义“锚定”到相应的SQL数据类型定义,这点有个好处就是当表的数据类型改变,变量的数据类型也随着改变。
--测试
DECLARE
c_char ALLTYPE."_CHAR"%TYPE; --字段_开头的需要加""
n_num ALLTYPE.NUMBER2%TYPE;
BEGIN
c_char := 'A';
n_num := 95.25;
DBMS_OUTPUT.PUT_LINE ('c_char = ' || c_char);
DBMS_OUTPUT.PUT_LINE (n_num);
END;
变量赋值
使用:=赋值变量,或者select xxx into xx from table;返回结果只能为一行;
select id, name, birth_date, gender
into n_id v_name, d_birth_date, v_gender
from
AUTHORS
where AUTHORS.id = 10;
常量
CONSTANT:注意此关键字在变量名称后
DECLARE
n_real CONSTANT REAL := 5.00;
BEGIN
NULL;
END;
循环结构
LOOP
Oracle PL / SQL loop循环 - 码农教程 (manongjc.com)
--LOOP EXIT
DECLARE
x NUMBER := 0;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE('Inside loop: x = ' || TO_CHAR(x));
x := x + 1;
IF x > 10 THEN
EXIT;
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE (' After loop: x = ' || TO_CHAR(x));
END;
--LOOP EXIT WHEN 更加方便一些
DECLARE
x NUMBER := 0;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE ('Inside loop: x = ' || TO_CHAR(x));
x := x + 1;
EXIT WHEN x > 10;
END LOOP;
DBMS_OUTPUT.PUT_LINE ('After loop: x = ' || TO_CHAR(x));
END;
--标记PL / SQL循环
DECLARE
s PLS_INTEGER := 0;
i PLS_INTEGER := 0;
j PLS_INTEGER;
BEGIN
<<outer_loop>>
LOOP
i := i + 1;
j := 0;
<<inner_loop>>
LOOP
j := j + 1;
s := s + i * j;
EXIT inner_loop WHEN (j > 10);
EXIT outer_loop WHEN ((i * j) > 25);
END LOOP inner_loop;
END LOOP outer_loop;
DBMS_OUTPUT.PUT_LINE('The sum: ' || TO_CHAR(s));
END;
FOR...LOOP
Oracle PL / SQL for loop循环 - 码农教程 (manongjc.com)
BEGIN
FOR loop_counter IN 1..10
LOOP
DBMS_OUTPUT.PUT_LINE(loop_counter);
END LOOP;
END;
-----嵌套循环
BEGIN
<<outer_loop>>
FOR i IN 1..3 LOOP
<<inner_loop>>
FOR i IN 1..3 LOOP
IF outer_loop.i = 2 THEN
DBMS_OUTPUT.PUT_LINE
( 'outer: ' || TO_CHAR(outer_loop.i) || ' inner: '
|| TO_CHAR(inner_loop.i));
END IF;
END LOOP inner_loop;
END LOOP outer_loop;
END;
WHILE...LOOP
DECLARE
counter INTEGER;
BEGIN
counter := 0;
WHILE counter < 6 LOOP
counter := counter + 1;
DBMS_OUTPUT.PUT_LINE(counter);
END LOOP;
END;
GOTO
DECLARE
p VARCHAR2(30);
n PLS_INTEGER := 100;
BEGIN
FOR j in 2..ROUND(SQRT(n)) LOOP
IF n MOD j = 0 THEN
p := ' is not a prime number';
GOTO my_label;
END IF;
END LOOP;
p := ' is a prime number';
<<my_label>>
DBMS_OUTPUT.PUT_LINE(TO_CHAR(n) || p);
END;

浙公网安备 33010602011771号