PLSQL 执行块

流程控制

1. IF

 IF 条件 THEN
   
  ELSE
   
  END IF;

2. CASE

CASE '&grade'
WHEN ’A’ THEN DBMS_OUTPUT.PUT_LINE(’优异’);
WHEN ’B’ THEN DBMS_OUTPUT.PUT_LINE (优秀’);

3. 循环控制

3.1 LOOP 循环
/* 无条件循环 */
DECLARE
  v_Counter BINARY_INTEGER := 1;
BEGIN
  LOOP
     INSERT INTO temp_table VALUES (v_Counter, 'Loop index');
     v_Counter := v_Counter + 1;

     IF v_Counter > 50 THEN
         EXIT;
     END IF;

  END LOOP;
END;
3.2 WHILE 循环
DECLARE
  v_Counter BINARY_INTEGER := 1;
BEGIN
  WHILE v_Counter <= 50 LOOP
      INSERT INTO temp_table VALUES (v_Counter, 'Loop index');
      v_Counter := v_Counter + 1;
  END LOOP;
END;
3.3 for条件循环
DECLARE
  v_Counter  NUMBER := 7;
BEGIN
   FOR v_Counter IN 20..30 LOOP
     INSERT INTO temp_table (num_col) VALUES (v_Counter);
   END LOOP;
END;

4. 顺序控制

4.1 GOTO 语句
DECLARE
 ...
BEGIN
 ...
    GOTO updation;
 ...
   <<updation>>
END;

4.2 NULL 语句

SQL块结构

SET SERVEROUTPUT ON  在块中使用传递参数:&nCount

DECLARE	声明
...
BEGIN	执行部分
...
EXCEPTION	异常处理部分
...
END;

匿名块

[DECLARE]

BEGIN

[EXCEPTION]

END;

存储过程

IN
用于接受调用程序的值
OUT
用于向调用程序返回值 
IN OUT
用于接受调用程序的值,并向调用程序返回更新的值

将过程的执行权限授予其他用户:
SQL> GRANT EXECUTE ON find_emp TO MARTIN;
SQL> GRANT EXECUTE ON swap TO PUBLIC;
---------------------------------------
CREATE OR REPLACE PROCEDURE find_emp(item_code IN VARCHAR2)
AS
 
BEGIN

[EXCEPTION]

END find_emp;

函数

函数只能接受 IN 参数,而不能接受 IN OUT 或 OUT 参数
形参不能是 PL/SQL 类型
函数的返回类型也必须是数据库类型
必须在规格说明中包含 RETURN 子句
-----------------------------------
FUNCTION name RETURN fun_datatype
IS
BEGIN
	...
[EXCEPTION]
	...
END;
-----------------------------------
函数调用
SELECT fun_datatype FROM DUAL
nType := fun_datatype
posted @ 2023-12-10 01:31  osbreak  阅读(19)  评论(0编辑  收藏  举报