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; 
posted @ 2026-08-30 18:52  清哥的码农生活  阅读(3)  评论(0)    收藏  举报